1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB) */ 7 /* */ 8 /* Licensed under the Apache License, Version 2.0 (the "License"); */ 9 /* you may not use this file except in compliance with the License. */ 10 /* You may obtain a copy of the License at */ 11 /* */ 12 /* http://www.apache.org/licenses/LICENSE-2.0 */ 13 /* */ 14 /* Unless required by applicable law or agreed to in writing, software */ 15 /* distributed under the License is distributed on an "AS IS" BASIS, */ 16 /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ 17 /* See the License for the specific language governing permissions and */ 18 /* limitations under the License. */ 19 /* */ 20 /* You should have received a copy of the Apache-2.0 license */ 21 /* along with SCIP; see the file LICENSE. If not visit scipopt.org. */ 22 /* */ 23 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 24 25 /**@file pub_nlpi.h 26 * @ingroup PUBLICCOREAPI 27 * @brief public methods for NLP solver interfaces 28 * @author Thorsten Gellermann 29 * @author Stefan Vigerske 30 */ 31 32 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 33 34 #ifndef __SCIP_PUB_NLPI_H__ 35 #define __SCIP_PUB_NLPI_H__ 36 37 #include "scip/def.h" 38 #include "scip/type_nlpi.h" 39 #include "scip/type_misc.h" 40 41 #ifdef NDEBUG 42 #include "scip/struct_nlpi.h" 43 #endif 44 45 #ifdef __cplusplus 46 extern "C" { 47 #endif 48 49 /**@addtogroup PublicNLPIInterfaceMethods 50 * 51 * @{ 52 */ 53 54 /** compares two NLPIs w.r.t. their priority */ 55 SCIP_DECL_SORTPTRCOMP(SCIPnlpiComp); 56 57 /** gets data of an NLPI */ 58 SCIP_EXPORT 59 SCIP_NLPIDATA* SCIPnlpiGetData( 60 SCIP_NLPI* nlpi /**< NLP interface structure */ 61 ); 62 63 /** gets NLP solver name */ 64 SCIP_EXPORT 65 const char* SCIPnlpiGetName( 66 SCIP_NLPI* nlpi /**< NLP interface structure */ 67 ); 68 69 /** gets NLP solver description */ 70 SCIP_EXPORT 71 const char* SCIPnlpiGetDesc( 72 SCIP_NLPI* nlpi /**< NLP interface structure */ 73 ); 74 75 /** gets NLP solver priority */ 76 SCIP_EXPORT 77 int SCIPnlpiGetPriority( 78 SCIP_NLPI* nlpi /**< NLP interface structure */ 79 ); 80 81 /**@name Statistics */ 82 /**@{ */ 83 84 /** gives number of problems created for NLP solver so far */ 85 SCIP_EXPORT 86 int SCIPnlpiGetNProblems( 87 SCIP_NLPI* nlpi /**< NLP interface structure */ 88 ); 89 90 /** gives total time spend in problem creation/modification/freeing */ 91 SCIP_EXPORT 92 SCIP_Real SCIPnlpiGetProblemTime( 93 SCIP_NLPI* nlpi /**< NLP interface structure */ 94 ); 95 96 /** total number of NLP solves so far */ 97 SCIP_EXPORT 98 int SCIPnlpiGetNSolves( 99 SCIP_NLPI* nlpi /**< NLP interface structure */ 100 ); 101 102 /** gives total time spend in NLP solves (as reported by solver) */ 103 SCIP_EXPORT 104 SCIP_Real SCIPnlpiGetSolveTime( 105 SCIP_NLPI* nlpi /**< NLP interface structure */ 106 ); 107 108 /** gives total time spend in function evaluation during NLP solves 109 * 110 * If parameter `timing/nlpieval` is off (the default), depending on the NLP solver, this may just return 0. 111 */ 112 SCIP_EXPORT 113 SCIP_Real SCIPnlpiGetEvalTime( 114 SCIP_NLPI* nlpi /**< NLP interface structure */ 115 ); 116 117 /** gives total number of iterations spend by NLP solver so far */ 118 SCIP_EXPORT 119 SCIP_Longint SCIPnlpiGetNIterations( 120 SCIP_NLPI* nlpi /**< NLP interface structure */ 121 ); 122 123 /** gives number of times a solve ended with a specific termination status */ 124 SCIP_EXPORT 125 int SCIPnlpiGetNTermStat( 126 SCIP_NLPI* nlpi, /**< NLP interface structure */ 127 SCIP_NLPTERMSTAT termstatus /**< the termination status to query for */ 128 ); 129 130 /** gives number of times a solve ended with a specific solution status */ 131 SCIP_EXPORT 132 int SCIPnlpiGetNSolStat( 133 SCIP_NLPI* nlpi, /**< NLP interface structure */ 134 SCIP_NLPSOLSTAT solstatus /**< the solution status to query for */ 135 ); 136 137 /** adds statistics from one NLPI to another */ 138 SCIP_EXPORT 139 void SCIPnlpiMergeStatistics( 140 SCIP_NLPI* targetnlpi, /**< NLP interface where to add statistics */ 141 SCIP_NLPI* sourcenlpi, /**< NLP interface from which to add statistics */ 142 SCIP_Bool reset /**< whether to reset statistics in sourcescip */ 143 ); 144 145 #ifdef NDEBUG 146 /* If NDEBUG is defined, the function calls are overwritten by defines to reduce the number of function calls and 147 * speed up the algorithms. 148 */ 149 #define SCIPnlpiGetData(nlpi) (nlpi)->nlpidata 150 #define SCIPnlpiGetName(nlpi) (nlpi)->name 151 #define SCIPnlpiGetDesc(nlpi) (nlpi)->description 152 #define SCIPnlpiGetPriority(nlpi) (nlpi)->priority 153 #define SCIPnlpiGetNProblems(nlpi) (nlpi)->nproblems 154 #define SCIPnlpiGetProblemTime(nlpi) SCIPclockGetTime((nlpi)->problemtime) 155 #define SCIPnlpiGetNSolves(nlpi) (nlpi)->nsolves 156 #define SCIPnlpiGetSolveTime(nlpi) (nlpi)->solvetime 157 #define SCIPnlpiGetEvalTime(nlpi) (nlpi)->evaltime 158 #define SCIPnlpiGetNIterations(nlpi) (nlpi)->niter 159 #define SCIPnlpiGetNTermStat(nlpi, termstatus) (nlpi)->ntermstat[termstatus] 160 #define SCIPnlpiGetNSolStat(nlpi, solstatus) (nlpi)->nsolstat[solstatus] 161 #endif 162 163 /**@} */ /* Statistics */ 164 165 /**@} */ /* PublicNLPIMethods */ 166 167 #ifdef __cplusplus 168 } 169 #endif 170 171 #endif /* __SCIP_PUB_NLPI_H__ */ 172