1 // Copyright 2010-2021 Google LLC 2 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // you may not use this file except in compliance with the License. 4 // You may obtain a copy of the License at 5 // 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 #ifndef OR_TOOLS_GUROBI_ENVIRONMENT_H_ 15 #define OR_TOOLS_GUROBI_ENVIRONMENT_H_ 16 17 #include "absl/status/status.h" 18 #include "absl/status/statusor.h" 19 #include "ortools/base/commandlineflags.h" 20 #include "ortools/base/dynamic_library.h" 21 #include "ortools/base/logging.h" 22 23 extern "C" { 24 typedef struct _GRBmodel GRBmodel; 25 typedef struct _GRBenv GRBenv; 26 typedef struct _GRBsvec { 27 int len; 28 int* ind; 29 double* val; 30 } GRBsvec; 31 } 32 33 #if defined(_MSC_VER) 34 #define GUROBI_STDCALL __stdcall 35 #else 36 #define GUROBI_STDCALL 37 #endif 38 39 namespace operations_research { 40 41 absl::StatusOr<GRBenv*> GetGurobiEnv(); 42 43 // This returns true if the Gurobi shared library is properly loaded (otherwise, 44 // tries to find it and load it) and if a Gurobi license can be obtained (it 45 // does that by trying to grab a license and then release it). 46 bool GurobiIsCorrectlyInstalled(); 47 48 // clang-format off 49 // Force the loading of the gurobi dynamic library. It returns true if the 50 // library was successfully loaded. This method can only be called once. 51 // Successive calls are no-op. 52 // 53 // Note that it does not check if a token license can be grabbed. 54 absl::Status LoadGurobiDynamicLibrary(std::vector<std::string> potential_paths); 55 56 // The list of #define and extern std::function<> below is generated directly 57 // from gurobi_c.h via parse_header.py 58 // See the top comment on the parse_header.py file. 59 // This is the header section 60 61 #define GRB_VERSION_MAJOR 7 62 #define GRB_VERSION_MINOR 5 63 #define GRB_VERSION_TECHNICAL 2 64 #define DEFAULT_CS_PRIORITY 0 65 #define MAX_CS_PRIORITY 100 66 #define DEFAULT_CS_PORT 61000 67 #define GRB_ERROR_OUT_OF_MEMORY 10001 68 #define GRB_ERROR_NULL_ARGUMENT 10002 69 #define GRB_ERROR_INVALID_ARGUMENT 10003 70 #define GRB_ERROR_UNKNOWN_ATTRIBUTE 10004 71 #define GRB_ERROR_DATA_NOT_AVAILABLE 10005 72 #define GRB_ERROR_INDEX_OUT_OF_RANGE 10006 73 #define GRB_ERROR_UNKNOWN_PARAMETER 10007 74 #define GRB_ERROR_VALUE_OUT_OF_RANGE 10008 75 #define GRB_ERROR_NO_LICENSE 10009 76 #define GRB_ERROR_SIZE_LIMIT_EXCEEDED 10010 77 #define GRB_ERROR_CALLBACK 10011 78 #define GRB_ERROR_FILE_READ 10012 79 #define GRB_ERROR_FILE_WRITE 10013 80 #define GRB_ERROR_NUMERIC 10014 81 #define GRB_ERROR_IIS_NOT_INFEASIBLE 10015 82 #define GRB_ERROR_NOT_FOR_MIP 10016 83 #define GRB_ERROR_OPTIMIZATION_IN_PROGRESS 10017 84 #define GRB_ERROR_DUPLICATES 10018 85 #define GRB_ERROR_NODEFILE 10019 86 #define GRB_ERROR_Q_NOT_PSD 10020 87 #define GRB_ERROR_QCP_EQUALITY_CONSTRAINT 10021 88 #define GRB_ERROR_NETWORK 10022 89 #define GRB_ERROR_JOB_REJECTED 10023 90 #define GRB_ERROR_NOT_SUPPORTED 10024 91 #define GRB_ERROR_EXCEED_2B_NONZEROS 10025 92 #define GRB_ERROR_INVALID_PIECEWISE_OBJ 10026 93 #define GRB_ERROR_UPDATEMODE_CHANGE 10027 94 #define GRB_ERROR_CLOUD 10028 95 #define GRB_ERROR_MODEL_MODIFICATION 10029 96 #define GRB_LESS_EQUAL '<' 97 #define GRB_GREATER_EQUAL '>' 98 #define GRB_EQUAL '=' 99 #define GRB_CONTINUOUS 'C' 100 #define GRB_BINARY 'B' 101 #define GRB_INTEGER 'I' 102 #define GRB_SEMICONT 'S' 103 #define GRB_SEMIINT 'N' 104 #define GRB_MINIMIZE 1 105 #define GRB_MAXIMIZE -1 106 #define GRB_SOS_TYPE1 1 107 #define GRB_SOS_TYPE2 2 108 #define GRB_INFINITY 1e100 109 #define GRB_UNDEFINED 1e101 110 #define GRB_MAXINT 2000000000 111 #define GRB_MAX_NAMELEN 255 112 #define GRB_MAX_STRLEN 512 113 #define GRB_MAX_CONCURRENT 64 114 extern std::function<int(GRBenv **, const char *, const char *, const char *, int,const char *)> GRBisqp; 115 extern std::function<int(GRBmodel *model, const char *attrname, int *datatypeP,int *sizeP, int *settableP)> GRBgetattrinfo; 116 extern std::function<int(GRBmodel *model, const char *attrname)> GRBisattravailable; 117 extern std::function<int(GRBmodel *model, const char *attrname, int *valueP)> GRBgetintattr; 118 extern std::function<int(GRBmodel *model, const char *attrname, int newvalue)> GRBsetintattr; 119 extern std::function<int(GRBmodel *model, const char *attrname,int element, int *valueP)> GRBgetintattrelement; 120 extern std::function<int(GRBmodel *model, const char *attrname,int element, int newvalue)> GRBsetintattrelement; 121 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, int *values)> GRBgetintattrarray; 122 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, int *newvalues)> GRBsetintattrarray; 123 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, int *values)> GRBgetintattrlist; 124 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, int *newvalues)> GRBsetintattrlist; 125 extern std::function<int(GRBmodel *model, const char *attrname,int element, char *valueP)> GRBgetcharattrelement; 126 extern std::function<int(GRBmodel *model, const char *attrname,int element, char newvalue)> GRBsetcharattrelement; 127 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, char *values)> GRBgetcharattrarray; 128 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, char *newvalues)> GRBsetcharattrarray; 129 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, char *values)> GRBgetcharattrlist; 130 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, char *newvalues)> GRBsetcharattrlist; 131 extern std::function<int(GRBmodel *model, const char *attrname, double *valueP)> GRBgetdblattr; 132 extern std::function<int(GRBmodel *model, const char *attrname, double newvalue)> GRBsetdblattr; 133 extern std::function<int(GRBmodel *model, const char *attrname,int element, double *valueP)> GRBgetdblattrelement; 134 extern std::function<int(GRBmodel *model, const char *attrname,int element, double newvalue)> GRBsetdblattrelement; 135 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, double *values)> GRBgetdblattrarray; 136 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, double *newvalues)> GRBsetdblattrarray; 137 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, double *values)> GRBgetdblattrlist; 138 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, double *newvalues)> GRBsetdblattrlist; 139 extern std::function<int(GRBmodel *model, const char *attrname, char **valueP)> GRBgetstrattr; 140 extern std::function<int(GRBmodel *model, const char *attrname, const char *newvalue)> GRBsetstrattr; 141 extern std::function<int(GRBmodel *model, const char *attrname,int element, char **valueP)> GRBgetstrattrelement; 142 extern std::function<int(GRBmodel *model, const char *attrname,int element, const char *newvalue)> GRBsetstrattrelement; 143 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, char **values)> GRBgetstrattrarray; 144 extern std::function<int(GRBmodel *model, const char *attrname,int first, int len, char **newvalues)> GRBsetstrattrarray; 145 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, char **values)> GRBgetstrattrlist; 146 extern std::function<int(GRBmodel *model, const char *attrname,int len, int *ind, char **newvalues)> GRBsetstrattrlist; 147 #define CB_ARGS GRBmodel *model, void *cbdata, int where, void *usrdata 148 extern std::function<int(GRBmodel *model,int (GUROBI_STDCALL *cb)(CB_ARGS),void *usrdata)> GRBsetcallbackfunc; 149 extern std::function<int(GRBmodel *model,int (GUROBI_STDCALL **cbP)(CB_ARGS))> GRBgetcallbackfunc; 150 extern std::function<int(GRBmodel *model,int (GUROBI_STDCALL *cb)(char *msg))> GRBsetlogcallbackfunc; 151 extern std::function<int(GRBenv *env,int (GUROBI_STDCALL *cb)(char *msg))> GRBsetlogcallbackfuncenv; 152 extern std::function<int(void *cbdata, int where, int what, void *resultP)> GRBcbget; 153 extern std::function<int(void *cbdata, const char *paramname, const char *newvalue)> GRBcbsetparam; 154 extern std::function<int(void *cbdata, const double *solution, double *objvalP)> GRBcbsolution; 155 extern std::function<int(void *cbdata, int cutlen, const int *cutind, const double *cutval,char cutsense, double cutrhs)> GRBcbcut; 156 extern std::function<int(void *cbdata, int lazylen, const int *lazyind,const double *lazyval, char lazysense, double lazyrhs)> GRBcblazy; 157 #define GRB_INT_ATTR_NUMCONSTRS "NumConstrs" 158 #define GRB_INT_ATTR_NUMVARS "NumVars" 159 #define GRB_INT_ATTR_NUMSOS "NumSOS" 160 #define GRB_INT_ATTR_NUMQCONSTRS "NumQConstrs" 161 #define GRB_INT_ATTR_NUMGENCONSTRS "NumGenConstrs" 162 #define GRB_INT_ATTR_NUMNZS "NumNZs" 163 #define GRB_DBL_ATTR_DNUMNZS "DNumNZs" 164 #define GRB_INT_ATTR_NUMQNZS "NumQNZs" 165 #define GRB_INT_ATTR_NUMQCNZS "NumQCNZs" 166 #define GRB_INT_ATTR_NUMINTVARS "NumIntVars" 167 #define GRB_INT_ATTR_NUMBINVARS "NumBinVars" 168 #define GRB_INT_ATTR_NUMPWLOBJVARS "NumPWLObjVars" 169 #define GRB_STR_ATTR_MODELNAME "ModelName" 170 #define GRB_INT_ATTR_MODELSENSE "ModelSense" 171 #define GRB_DBL_ATTR_OBJCON "ObjCon" 172 #define GRB_INT_ATTR_IS_MIP "IsMIP" 173 #define GRB_INT_ATTR_IS_QP "IsQP" 174 #define GRB_INT_ATTR_IS_QCP "IsQCP" 175 #define GRB_INT_ATTR_IS_MULTIOBJ "IsMultiObj" 176 #define GRB_STR_ATTR_SERVER "Server" 177 #define GRB_INT_ATTR_LICENSE_EXPIRATION "LicenseExpiration" 178 #define GRB_DBL_ATTR_LB "LB" 179 #define GRB_DBL_ATTR_UB "UB" 180 #define GRB_DBL_ATTR_OBJ "Obj" 181 #define GRB_CHAR_ATTR_VTYPE "VType" 182 #define GRB_DBL_ATTR_START "Start" 183 #define GRB_DBL_ATTR_PSTART "PStart" 184 #define GRB_INT_ATTR_BRANCHPRIORITY "BranchPriority" 185 #define GRB_STR_ATTR_VARNAME "VarName" 186 #define GRB_INT_ATTR_PWLOBJCVX "PWLObjCvx" 187 #define GRB_DBL_ATTR_VARHINTVAL "VarHintVal" 188 #define GRB_INT_ATTR_VARHINTPRI "VarHintPri" 189 #define GRB_INT_ATTR_PARTITION "Partition" 190 #define GRB_DBL_ATTR_RHS "RHS" 191 #define GRB_DBL_ATTR_DSTART "DStart" 192 #define GRB_CHAR_ATTR_SENSE "Sense" 193 #define GRB_STR_ATTR_CONSTRNAME "ConstrName" 194 #define GRB_INT_ATTR_LAZY "Lazy" 195 #define GRB_DBL_ATTR_QCRHS "QCRHS" 196 #define GRB_CHAR_ATTR_QCSENSE "QCSense" 197 #define GRB_STR_ATTR_QCNAME "QCName" 198 #define GRB_INT_ATTR_GENCONSTRTYPE "GenConstrType" 199 #define GRB_STR_ATTR_GENCONSTRNAME "GenConstrName" 200 #define GRB_DBL_ATTR_MAX_COEFF "MaxCoeff" 201 #define GRB_DBL_ATTR_MIN_COEFF "MinCoeff" 202 #define GRB_DBL_ATTR_MAX_BOUND "MaxBound" 203 #define GRB_DBL_ATTR_MIN_BOUND "MinBound" 204 #define GRB_DBL_ATTR_MAX_OBJ_COEFF "MaxObjCoeff" 205 #define GRB_DBL_ATTR_MIN_OBJ_COEFF "MinObjCoeff" 206 #define GRB_DBL_ATTR_MAX_RHS "MaxRHS" 207 #define GRB_DBL_ATTR_MIN_RHS "MinRHS" 208 #define GRB_DBL_ATTR_MAX_QCCOEFF "MaxQCCoeff" 209 #define GRB_DBL_ATTR_MIN_QCCOEFF "MinQCCoeff" 210 #define GRB_DBL_ATTR_MAX_QOBJ_COEFF "MaxQObjCoeff" 211 #define GRB_DBL_ATTR_MIN_QOBJ_COEFF "MinQObjCoeff" 212 #define GRB_DBL_ATTR_MAX_QCLCOEFF "MaxQCLCoeff" 213 #define GRB_DBL_ATTR_MIN_QCLCOEFF "MinQCLCoeff" 214 #define GRB_DBL_ATTR_MAX_QCRHS "MaxQCRHS" 215 #define GRB_DBL_ATTR_MIN_QCRHS "MinQCRHS" 216 #define GRB_DBL_ATTR_RUNTIME "Runtime" 217 #define GRB_INT_ATTR_STATUS "Status" 218 #define GRB_DBL_ATTR_OBJVAL "ObjVal" 219 #define GRB_DBL_ATTR_OBJBOUND "ObjBound" 220 #define GRB_DBL_ATTR_OBJBOUNDC "ObjBoundC" 221 #define GRB_DBL_ATTR_POOLOBJBOUND "PoolObjBound" 222 #define GRB_DBL_ATTR_POOLOBJVAL "PoolObjVal" 223 #define GRB_DBL_ATTR_MIPGAP "MIPGap" 224 #define GRB_INT_ATTR_SOLCOUNT "SolCount" 225 #define GRB_DBL_ATTR_ITERCOUNT "IterCount" 226 #define GRB_INT_ATTR_BARITERCOUNT "BarIterCount" 227 #define GRB_DBL_ATTR_NODECOUNT "NodeCount" 228 #define GRB_DBL_ATTR_OPENNODECOUNT "OpenNodeCount" 229 #define GRB_INT_ATTR_HASDUALNORM "HasDualNorm" 230 #define GRB_DBL_ATTR_X "X" 231 #define GRB_DBL_ATTR_XN "Xn" 232 #define GRB_DBL_ATTR_BARX "BarX" 233 #define GRB_DBL_ATTR_RC "RC" 234 #define GRB_DBL_ATTR_VDUALNORM "VDualNorm" 235 #define GRB_INT_ATTR_VBASIS "VBasis" 236 #define GRB_DBL_ATTR_PI "Pi" 237 #define GRB_DBL_ATTR_QCPI "QCPi" 238 #define GRB_DBL_ATTR_SLACK "Slack" 239 #define GRB_DBL_ATTR_QCSLACK "QCSlack" 240 #define GRB_DBL_ATTR_CDUALNORM "CDualNorm" 241 #define GRB_INT_ATTR_CBASIS "CBasis" 242 #define GRB_DBL_ATTR_BOUND_VIO "BoundVio" 243 #define GRB_DBL_ATTR_BOUND_SVIO "BoundSVio" 244 #define GRB_INT_ATTR_BOUND_VIO_INDEX "BoundVioIndex" 245 #define GRB_INT_ATTR_BOUND_SVIO_INDEX "BoundSVioIndex" 246 #define GRB_DBL_ATTR_BOUND_VIO_SUM "BoundVioSum" 247 #define GRB_DBL_ATTR_BOUND_SVIO_SUM "BoundSVioSum" 248 #define GRB_DBL_ATTR_CONSTR_VIO "ConstrVio" 249 #define GRB_DBL_ATTR_CONSTR_SVIO "ConstrSVio" 250 #define GRB_INT_ATTR_CONSTR_VIO_INDEX "ConstrVioIndex" 251 #define GRB_INT_ATTR_CONSTR_SVIO_INDEX "ConstrSVioIndex" 252 #define GRB_DBL_ATTR_CONSTR_VIO_SUM "ConstrVioSum" 253 #define GRB_DBL_ATTR_CONSTR_SVIO_SUM "ConstrSVioSum" 254 #define GRB_DBL_ATTR_CONSTR_RESIDUAL "ConstrResidual" 255 #define GRB_DBL_ATTR_CONSTR_SRESIDUAL "ConstrSResidual" 256 #define GRB_INT_ATTR_CONSTR_RESIDUAL_INDEX "ConstrResidualIndex" 257 #define GRB_INT_ATTR_CONSTR_SRESIDUAL_INDEX "ConstrSResidualIndex" 258 #define GRB_DBL_ATTR_CONSTR_RESIDUAL_SUM "ConstrResidualSum" 259 #define GRB_DBL_ATTR_CONSTR_SRESIDUAL_SUM "ConstrSResidualSum" 260 #define GRB_DBL_ATTR_DUAL_VIO "DualVio" 261 #define GRB_DBL_ATTR_DUAL_SVIO "DualSVio" 262 #define GRB_INT_ATTR_DUAL_VIO_INDEX "DualVioIndex" 263 #define GRB_INT_ATTR_DUAL_SVIO_INDEX "DualSVioIndex" 264 #define GRB_DBL_ATTR_DUAL_VIO_SUM "DualVioSum" 265 #define GRB_DBL_ATTR_DUAL_SVIO_SUM "DualSVioSum" 266 #define GRB_DBL_ATTR_DUAL_RESIDUAL "DualResidual" 267 #define GRB_DBL_ATTR_DUAL_SRESIDUAL "DualSResidual" 268 #define GRB_INT_ATTR_DUAL_RESIDUAL_INDEX "DualResidualIndex" 269 #define GRB_INT_ATTR_DUAL_SRESIDUAL_INDEX "DualSResidualIndex" 270 #define GRB_DBL_ATTR_DUAL_RESIDUAL_SUM "DualResidualSum" 271 #define GRB_DBL_ATTR_DUAL_SRESIDUAL_SUM "DualSResidualSum" 272 #define GRB_DBL_ATTR_INT_VIO "IntVio" 273 #define GRB_INT_ATTR_INT_VIO_INDEX "IntVioIndex" 274 #define GRB_DBL_ATTR_INT_VIO_SUM "IntVioSum" 275 #define GRB_DBL_ATTR_COMPL_VIO "ComplVio" 276 #define GRB_INT_ATTR_COMPL_VIO_INDEX "ComplVioIndex" 277 #define GRB_DBL_ATTR_COMPL_VIO_SUM "ComplVioSum" 278 #define GRB_DBL_ATTR_KAPPA "Kappa" 279 #define GRB_DBL_ATTR_KAPPA_EXACT "KappaExact" 280 #define GRB_DBL_ATTR_N2KAPPA "N2Kappa" 281 #define GRB_DBL_ATTR_SA_OBJLOW "SAObjLow" 282 #define GRB_DBL_ATTR_SA_OBJUP "SAObjUp" 283 #define GRB_DBL_ATTR_SA_LBLOW "SALBLow" 284 #define GRB_DBL_ATTR_SA_LBUP "SALBUp" 285 #define GRB_DBL_ATTR_SA_UBLOW "SAUBLow" 286 #define GRB_DBL_ATTR_SA_UBUP "SAUBUp" 287 #define GRB_DBL_ATTR_SA_RHSLOW "SARHSLow" 288 #define GRB_DBL_ATTR_SA_RHSUP "SARHSUp" 289 #define GRB_INT_ATTR_IIS_MINIMAL "IISMinimal" 290 #define GRB_INT_ATTR_IIS_LB "IISLB" 291 #define GRB_INT_ATTR_IIS_UB "IISUB" 292 #define GRB_INT_ATTR_IIS_CONSTR "IISConstr" 293 #define GRB_INT_ATTR_IIS_SOS "IISSOS" 294 #define GRB_INT_ATTR_IIS_QCONSTR "IISQConstr" 295 #define GRB_INT_ATTR_IIS_GENCONSTR "IISGenConstr" 296 #define GRB_INT_ATTR_TUNE_RESULTCOUNT "TuneResultCount" 297 #define GRB_DBL_ATTR_FARKASDUAL "FarkasDual" 298 #define GRB_DBL_ATTR_FARKASPROOF "FarkasProof" 299 #define GRB_DBL_ATTR_UNBDRAY "UnbdRay" 300 #define GRB_INT_ATTR_INFEASVAR "InfeasVar" 301 #define GRB_INT_ATTR_UNBDVAR "UnbdVar" 302 #define GRB_INT_ATTR_VARPRESTAT "VarPreStat" 303 #define GRB_DBL_ATTR_PREFIXVAL "PreFixVal" 304 #define GRB_DBL_ATTR_OBJN "ObjN" 305 #define GRB_DBL_ATTR_OBJNVAL "ObjNVal" 306 #define GRB_DBL_ATTR_OBJNCON "ObjNCon" 307 #define GRB_DBL_ATTR_OBJNWEIGHT "ObjNWeight" 308 #define GRB_INT_ATTR_OBJNPRIORITY "ObjNPriority" 309 #define GRB_DBL_ATTR_OBJNRELTOL "ObjNRelTol" 310 #define GRB_DBL_ATTR_OBJNABSTOL "ObjNAbsTol" 311 #define GRB_STR_ATTR_OBJNNAME "ObjNName" 312 #define GRB_INT_ATTR_NUMOBJ "NumObj" 313 #define GRB_INT_ATTR_NUMSTART "NumStart" 314 #define GRB_GENCONSTR_MAX 0 315 #define GRB_GENCONSTR_MIN 1 316 #define GRB_GENCONSTR_ABS 2 317 #define GRB_GENCONSTR_AND 3 318 #define GRB_GENCONSTR_OR 4 319 #define GRB_GENCONSTR_INDICATOR 5 320 #define GRB_CB_POLLING 0 321 #define GRB_CB_PRESOLVE 1 322 #define GRB_CB_SIMPLEX 2 323 #define GRB_CB_MIP 3 324 #define GRB_CB_MIPSOL 4 325 #define GRB_CB_MIPNODE 5 326 #define GRB_CB_MESSAGE 6 327 #define GRB_CB_BARRIER 7 328 #define GRB_CB_PRE_COLDEL 1000 329 #define GRB_CB_PRE_ROWDEL 1001 330 #define GRB_CB_PRE_SENCHG 1002 331 #define GRB_CB_PRE_BNDCHG 1003 332 #define GRB_CB_PRE_COECHG 1004 333 #define GRB_CB_SPX_ITRCNT 2000 334 #define GRB_CB_SPX_OBJVAL 2001 335 #define GRB_CB_SPX_PRIMINF 2002 336 #define GRB_CB_SPX_DUALINF 2003 337 #define GRB_CB_SPX_ISPERT 2004 338 #define GRB_CB_MIP_OBJBST 3000 339 #define GRB_CB_MIP_OBJBND 3001 340 #define GRB_CB_MIP_NODCNT 3002 341 #define GRB_CB_MIP_SOLCNT 3003 342 #define GRB_CB_MIP_CUTCNT 3004 343 #define GRB_CB_MIP_NODLFT 3005 344 #define GRB_CB_MIP_ITRCNT 3006 345 #define GRB_CB_MIP_OBJBNDC 3007 346 #define GRB_CB_MIPSOL_SOL 4001 347 #define GRB_CB_MIPSOL_OBJ 4002 348 #define GRB_CB_MIPSOL_OBJBST 4003 349 #define GRB_CB_MIPSOL_OBJBND 4004 350 #define GRB_CB_MIPSOL_NODCNT 4005 351 #define GRB_CB_MIPSOL_SOLCNT 4006 352 #define GRB_CB_MIPSOL_OBJBNDC 4007 353 #define GRB_CB_MIPNODE_STATUS 5001 354 #define GRB_CB_MIPNODE_REL 5002 355 #define GRB_CB_MIPNODE_OBJBST 5003 356 #define GRB_CB_MIPNODE_OBJBND 5004 357 #define GRB_CB_MIPNODE_NODCNT 5005 358 #define GRB_CB_MIPNODE_SOLCNT 5006 359 #define GRB_CB_MIPNODE_BRVAR 5007 360 #define GRB_CB_MIPNODE_OBJBNDC 5008 361 #define GRB_CB_MSG_STRING 6001 362 #define GRB_CB_RUNTIME 6002 363 #define GRB_CB_BARRIER_ITRCNT 7001 364 #define GRB_CB_BARRIER_PRIMOBJ 7002 365 #define GRB_CB_BARRIER_DUALOBJ 7003 366 #define GRB_CB_BARRIER_PRIMINF 7004 367 #define GRB_CB_BARRIER_DUALINF 7005 368 #define GRB_CB_BARRIER_COMPL 7006 369 #define GRB_FEASRELAX_LINEAR 0 370 #define GRB_FEASRELAX_QUADRATIC 1 371 #define GRB_FEASRELAX_CARDINALITY 2 372 extern std::function<int(GRBmodel *model, int constr, int var, double *valP)> GRBgetcoeff; 373 extern std::function<int(GRBmodel *model, int *numnzP, int *cbeg,int *cind, double *cval, int start, int len)> GRBgetconstrs; 374 extern std::function<int(GRBmodel *model, size_t *numnzP, size_t *cbeg,int *cind, double *cval, int start, int len)> GRBXgetconstrs; 375 extern std::function<int(GRBmodel *model, int *numnzP, int *vbeg, int *vind,double *vval, int start, int len)> GRBgetvars; 376 extern std::function<int(GRBmodel *model, size_t *numnzP, size_t *vbeg, int *vind,double *vval, int start, int len)> GRBXgetvars; 377 extern std::function<int(GRBmodel *model, int *nummembersP, int *sostype, int *beg,int *ind, double *weight, int start, int len)> GRBgetsos; 378 extern std::function<int(GRBmodel *model, int genconstr, int *resvarP,int *nvarsP, int *vars, double *constantP)> GRBgetgenconstrMax; 379 extern std::function<int(GRBmodel *model, int genconstr, int *resvarP,int *nvarsP, int *vars, double *constantP)> GRBgetgenconstrMin; 380 extern std::function<int(GRBmodel *model, int genconstr, int *resvarP, int *argvarP)> GRBgetgenconstrAbs; 381 extern std::function<int(GRBmodel *model, int genconstr, int *resvarP,int *nvarsP, int *vars)> GRBgetgenconstrAnd; 382 extern std::function<int(GRBmodel *model, int genconstr, int *resvarP,int *nvarsP, int *vars)> GRBgetgenconstrOr; 383 extern std::function<int(GRBmodel *model, int genconstr, int *binvarP, int *binvalP,int *nvarsP, int *vars, double *vals,char *senseP, double *rhsP)> GRBgetgenconstrIndicator; 384 extern std::function<int(GRBmodel *model, int *numqnzP, int *qrow, int *qcol, double *qval)> GRBgetq; 385 extern std::function<int(GRBmodel *model, int qconstr,int *numlnzP, int *lind, double *lval,int *numqnzP, int *qrow, int *qcol, double *qval)> GRBgetqconstr; 386 extern std::function<int(GRBmodel *model, const char *name, int *indexP)> GRBgetvarbyname; 387 extern std::function<int(GRBmodel *model, const char *name, int *indexP)> GRBgetconstrbyname; 388 extern std::function<int(GRBmodel *model, int var, int *pointsP,double *x, double *y)> GRBgetpwlobj; 389 extern std::function<int(GRBmodel *model)> GRBoptimize; 390 extern std::function<int(GRBmodel *model)> GRBoptimizeasync; 391 extern std::function<GRBmodel *(GRBmodel *model)> GRBcopymodel; 392 extern std::function<GRBmodel *(GRBmodel *model)> GRBfixedmodel; 393 extern std::function<int(GRBmodel *model, int relaxobjtype, int minrelax,double *lbpen, double *ubpen, double *rhspen,double *feasobjP)> GRBfeasrelax; 394 extern std::function<int(void *cbdata, int what, int *typeP, int *sizeP)> GRBgetcbwhatinfo; 395 extern std::function<GRBmodel *(GRBmodel *model)> GRBrelaxmodel; 396 extern std::function<int(GRBmodel *model)> GRBconverttofixed; 397 extern std::function<GRBmodel *(GRBmodel *model)> GRBpresolvemodel; 398 extern std::function<GRBmodel *(GRBmodel *model)> GRBiismodel; 399 extern std::function<GRBmodel *(GRBmodel *model)> GRBfeasibility; 400 extern std::function<GRBmodel *(GRBmodel *model)> GRBlinearizemodel; 401 #define MALLOCCB_ARGS size_t size, void *syscbusrdata 402 #define CALLOCCB_ARGS size_t nmemb, size_t size, void *syscbusrdata 403 #define REALLOCCB_ARGS void *ptr, size_t size, void *syscbusrdata 404 #define FREECB_ARGS void *ptr, void *syscbusrdata 405 #define THREADCREATECB_ARGS void **threadP, void (*start_routine)(void *), void *arg, void *syscbusrdata 406 #define THREADJOINCB_ARGS void *thread, void *syscbusrdata 407 extern std::function<int(GRBenv **envP, const char *logfilename,void * (GUROBI_STDCALL *malloccb)(MALLOCCB_ARGS),void * (GUROBI_STDCALL *calloccb)(CALLOCCB_ARGS),void * (GUROBI_STDCALL *realloccb)(REALLOCCB_ARGS),void (GUROBI_STDCALL *freecb)(FREECB_ARGS),int (GUROBI_STDCALL *threadcreatecb)(THREADCREATECB_ARGS),void (GUROBI_STDCALL *threadjoincb)(THREADJOINCB_ARGS),void *syscbusrdata)> GRBloadenvsyscb; 408 extern std::function<int(GRBenv *env, const char *filename, GRBmodel **modelP)> GRBreadmodel; 409 extern std::function<int(GRBmodel *model, const char *filename)> GRBread; 410 extern std::function<int(GRBmodel *model, const char *filename)> GRBwrite; 411 extern std::function<int(const char *filename)> GRBismodelfile; 412 extern std::function<int(const char *filename)> GRBfiletype; 413 extern std::function<int(const char *filename)> GRBisrecordfile; 414 extern std::function<int(GRBenv *env, GRBmodel **modelP, const char *Pname, int numvars,double *obj, double *lb, double *ub, char *vtype,char **varnames)> GRBnewmodel; 415 extern std::function<int(GRBenv *env, GRBmodel **modelP, const char *Pname,int numvars, int numconstrs,int objsense, double objcon, double *obj,char *sense, double *rhs,int *vbeg, int *vlen, int *vind, double *vval,double *lb, double *ub, char *vtype,char **varnames, char **constrnames)> GRBloadmodel; 416 extern std::function<int(GRBenv *env, GRBmodel **modelP, const char *Pname,int numvars, int numconstrs,int objsense, double objcon, double *obj,char *sense, double *rhs,size_t *vbeg, int *vlen, int *vind, double *vval,double *lb, double *ub, char *vtype,char **varnames, char **constrnames)> GRBXloadmodel; 417 extern std::function<int(GRBmodel *model, int numnz, int *vind, double *vval,double obj, double lb, double ub, char vtype,const char *varname)> GRBaddvar; 418 extern std::function<int(GRBmodel *model, int numvars, int numnz,int *vbeg, int *vind, double *vval,double *obj, double *lb, double *ub, char *vtype,char **varnames)> GRBaddvars; 419 extern std::function<int(GRBmodel *model, int numvars, size_t numnz,size_t *vbeg, int *vind, double *vval,double *obj, double *lb, double *ub, char *vtype,char **varnames)> GRBXaddvars; 420 extern std::function<int(GRBmodel *model, int numnz, int *cind, double *cval,char sense, double rhs, const char *constrname)> GRBaddconstr; 421 extern std::function<int(GRBmodel *model, int numconstrs, int numnz,int *cbeg, int *cind, double *cval,char *sense, double *rhs, char **constrnames)> GRBaddconstrs; 422 extern std::function<int(GRBmodel *model, int numconstrs, size_t numnz,size_t *cbeg, int *cind, double *cval,char *sense, double *rhs, char **constrnames)> GRBXaddconstrs; 423 extern std::function<int(GRBmodel *model, int numnz, int *cind, double *cval,double lower, double upper, const char *constrname)> GRBaddrangeconstr; 424 extern std::function<int(GRBmodel *model, int numconstrs, int numnz,int *cbeg, int *cind, double *cval,double *lower, double *upper, char **constrnames)> GRBaddrangeconstrs; 425 extern std::function<int(GRBmodel *model, int numconstrs, size_t numnz,size_t *cbeg, int *cind, double *cval,double *lower, double *upper, char **constrnames)> GRBXaddrangeconstrs; 426 extern std::function<int(GRBmodel *model, int numsos, int nummembers, int *types,int *beg, int *ind, double *weight)> GRBaddsos; 427 extern std::function<int(GRBmodel *model, const char *name,int resvar, int nvars, const int *vars,double constant)> GRBaddgenconstrMax; 428 extern std::function<int(GRBmodel *model, const char *name,int resvar, int nvars, const int *vars,double constant)> GRBaddgenconstrMin; 429 extern std::function<int(GRBmodel *model, const char *name,int resvar, int argvar)> GRBaddgenconstrAbs; 430 extern std::function<int(GRBmodel *model, const char *name,int resvar, int nvars, const int *vars)> GRBaddgenconstrAnd; 431 extern std::function<int(GRBmodel *model, const char *name,int resvar, int nvars, const int *vars)> GRBaddgenconstrOr; 432 extern std::function<int(GRBmodel *lp, const char *name,int binvar, int binval, int nvars, const int *vars,const double *vals, char sense, double rhs)> GRBaddgenconstrIndicator; 433 extern std::function<int(GRBmodel *model, int numlnz, int *lind, double *lval,int numqnz, int *qrow, int *qcol, double *qval,char sense, double rhs, const char *QCname)> GRBaddqconstr; 434 extern std::function<int(GRBmodel *model, int nummembers, int *members)> GRBaddcone; 435 extern std::function<int(GRBmodel *model, int numqnz, int *qrow, int *qcol,double *qval)> GRBaddqpterms; 436 extern std::function<int(GRBmodel *model, int len, int *ind)> GRBdelvars; 437 extern std::function<int(GRBmodel *model, int len, int *ind)> GRBdelconstrs; 438 extern std::function<int(GRBmodel *model, int len, int *ind)> GRBdelsos; 439 extern std::function<int(GRBmodel *model, int len, int *ind)> GRBdelgenconstrs; 440 extern std::function<int(GRBmodel *model, int len, int *ind)> GRBdelqconstrs; 441 extern std::function<int(GRBmodel *model)> GRBdelq; 442 extern std::function<int(GRBmodel *model, int cnt, int *cind, int *vind, double *val)> GRBchgcoeffs; 443 extern std::function<int(GRBmodel *model, size_t cnt, int *cind, int *vind, double *val)> GRBXchgcoeffs; 444 extern std::function<int(GRBmodel *model, int var, int points, double *x,double *y)> GRBsetpwlobj; 445 extern std::function<int(GRBmodel *model)> GRBupdatemodel; 446 extern std::function<int(GRBmodel *model)> GRBresetmodel; 447 extern std::function<int(GRBmodel *model)> GRBfreemodel; 448 extern std::function<int(GRBmodel *model)> GRBcomputeIIS; 449 extern std::function<int(GRBmodel *model, GRBsvec *b, GRBsvec *x)> GRBFSolve; 450 extern std::function<int(GRBmodel *model, int j, GRBsvec *x)> GRBBinvColj; 451 extern std::function<int(GRBmodel *model, int j, GRBsvec *x)> GRBBinvj; 452 extern std::function<int(GRBmodel *model, GRBsvec *b, GRBsvec *x)> GRBBSolve; 453 extern std::function<int(GRBmodel *model, int i, GRBsvec *x)> GRBBinvi; 454 extern std::function<int(GRBmodel *model, int i, GRBsvec *x)> GRBBinvRowi; 455 extern std::function<int(GRBmodel *model, int *bhead)> GRBgetBasisHead; 456 #define GRB_LOADED 1 457 #define GRB_OPTIMAL 2 458 #define GRB_INFEASIBLE 3 459 #define GRB_INF_OR_UNBD 4 460 #define GRB_UNBOUNDED 5 461 #define GRB_CUTOFF 6 462 #define GRB_ITERATION_LIMIT 7 463 #define GRB_NODE_LIMIT 8 464 #define GRB_TIME_LIMIT 9 465 #define GRB_SOLUTION_LIMIT 10 466 #define GRB_INTERRUPTED 11 467 #define GRB_NUMERIC 12 468 #define GRB_SUBOPTIMAL 13 469 #define GRB_INPROGRESS 14 470 #define GRB_USER_OBJ_LIMIT 15 471 #define GRB_BASIC 0 472 #define GRB_NONBASIC_LOWER -1 473 #define GRB_NONBASIC_UPPER -2 474 #define GRB_SUPERBASIC -3 475 extern std::function<int(GRBmodel *model, int num, int *cand,double *downobjbd, double *upobjbd, int *statusP)> GRBstrongbranch; 476 #define GRB_INT_PAR_BARITERLIMIT "BarIterLimit" 477 #define GRB_DBL_PAR_CUTOFF "Cutoff" 478 #define GRB_DBL_PAR_ITERATIONLIMIT "IterationLimit" 479 #define GRB_DBL_PAR_NODELIMIT "NodeLimit" 480 #define GRB_INT_PAR_SOLUTIONLIMIT "SolutionLimit" 481 #define GRB_DBL_PAR_TIMELIMIT "TimeLimit" 482 #define GRB_DBL_PAR_BESTOBJSTOP "BestObjStop" 483 #define GRB_DBL_PAR_BESTBDSTOP "BestBdStop" 484 #define GRB_DBL_PAR_FEASIBILITYTOL "FeasibilityTol" 485 #define GRB_DBL_PAR_INTFEASTOL "IntFeasTol" 486 #define GRB_DBL_PAR_MARKOWITZTOL "MarkowitzTol" 487 #define GRB_DBL_PAR_MIPGAP "MIPGap" 488 #define GRB_DBL_PAR_MIPGAPABS "MIPGapAbs" 489 #define GRB_DBL_PAR_OPTIMALITYTOL "OptimalityTol" 490 #define GRB_DBL_PAR_PSDTOL "PSDTol" 491 #define GRB_INT_PAR_METHOD "Method" 492 #define GRB_DBL_PAR_PERTURBVALUE "PerturbValue" 493 #define GRB_DBL_PAR_OBJSCALE "ObjScale" 494 #define GRB_INT_PAR_SCALEFLAG "ScaleFlag" 495 #define GRB_INT_PAR_SIMPLEXPRICING "SimplexPricing" 496 #define GRB_INT_PAR_QUAD "Quad" 497 #define GRB_INT_PAR_NORMADJUST "NormAdjust" 498 #define GRB_INT_PAR_SIFTING "Sifting" 499 #define GRB_INT_PAR_SIFTMETHOD "SiftMethod" 500 #define GRB_DBL_PAR_BARCONVTOL "BarConvTol" 501 #define GRB_INT_PAR_BARCORRECTORS "BarCorrectors" 502 #define GRB_INT_PAR_BARHOMOGENEOUS "BarHomogeneous" 503 #define GRB_INT_PAR_BARORDER "BarOrder" 504 #define GRB_DBL_PAR_BARQCPCONVTOL "BarQCPConvTol" 505 #define GRB_INT_PAR_CROSSOVER "Crossover" 506 #define GRB_INT_PAR_CROSSOVERBASIS "CrossoverBasis" 507 #define GRB_INT_PAR_BRANCHDIR "BranchDir" 508 #define GRB_INT_PAR_DEGENMOVES "DegenMoves" 509 #define GRB_INT_PAR_DISCONNECTED "Disconnected" 510 #define GRB_DBL_PAR_HEURISTICS "Heuristics" 511 #define GRB_DBL_PAR_IMPROVESTARTGAP "ImproveStartGap" 512 #define GRB_DBL_PAR_IMPROVESTARTTIME "ImproveStartTime" 513 #define GRB_DBL_PAR_IMPROVESTARTNODES "ImproveStartNodes" 514 #define GRB_INT_PAR_MINRELNODES "MinRelNodes" 515 #define GRB_INT_PAR_MIPFOCUS "MIPFocus" 516 #define GRB_STR_PAR_NODEFILEDIR "NodefileDir" 517 #define GRB_DBL_PAR_NODEFILESTART "NodefileStart" 518 #define GRB_INT_PAR_NODEMETHOD "NodeMethod" 519 #define GRB_INT_PAR_NORELHEURISTIC "NoRelHeuristic" 520 #define GRB_INT_PAR_PUMPPASSES "PumpPasses" 521 #define GRB_INT_PAR_RINS "RINS" 522 #define GRB_INT_PAR_STARTNODELIMIT "StartNodeLimit" 523 #define GRB_INT_PAR_SUBMIPNODES "SubMIPNodes" 524 #define GRB_INT_PAR_SYMMETRY "Symmetry" 525 #define GRB_INT_PAR_VARBRANCH "VarBranch" 526 #define GRB_INT_PAR_SOLUTIONNUMBER "SolutionNumber" 527 #define GRB_INT_PAR_ZEROOBJNODES "ZeroObjNodes" 528 #define GRB_INT_PAR_CUTS "Cuts" 529 #define GRB_INT_PAR_CLIQUECUTS "CliqueCuts" 530 #define GRB_INT_PAR_COVERCUTS "CoverCuts" 531 #define GRB_INT_PAR_FLOWCOVERCUTS "FlowCoverCuts" 532 #define GRB_INT_PAR_FLOWPATHCUTS "FlowPathCuts" 533 #define GRB_INT_PAR_GUBCOVERCUTS "GUBCoverCuts" 534 #define GRB_INT_PAR_IMPLIEDCUTS "ImpliedCuts" 535 #define GRB_INT_PAR_PROJIMPLIEDCUTS "ProjImpliedCuts" 536 #define GRB_INT_PAR_MIPSEPCUTS "MIPSepCuts" 537 #define GRB_INT_PAR_MIRCUTS "MIRCuts" 538 #define GRB_INT_PAR_STRONGCGCUTS "StrongCGCuts" 539 #define GRB_INT_PAR_MODKCUTS "ModKCuts" 540 #define GRB_INT_PAR_ZEROHALFCUTS "ZeroHalfCuts" 541 #define GRB_INT_PAR_NETWORKCUTS "NetworkCuts" 542 #define GRB_INT_PAR_SUBMIPCUTS "SubMIPCuts" 543 #define GRB_INT_PAR_INFPROOFCUTS "InfProofCuts" 544 #define GRB_INT_PAR_CUTAGGPASSES "CutAggPasses" 545 #define GRB_INT_PAR_CUTPASSES "CutPasses" 546 #define GRB_INT_PAR_GOMORYPASSES "GomoryPasses" 547 #define GRB_STR_PAR_WORKERPOOL "WorkerPool" 548 #define GRB_STR_PAR_WORKERPASSWORD "WorkerPassword" 549 #define GRB_INT_PAR_WORKERPORT "WorkerPort" 550 #define GRB_INT_PAR_AGGREGATE "Aggregate" 551 #define GRB_INT_PAR_AGGFILL "AggFill" 552 #define GRB_INT_PAR_CONCURRENTMIP "ConcurrentMIP" 553 #define GRB_INT_PAR_CONCURRENTJOBS "ConcurrentJobs" 554 #define GRB_INT_PAR_DISPLAYINTERVAL "DisplayInterval" 555 #define GRB_INT_PAR_DISTRIBUTEDMIPJOBS "DistributedMIPJobs" 556 #define GRB_INT_PAR_DUALREDUCTIONS "DualReductions" 557 #define GRB_DBL_PAR_FEASRELAXBIGM "FeasRelaxBigM" 558 #define GRB_INT_PAR_IISMETHOD "IISMethod" 559 #define GRB_INT_PAR_INFUNBDINFO "InfUnbdInfo" 560 #define GRB_INT_PAR_LAZYCONSTRAINTS "LazyConstraints" 561 #define GRB_STR_PAR_LOGFILE "LogFile" 562 #define GRB_INT_PAR_LOGTOCONSOLE "LogToConsole" 563 #define GRB_INT_PAR_MIQCPMETHOD "MIQCPMethod" 564 #define GRB_INT_PAR_NUMERICFOCUS "NumericFocus" 565 #define GRB_INT_PAR_OUTPUTFLAG "OutputFlag" 566 #define GRB_INT_PAR_PRECRUSH "PreCrush" 567 #define GRB_INT_PAR_PREDEPROW "PreDepRow" 568 #define GRB_INT_PAR_PREDUAL "PreDual" 569 #define GRB_INT_PAR_PREPASSES "PrePasses" 570 #define GRB_INT_PAR_PREQLINEARIZE "PreQLinearize" 571 #define GRB_INT_PAR_PRESOLVE "Presolve" 572 #define GRB_DBL_PAR_PRESOS1BIGM "PreSOS1BigM" 573 #define GRB_DBL_PAR_PRESOS2BIGM "PreSOS2BigM" 574 #define GRB_INT_PAR_PRESPARSIFY "PreSparsify" 575 #define GRB_INT_PAR_PREMIQCPFORM "PreMIQCPForm" 576 #define GRB_INT_PAR_QCPDUAL "QCPDual" 577 #define GRB_INT_PAR_RECORD "Record" 578 #define GRB_STR_PAR_RESULTFILE "ResultFile" 579 #define GRB_INT_PAR_SEED "Seed" 580 #define GRB_INT_PAR_THREADS "Threads" 581 #define GRB_DBL_PAR_TUNETIMELIMIT "TuneTimeLimit" 582 #define GRB_INT_PAR_TUNERESULTS "TuneResults" 583 #define GRB_INT_PAR_TUNECRITERION "TuneCriterion" 584 #define GRB_INT_PAR_TUNETRIALS "TuneTrials" 585 #define GRB_INT_PAR_TUNEOUTPUT "TuneOutput" 586 #define GRB_INT_PAR_TUNEJOBS "TuneJobs" 587 #define GRB_INT_PAR_UPDATEMODE "UpdateMode" 588 #define GRB_INT_PAR_OBJNUMBER "ObjNumber" 589 #define GRB_INT_PAR_MULTIOBJMETHOD "MultiObjMethod" 590 #define GRB_INT_PAR_MULTIOBJPRE "MultiObjPre" 591 #define GRB_INT_PAR_POOLSOLUTIONS "PoolSolutions" 592 #define GRB_DBL_PAR_POOLGAP "PoolGap" 593 #define GRB_INT_PAR_POOLSEARCHMODE "PoolSearchMode" 594 #define GRB_INT_PAR_STARTNUMBER "StartNumber" 595 #define GRB_INT_PAR_IGNORENAMES "IgnoreNames" 596 #define GRB_STR_PAR_DUMMY "Dummy" 597 #define GRB_CUTS_AUTO -1 598 #define GRB_CUTS_OFF 0 599 #define GRB_CUTS_CONSERVATIVE 1 600 #define GRB_CUTS_AGGRESSIVE 2 601 #define GRB_CUTS_VERYAGGRESSIVE 3 602 #define GRB_PRESOLVE_AUTO -1 603 #define GRB_PRESOLVE_OFF 0 604 #define GRB_PRESOLVE_CONSERVATIVE 1 605 #define GRB_PRESOLVE_AGGRESSIVE 2 606 #define GRB_METHOD_AUTO -1 607 #define GRB_METHOD_PRIMAL 0 608 #define GRB_METHOD_DUAL 1 609 #define GRB_METHOD_BARRIER 2 610 #define GRB_METHOD_CONCURRENT 3 611 #define GRB_METHOD_DETERMINISTIC_CONCURRENT 4 612 #define GRB_METHOD_DETERMINISTIC_CONCURRENT_SIMPLEX 5 613 #define GRB_BARHOMOGENEOUS_AUTO -1 614 #define GRB_BARHOMOGENEOUS_OFF 0 615 #define GRB_BARHOMOGENEOUS_ON 1 616 #define GRB_MIPFOCUS_BALANCED 0 617 #define GRB_MIPFOCUS_FEASIBILITY 1 618 #define GRB_MIPFOCUS_OPTIMALITY 2 619 #define GRB_MIPFOCUS_BESTBOUND 3 620 #define GRB_BARORDER_AUTOMATIC -1 621 #define GRB_BARORDER_AMD 0 622 #define GRB_BARORDER_NESTEDDISSECTION 1 623 #define GRB_SIMPLEXPRICING_AUTO -1 624 #define GRB_SIMPLEXPRICING_PARTIAL 0 625 #define GRB_SIMPLEXPRICING_STEEPEST_EDGE 1 626 #define GRB_SIMPLEXPRICING_DEVEX 2 627 #define GRB_SIMPLEXPRICING_STEEPEST_QUICK 3 628 #define GRB_VARBRANCH_AUTO -1 629 #define GRB_VARBRANCH_PSEUDO_REDUCED 0 630 #define GRB_VARBRANCH_PSEUDO_SHADOW 1 631 #define GRB_VARBRANCH_MAX_INFEAS 2 632 #define GRB_VARBRANCH_STRONG 3 633 extern std::function<int(GRBmodel *model)> GRBcheckmodel; 634 extern std::function<void(GRBmodel *model)> GRBsetsignal; 635 extern std::function<void(GRBmodel *model)> GRBterminate; 636 extern std::function<int(const char *filename)> GRBreplay; 637 extern std::function<int(GRBmodel *model, int sense, double constant,int lnz, int *lind, double *lval,int qnz, int *qrow, int *qcol, double *qval)> GRBsetobjective; 638 extern std::function<int(GRBmodel *model, int index, int priority, double weight,double abstol, double reltol, const char *name,double constant, int lnz, int *lind, double *lval)> GRBsetobjectiven; 639 extern std::function<void(GRBenv *env, const char *message)> GRBmsg; 640 extern std::function<int(GRBenv *env, FILE **logfileP)> GRBgetlogfile; 641 extern std::function<int(GRBenv *env, FILE *logfile)> GRBsetlogfile; 642 extern std::function<int(GRBenv *env, const char *paramname, int *valueP)> GRBgetintparam; 643 extern std::function<int(GRBenv *env, const char *paramname, double *valueP)> GRBgetdblparam; 644 extern std::function<int(GRBenv *env, const char *paramname, char *valueP)> GRBgetstrparam; 645 extern std::function<int(GRBenv *env, const char *paramname, int *valueP,int *minP, int *maxP, int *defP)> GRBgetintparaminfo; 646 extern std::function<int(GRBenv *env, const char *paramname, double *valueP,double *minP, double *maxP, double *defP)> GRBgetdblparaminfo; 647 extern std::function<int(GRBenv *env, const char *paramname, char *valueP,char *defP)> GRBgetstrparaminfo; 648 extern std::function<int(GRBenv *env, const char *paramname, const char *value)> GRBsetparam; 649 extern std::function<int(GRBenv *env, const char *paramname, int value)> GRBsetintparam; 650 extern std::function<int(GRBenv *env, const char *paramname, double value)> GRBsetdblparam; 651 extern std::function<int(GRBenv *env, const char *paramname, const char *value)> GRBsetstrparam; 652 extern std::function<int(GRBenv *env, const char *paramname)> GRBgetparamtype; 653 extern std::function<int(GRBenv *env)> GRBresetparams; 654 extern std::function<int(GRBenv *dest, GRBenv *src)> GRBcopyparams; 655 extern std::function<int(GRBenv *env, const char *filename)> GRBwriteparams; 656 extern std::function<int(GRBenv *env, const char *filename)> GRBreadparams; 657 extern std::function<int(GRBenv *env)> GRBgetnumparams; 658 extern std::function<int(GRBenv *env, int i, char **paramnameP)> GRBgetparamname; 659 extern std::function<int(GRBmodel *model)> GRBgetnumattributes; 660 extern std::function<int(GRBmodel *model, int i, char **attrnameP)> GRBgetattrname; 661 extern std::function<int(GRBenv **envP, const char *logfilename)> GRBloadenv; 662 extern std::function<int(GRBenv **envP, const char *logfilename,int apitype, int major, int minor, int tech,int (GUROBI_STDCALL *cb)(CB_ARGS), void *usrdata)> GRBloadenvadv; 663 extern std::function<int(GRBenv **envP, const char *logfilename,const char *computeservers, int port, const char *password,int priority, double timeout)> GRBloadclientenv; 664 extern std::function<int(GRBenv **envP, const char *logfilename,const char *computeservers, int port,const char *password, int priority, double timeout,int apitype, int major, int minor, int tech,int (GUROBI_STDCALL *cb)(CB_ARGS), void *usrdata)> GRBloadclientenvadv; 665 extern std::function<int(GRBenv **envP, const char *logfilename,const char *accessID, const char *secretKey,const char *pool)> GRBloadcloudenv; 666 extern std::function<int(GRBenv **envP, const char *logfilename,const char *accessID, const char *secretKey,const char *pool, int apitype, int major,int minor, int tech,int (GUROBI_STDCALL *cb)(CB_ARGS), void *usrdata)> GRBloadcloudenvadv; 667 extern std::function<GRBenv *(GRBmodel *model)> GRBgetenv; 668 extern std::function<GRBenv *(GRBmodel *model, int num)> GRBgetconcurrentenv; 669 extern std::function<void(GRBmodel *model)> GRBdiscardconcurrentenvs; 670 extern std::function<GRBenv *(GRBmodel *model, int num)> GRBgetmultiobjenv; 671 extern std::function<void(GRBmodel *model)> GRBdiscardmultiobjenvs; 672 extern std::function<void(GRBenv *env)> GRBreleaselicense; 673 extern std::function<void(GRBenv *env)> GRBfreeenv; 674 extern std::function<const char *(GRBenv *env)> GRBgeterrormsg; 675 extern std::function<const char *(GRBmodel *model)> GRBgetmerrormsg; 676 extern std::function<void(int *majorP, int *minorP, int *technicalP)> GRBversion; 677 extern std::function<char *(void)> GRBplatform; 678 extern std::function<int(GRBmodel *model)> GRBtunemodel; 679 extern std::function<int(int nummodels, GRBmodel **models,GRBmodel *ignore, GRBmodel *hint)> GRBtunemodels; 680 extern std::function<int(GRBmodel *model, int i)> GRBgettuneresult; 681 extern std::function<int(GRBmodel *model, int i, char **logP)> GRBgettunelog; 682 extern std::function<int(GRBmodel *model, GRBmodel *ignore, GRBmodel *hint)> GRBtunemodeladv; 683 extern std::function<int(GRBmodel *model)> GRBsync; 684 685 686 } // namespace operations_research 687 688 #endif // OR_TOOLS_GUROBI_ENVIRONMENT_H_ 689