update solver wrappers
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
load("@rules_cc//cc:defs.bzl", "cc_proto_library")
|
||||
load("@rules_python//python:proto.bzl", "py_proto_library")
|
||||
|
||||
package(
|
||||
default_visibility = ["//visibility:public"],
|
||||
@@ -27,6 +28,11 @@ cc_proto_library(
|
||||
deps = [":gscip_proto"],
|
||||
)
|
||||
|
||||
py_proto_library(
|
||||
name = "gscip_proto_py_pb2",
|
||||
deps = [":gscip_proto"],
|
||||
)
|
||||
|
||||
# NOTE(user): this file should ideally not have a compile time dependency on
|
||||
# SCIP, so it can be used in client code.
|
||||
cc_library(
|
||||
|
||||
@@ -1001,6 +1001,7 @@ absl::StatusOr<GScipResult> GScip::Solve(
|
||||
stats->set_total_lp_iterations(SCIPgetNLPIterations(scip_));
|
||||
stats->set_primal_simplex_iterations(SCIPgetNPrimalLPIterations(scip_));
|
||||
stats->set_dual_simplex_iterations(SCIPgetNDualLPIterations(scip_));
|
||||
stats->set_barrier_iterations(SCIPgetNBarrierLPIterations(scip_));
|
||||
stats->set_deterministic_time(SCIPgetDeterministicTime(scip_));
|
||||
}
|
||||
result.gscip_output.set_status(ConvertStatus(SCIPgetStatus(scip_)));
|
||||
|
||||
@@ -131,10 +131,16 @@ message GScipSolvingStats {
|
||||
// Returns +inf for maximization and -inf for minimization if no bound was
|
||||
// found. Equivalent to SCIPgetDualBound().
|
||||
double best_bound = 2;
|
||||
// nprimallpiterations in SCIP. The number of primal simplex LP iterations.
|
||||
int64 primal_simplex_iterations = 3;
|
||||
// nduallpiterations in SCIP. The number of dual simplex LP iterations.
|
||||
int64 dual_simplex_iterations = 4;
|
||||
// nlp_iterations in SCIP. The total number of LP steps taken, i.e. primal
|
||||
// simplex iterations + dual simplex iterations + barrier iterations.
|
||||
// nbarrierlpiterations. The number of barrier LP iterations.
|
||||
int64 barrier_iterations = 10;
|
||||
// nlp_iterations in SCIP. The total number of LP steps taken. Note that this
|
||||
// number be at least (and often strictly greater than)
|
||||
// primal_simplex_iterations + dual simplex iterations + barrier iterations,
|
||||
// as it includes other types of iterations (e.g. see ndivinglpiterations).
|
||||
int64 total_lp_iterations = 5;
|
||||
// NTotalNodes in SCIP.
|
||||
// This is the total number of nodes used in the solve, potentially across
|
||||
|
||||
@@ -34,3 +34,14 @@ cc_library(
|
||||
"@com_google_absl//absl/types:optional",
|
||||
],
|
||||
)
|
||||
|
||||
cc_library(
|
||||
name = "gurobi_util",
|
||||
srcs = ["gurobi_util.cc"],
|
||||
hdrs = ["gurobi_util.h"],
|
||||
deps = [
|
||||
":environment",
|
||||
"@com_google_absl//absl/strings",
|
||||
"@com_google_absl//absl/strings:str_format",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -198,6 +198,18 @@ std::function<int(GRBenv* env, const char* paramname, double* valueP)>
|
||||
GRBgetdblparam = nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname, char* valueP)>
|
||||
GRBgetstrparam = nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname, int* valueP, int* minP,
|
||||
int* maxP, int* defP)>
|
||||
GRBgetintparaminfo = nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname, double* valueP,
|
||||
double* minP, double* maxP, double* defP)>
|
||||
GRBgetdblparaminfo = nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname, char* valueP, char* defP)>
|
||||
GRBgetstrparaminfo = nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname)> GRBgetparamtype =
|
||||
nullptr;
|
||||
std::function<int(GRBenv* env, int i, char** paramnameP)> GRBgetparamname =
|
||||
nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname, const char* value)>
|
||||
GRBsetparam = nullptr;
|
||||
std::function<int(GRBenv* env, const char* paramname, int value)>
|
||||
@@ -208,6 +220,8 @@ std::function<int(GRBenv* env, const char* paramname, const char* value)>
|
||||
GRBsetstrparam = nullptr;
|
||||
std::function<int(GRBenv* env)> GRBresetparams = nullptr;
|
||||
std::function<int(GRBenv* dest, GRBenv* src)> GRBcopyparams = nullptr;
|
||||
std::function<int(GRBenv* env)> GRBgetnumparams = nullptr;
|
||||
std::function<int(GRBenv** envP)> GRBemptyenv = nullptr;
|
||||
std::function<int(GRBenv** envP, const char* logfilename)> GRBloadenv = nullptr;
|
||||
std::function<GRBenv*(GRBmodel* model)> GRBgetenv = nullptr;
|
||||
std::function<void(GRBenv* env)> GRBfreeenv = nullptr;
|
||||
@@ -309,6 +323,16 @@ void LoadGurobiFunctions(DynamicLibrary* gurobi_dynamic_library) {
|
||||
gurobi_dynamic_library->GetFunction(&GRBresetparams, "GRBresetparams");
|
||||
gurobi_dynamic_library->GetFunction(&GRBcopyparams, "GRBcopyparams");
|
||||
gurobi_dynamic_library->GetFunction(&GRBloadenv, "GRBloadenv");
|
||||
gurobi_dynamic_library->GetFunction(&GRBemptyenv, "GRBemptyenv");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetnumparams, "GRBgetnumparams");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetparamname, "GRBgetparamname");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetparamtype, "GRBgetparamtype");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetintparaminfo,
|
||||
"GRBgetintparaminfo");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetdblparaminfo,
|
||||
"GRBgetdblparaminfo");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetstrparaminfo,
|
||||
"GRBgetstrparaminfo");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgetenv, "GRBgetenv");
|
||||
gurobi_dynamic_library->GetFunction(&GRBfreeenv, "GRBfreeenv");
|
||||
gurobi_dynamic_library->GetFunction(&GRBgeterrormsg, "GRBgeterrormsg");
|
||||
|
||||
@@ -147,106 +147,106 @@ extern std::function<int(void *cbdata, int where, int what, void *resultP)> GRBc
|
||||
extern std::function<int(void *cbdata, const double *solution, double *objvalP)> GRBcbsolution;
|
||||
extern std::function<int(void *cbdata, int cutlen, const int *cutind, const double *cutval,char cutsense, double cutrhs)> GRBcbcut;
|
||||
extern std::function<int(void *cbdata, int lazylen, const int *lazyind,const double *lazyval, char lazysense, double lazyrhs)> GRBcblazy;
|
||||
#define GRB_INT_ATTR_NUMCONSTRS "NumConstrs"
|
||||
#define GRB_INT_ATTR_NUMVARS "NumVars"
|
||||
#define GRB_INT_ATTR_NUMSOS "NumSOS"
|
||||
#define GRB_INT_ATTR_NUMQCONSTRS "NumQConstrs"
|
||||
#define GRB_INT_ATTR_NUMGENCONSTRS "NumGenConstrs"
|
||||
#define GRB_INT_ATTR_NUMNZS "NumNZs"
|
||||
#define GRB_DBL_ATTR_DNUMNZS "DNumNZs"
|
||||
#define GRB_INT_ATTR_NUMQNZS "NumQNZs"
|
||||
#define GRB_INT_ATTR_NUMQCNZS "NumQCNZs"
|
||||
#define GRB_INT_ATTR_NUMINTVARS "NumIntVars"
|
||||
#define GRB_INT_ATTR_NUMBINVARS "NumBinVars"
|
||||
#define GRB_INT_ATTR_NUMPWLOBJVARS "NumPWLObjVars"
|
||||
#define GRB_STR_ATTR_MODELNAME "ModelName"
|
||||
#define GRB_INT_ATTR_MODELSENSE "ModelSense"
|
||||
#define GRB_DBL_ATTR_OBJCON "ObjCon"
|
||||
#define GRB_INT_ATTR_IS_MIP "IsMIP"
|
||||
#define GRB_INT_ATTR_IS_QP "IsQP"
|
||||
#define GRB_INT_ATTR_IS_QCP "IsQCP"
|
||||
#define GRB_INT_ATTR_IS_MULTIOBJ "IsMultiObj"
|
||||
#define GRB_INT_ATTR_LICENSE_EXPIRATION "LicenseExpiration"
|
||||
#define GRB_INT_ATTR_NUMTAGGED "NumTagged"
|
||||
#define GRB_INT_ATTR_FINGERPRINT "Fingerprint"
|
||||
#define GRB_INT_ATTR_NUMCONSTRS "NumConstrs"
|
||||
#define GRB_INT_ATTR_NUMVARS "NumVars"
|
||||
#define GRB_INT_ATTR_NUMSOS "NumSOS"
|
||||
#define GRB_INT_ATTR_NUMQCONSTRS "NumQConstrs"
|
||||
#define GRB_INT_ATTR_NUMGENCONSTRS "NumGenConstrs"
|
||||
#define GRB_INT_ATTR_NUMNZS "NumNZs"
|
||||
#define GRB_DBL_ATTR_DNUMNZS "DNumNZs"
|
||||
#define GRB_INT_ATTR_NUMQNZS "NumQNZs"
|
||||
#define GRB_INT_ATTR_NUMQCNZS "NumQCNZs"
|
||||
#define GRB_INT_ATTR_NUMINTVARS "NumIntVars"
|
||||
#define GRB_INT_ATTR_NUMBINVARS "NumBinVars"
|
||||
#define GRB_INT_ATTR_NUMPWLOBJVARS "NumPWLObjVars"
|
||||
#define GRB_STR_ATTR_MODELNAME "ModelName"
|
||||
#define GRB_INT_ATTR_MODELSENSE "ModelSense"
|
||||
#define GRB_DBL_ATTR_OBJCON "ObjCon"
|
||||
#define GRB_INT_ATTR_IS_MIP "IsMIP"
|
||||
#define GRB_INT_ATTR_IS_QP "IsQP"
|
||||
#define GRB_INT_ATTR_IS_QCP "IsQCP"
|
||||
#define GRB_INT_ATTR_IS_MULTIOBJ "IsMultiObj"
|
||||
#define GRB_INT_ATTR_LICENSE_EXPIRATION "LicenseExpiration"
|
||||
#define GRB_INT_ATTR_NUMTAGGED "NumTagged"
|
||||
#define GRB_INT_ATTR_FINGERPRINT "Fingerprint"
|
||||
#define GRB_INT_ATTR_BATCHERRORCODE "BatchErrorCode"
|
||||
#define GRB_STR_ATTR_BATCHERRORMESSAGE "BatchErrorMessage"
|
||||
#define GRB_STR_ATTR_BATCHID "BatchID"
|
||||
#define GRB_INT_ATTR_BATCHSTATUS "BatchStatus"
|
||||
#define GRB_DBL_ATTR_LB "LB"
|
||||
#define GRB_DBL_ATTR_UB "UB"
|
||||
#define GRB_DBL_ATTR_OBJ "Obj"
|
||||
#define GRB_CHAR_ATTR_VTYPE "VType"
|
||||
#define GRB_DBL_ATTR_START "Start"
|
||||
#define GRB_DBL_ATTR_PSTART "PStart"
|
||||
#define GRB_INT_ATTR_BRANCHPRIORITY "BranchPriority"
|
||||
#define GRB_STR_ATTR_VARNAME "VarName"
|
||||
#define GRB_INT_ATTR_PWLOBJCVX "PWLObjCvx"
|
||||
#define GRB_DBL_ATTR_VARHINTVAL "VarHintVal"
|
||||
#define GRB_INT_ATTR_VARHINTPRI "VarHintPri"
|
||||
#define GRB_INT_ATTR_PARTITION "Partition"
|
||||
#define GRB_INT_ATTR_POOLIGNORE "PoolIgnore"
|
||||
#define GRB_STR_ATTR_VTAG "VTag"
|
||||
#define GRB_STR_ATTR_CTAG "CTag"
|
||||
#define GRB_DBL_ATTR_RHS "RHS"
|
||||
#define GRB_DBL_ATTR_DSTART "DStart"
|
||||
#define GRB_CHAR_ATTR_SENSE "Sense"
|
||||
#define GRB_STR_ATTR_CONSTRNAME "ConstrName"
|
||||
#define GRB_INT_ATTR_LAZY "Lazy"
|
||||
#define GRB_STR_ATTR_QCTAG "QCTag"
|
||||
#define GRB_DBL_ATTR_QCRHS "QCRHS"
|
||||
#define GRB_CHAR_ATTR_QCSENSE "QCSense"
|
||||
#define GRB_STR_ATTR_QCNAME "QCName"
|
||||
#define GRB_INT_ATTR_GENCONSTRTYPE "GenConstrType"
|
||||
#define GRB_STR_ATTR_GENCONSTRNAME "GenConstrName"
|
||||
#define GRB_INT_ATTR_FUNCPIECES "FuncPieces"
|
||||
#define GRB_DBL_ATTR_FUNCPIECEERROR "FuncPieceError"
|
||||
#define GRB_DBL_ATTR_FUNCPIECELENGTH "FuncPieceLength"
|
||||
#define GRB_DBL_ATTR_FUNCPIECERATIO "FuncPieceRatio"
|
||||
#define GRB_DBL_ATTR_MAX_COEFF "MaxCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_COEFF "MinCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_BOUND "MaxBound"
|
||||
#define GRB_DBL_ATTR_MIN_BOUND "MinBound"
|
||||
#define GRB_DBL_ATTR_MAX_OBJ_COEFF "MaxObjCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_OBJ_COEFF "MinObjCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_RHS "MaxRHS"
|
||||
#define GRB_DBL_ATTR_MIN_RHS "MinRHS"
|
||||
#define GRB_DBL_ATTR_MAX_QCCOEFF "MaxQCCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_QCCOEFF "MinQCCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_QOBJ_COEFF "MaxQObjCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_QOBJ_COEFF "MinQObjCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_QCLCOEFF "MaxQCLCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_QCLCOEFF "MinQCLCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_QCRHS "MaxQCRHS"
|
||||
#define GRB_DBL_ATTR_MIN_QCRHS "MinQCRHS"
|
||||
#define GRB_DBL_ATTR_RUNTIME "Runtime"
|
||||
#define GRB_DBL_ATTR_WORK "Work"
|
||||
#define GRB_INT_ATTR_STATUS "Status"
|
||||
#define GRB_DBL_ATTR_OBJVAL "ObjVal"
|
||||
#define GRB_DBL_ATTR_OBJBOUND "ObjBound"
|
||||
#define GRB_DBL_ATTR_OBJBOUNDC "ObjBoundC"
|
||||
#define GRB_DBL_ATTR_POOLOBJBOUND "PoolObjBound"
|
||||
#define GRB_DBL_ATTR_POOLOBJVAL "PoolObjVal"
|
||||
#define GRB_DBL_ATTR_MIPGAP "MIPGap"
|
||||
#define GRB_INT_ATTR_SOLCOUNT "SolCount"
|
||||
#define GRB_DBL_ATTR_ITERCOUNT "IterCount"
|
||||
#define GRB_INT_ATTR_BARITERCOUNT "BarIterCount"
|
||||
#define GRB_DBL_ATTR_NODECOUNT "NodeCount"
|
||||
#define GRB_DBL_ATTR_OPENNODECOUNT "OpenNodeCount"
|
||||
#define GRB_INT_ATTR_HASDUALNORM "HasDualNorm"
|
||||
#define GRB_INT_ATTR_CONCURRENTWINMETHOD "ConcurrentWinMethod"
|
||||
#define GRB_DBL_ATTR_X "X"
|
||||
#define GRB_DBL_ATTR_XN "Xn"
|
||||
#define GRB_DBL_ATTR_BARX "BarX"
|
||||
#define GRB_DBL_ATTR_RC "RC"
|
||||
#define GRB_DBL_ATTR_VDUALNORM "VDualNorm"
|
||||
#define GRB_INT_ATTR_VBASIS "VBasis"
|
||||
#define GRB_DBL_ATTR_PI "Pi"
|
||||
#define GRB_DBL_ATTR_QCPI "QCPi"
|
||||
#define GRB_DBL_ATTR_SLACK "Slack"
|
||||
#define GRB_DBL_ATTR_QCSLACK "QCSlack"
|
||||
#define GRB_DBL_ATTR_CDUALNORM "CDualNorm"
|
||||
#define GRB_INT_ATTR_CBASIS "CBasis"
|
||||
#define GRB_DBL_ATTR_LB "LB"
|
||||
#define GRB_DBL_ATTR_UB "UB"
|
||||
#define GRB_DBL_ATTR_OBJ "Obj"
|
||||
#define GRB_CHAR_ATTR_VTYPE "VType"
|
||||
#define GRB_DBL_ATTR_START "Start"
|
||||
#define GRB_DBL_ATTR_PSTART "PStart"
|
||||
#define GRB_INT_ATTR_BRANCHPRIORITY "BranchPriority"
|
||||
#define GRB_STR_ATTR_VARNAME "VarName"
|
||||
#define GRB_INT_ATTR_PWLOBJCVX "PWLObjCvx"
|
||||
#define GRB_DBL_ATTR_VARHINTVAL "VarHintVal"
|
||||
#define GRB_INT_ATTR_VARHINTPRI "VarHintPri"
|
||||
#define GRB_INT_ATTR_PARTITION "Partition"
|
||||
#define GRB_INT_ATTR_POOLIGNORE "PoolIgnore"
|
||||
#define GRB_STR_ATTR_VTAG "VTag"
|
||||
#define GRB_STR_ATTR_CTAG "CTag"
|
||||
#define GRB_DBL_ATTR_RHS "RHS"
|
||||
#define GRB_DBL_ATTR_DSTART "DStart"
|
||||
#define GRB_CHAR_ATTR_SENSE "Sense"
|
||||
#define GRB_STR_ATTR_CONSTRNAME "ConstrName"
|
||||
#define GRB_INT_ATTR_LAZY "Lazy"
|
||||
#define GRB_STR_ATTR_QCTAG "QCTag"
|
||||
#define GRB_DBL_ATTR_QCRHS "QCRHS"
|
||||
#define GRB_CHAR_ATTR_QCSENSE "QCSense"
|
||||
#define GRB_STR_ATTR_QCNAME "QCName"
|
||||
#define GRB_INT_ATTR_GENCONSTRTYPE "GenConstrType"
|
||||
#define GRB_STR_ATTR_GENCONSTRNAME "GenConstrName"
|
||||
#define GRB_INT_ATTR_FUNCPIECES "FuncPieces"
|
||||
#define GRB_DBL_ATTR_FUNCPIECEERROR "FuncPieceError"
|
||||
#define GRB_DBL_ATTR_FUNCPIECELENGTH "FuncPieceLength"
|
||||
#define GRB_DBL_ATTR_FUNCPIECERATIO "FuncPieceRatio"
|
||||
#define GRB_DBL_ATTR_MAX_COEFF "MaxCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_COEFF "MinCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_BOUND "MaxBound"
|
||||
#define GRB_DBL_ATTR_MIN_BOUND "MinBound"
|
||||
#define GRB_DBL_ATTR_MAX_OBJ_COEFF "MaxObjCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_OBJ_COEFF "MinObjCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_RHS "MaxRHS"
|
||||
#define GRB_DBL_ATTR_MIN_RHS "MinRHS"
|
||||
#define GRB_DBL_ATTR_MAX_QCCOEFF "MaxQCCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_QCCOEFF "MinQCCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_QOBJ_COEFF "MaxQObjCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_QOBJ_COEFF "MinQObjCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_QCLCOEFF "MaxQCLCoeff"
|
||||
#define GRB_DBL_ATTR_MIN_QCLCOEFF "MinQCLCoeff"
|
||||
#define GRB_DBL_ATTR_MAX_QCRHS "MaxQCRHS"
|
||||
#define GRB_DBL_ATTR_MIN_QCRHS "MinQCRHS"
|
||||
#define GRB_DBL_ATTR_RUNTIME "Runtime"
|
||||
#define GRB_DBL_ATTR_WORK "Work"
|
||||
#define GRB_INT_ATTR_STATUS "Status"
|
||||
#define GRB_DBL_ATTR_OBJVAL "ObjVal"
|
||||
#define GRB_DBL_ATTR_OBJBOUND "ObjBound"
|
||||
#define GRB_DBL_ATTR_OBJBOUNDC "ObjBoundC"
|
||||
#define GRB_DBL_ATTR_POOLOBJBOUND "PoolObjBound"
|
||||
#define GRB_DBL_ATTR_POOLOBJVAL "PoolObjVal"
|
||||
#define GRB_DBL_ATTR_MIPGAP "MIPGap"
|
||||
#define GRB_INT_ATTR_SOLCOUNT "SolCount"
|
||||
#define GRB_DBL_ATTR_ITERCOUNT "IterCount"
|
||||
#define GRB_INT_ATTR_BARITERCOUNT "BarIterCount"
|
||||
#define GRB_DBL_ATTR_NODECOUNT "NodeCount"
|
||||
#define GRB_DBL_ATTR_OPENNODECOUNT "OpenNodeCount"
|
||||
#define GRB_INT_ATTR_HASDUALNORM "HasDualNorm"
|
||||
#define GRB_INT_ATTR_CONCURRENTWINMETHOD "ConcurrentWinMethod"
|
||||
#define GRB_DBL_ATTR_X "X"
|
||||
#define GRB_DBL_ATTR_XN "Xn"
|
||||
#define GRB_DBL_ATTR_BARX "BarX"
|
||||
#define GRB_DBL_ATTR_RC "RC"
|
||||
#define GRB_DBL_ATTR_VDUALNORM "VDualNorm"
|
||||
#define GRB_INT_ATTR_VBASIS "VBasis"
|
||||
#define GRB_DBL_ATTR_PI "Pi"
|
||||
#define GRB_DBL_ATTR_QCPI "QCPi"
|
||||
#define GRB_DBL_ATTR_SLACK "Slack"
|
||||
#define GRB_DBL_ATTR_QCSLACK "QCSlack"
|
||||
#define GRB_DBL_ATTR_CDUALNORM "CDualNorm"
|
||||
#define GRB_INT_ATTR_CBASIS "CBasis"
|
||||
#define GRB_DBL_ATTR_MAX_VIO "MaxVio"
|
||||
#define GRB_DBL_ATTR_BOUND_VIO "BoundVio"
|
||||
#define GRB_DBL_ATTR_BOUND_SVIO "BoundSVio"
|
||||
@@ -295,19 +295,19 @@ extern std::function<int(void *cbdata, int lazylen, const int *lazyind,const dou
|
||||
#define GRB_DBL_ATTR_SA_UBUP "SAUBUp"
|
||||
#define GRB_DBL_ATTR_SA_RHSLOW "SARHSLow"
|
||||
#define GRB_DBL_ATTR_SA_RHSUP "SARHSUp"
|
||||
#define GRB_INT_ATTR_IIS_MINIMAL "IISMinimal"
|
||||
#define GRB_INT_ATTR_IIS_LB "IISLB"
|
||||
#define GRB_INT_ATTR_IIS_UB "IISUB"
|
||||
#define GRB_INT_ATTR_IIS_CONSTR "IISConstr"
|
||||
#define GRB_INT_ATTR_IIS_SOS "IISSOS"
|
||||
#define GRB_INT_ATTR_IIS_QCONSTR "IISQConstr"
|
||||
#define GRB_INT_ATTR_IIS_GENCONSTR "IISGenConstr"
|
||||
#define GRB_INT_ATTR_IIS_LBFORCE "IISLBForce"
|
||||
#define GRB_INT_ATTR_IIS_UBFORCE "IISUBForce"
|
||||
#define GRB_INT_ATTR_IIS_CONSTRFORCE "IISConstrForce"
|
||||
#define GRB_INT_ATTR_IIS_SOSFORCE "IISSOSForce"
|
||||
#define GRB_INT_ATTR_IIS_QCONSTRFORCE "IISQConstrForce"
|
||||
#define GRB_INT_ATTR_IIS_GENCONSTRFORCE "IISGenConstrForce"
|
||||
#define GRB_INT_ATTR_IIS_MINIMAL "IISMinimal"
|
||||
#define GRB_INT_ATTR_IIS_LB "IISLB"
|
||||
#define GRB_INT_ATTR_IIS_UB "IISUB"
|
||||
#define GRB_INT_ATTR_IIS_CONSTR "IISConstr"
|
||||
#define GRB_INT_ATTR_IIS_SOS "IISSOS"
|
||||
#define GRB_INT_ATTR_IIS_QCONSTR "IISQConstr"
|
||||
#define GRB_INT_ATTR_IIS_GENCONSTR "IISGenConstr"
|
||||
#define GRB_INT_ATTR_IIS_LBFORCE "IISLBForce"
|
||||
#define GRB_INT_ATTR_IIS_UBFORCE "IISUBForce"
|
||||
#define GRB_INT_ATTR_IIS_CONSTRFORCE "IISConstrForce"
|
||||
#define GRB_INT_ATTR_IIS_SOSFORCE "IISSOSForce"
|
||||
#define GRB_INT_ATTR_IIS_QCONSTRFORCE "IISQConstrForce"
|
||||
#define GRB_INT_ATTR_IIS_GENCONSTRFORCE "IISGenConstrForce"
|
||||
#define GRB_INT_ATTR_TUNE_RESULTCOUNT "TuneResultCount"
|
||||
#define GRB_DBL_ATTR_FARKASDUAL "FarkasDual"
|
||||
#define GRB_DBL_ATTR_FARKASPROOF "FarkasProof"
|
||||
@@ -316,25 +316,25 @@ extern std::function<int(void *cbdata, int lazylen, const int *lazyind,const dou
|
||||
#define GRB_INT_ATTR_UNBDVAR "UnbdVar"
|
||||
#define GRB_INT_ATTR_VARPRESTAT "VarPreStat"
|
||||
#define GRB_DBL_ATTR_PREFIXVAL "PreFixVal"
|
||||
#define GRB_DBL_ATTR_OBJN "ObjN"
|
||||
#define GRB_DBL_ATTR_OBJNVAL "ObjNVal"
|
||||
#define GRB_DBL_ATTR_OBJNCON "ObjNCon"
|
||||
#define GRB_DBL_ATTR_OBJNWEIGHT "ObjNWeight"
|
||||
#define GRB_INT_ATTR_OBJNPRIORITY "ObjNPriority"
|
||||
#define GRB_DBL_ATTR_OBJNRELTOL "ObjNRelTol"
|
||||
#define GRB_DBL_ATTR_OBJNABSTOL "ObjNAbsTol"
|
||||
#define GRB_STR_ATTR_OBJNNAME "ObjNName"
|
||||
#define GRB_DBL_ATTR_SCENNLB "ScenNLB"
|
||||
#define GRB_DBL_ATTR_SCENNUB "ScenNUB"
|
||||
#define GRB_DBL_ATTR_SCENNOBJ "ScenNObj"
|
||||
#define GRB_DBL_ATTR_SCENNRHS "ScenNRHS"
|
||||
#define GRB_STR_ATTR_SCENNNAME "ScenNName"
|
||||
#define GRB_DBL_ATTR_SCENNX "ScenNX"
|
||||
#define GRB_DBL_ATTR_SCENNOBJBOUND "ScenNObjBound"
|
||||
#define GRB_DBL_ATTR_SCENNOBJVAL "ScenNObjVal"
|
||||
#define GRB_INT_ATTR_NUMOBJ "NumObj"
|
||||
#define GRB_INT_ATTR_NUMSCENARIOS "NumScenarios"
|
||||
#define GRB_INT_ATTR_NUMSTART "NumStart"
|
||||
#define GRB_DBL_ATTR_OBJN "ObjN"
|
||||
#define GRB_DBL_ATTR_OBJNVAL "ObjNVal"
|
||||
#define GRB_DBL_ATTR_OBJNCON "ObjNCon"
|
||||
#define GRB_DBL_ATTR_OBJNWEIGHT "ObjNWeight"
|
||||
#define GRB_INT_ATTR_OBJNPRIORITY "ObjNPriority"
|
||||
#define GRB_DBL_ATTR_OBJNRELTOL "ObjNRelTol"
|
||||
#define GRB_DBL_ATTR_OBJNABSTOL "ObjNAbsTol"
|
||||
#define GRB_STR_ATTR_OBJNNAME "ObjNName"
|
||||
#define GRB_DBL_ATTR_SCENNLB "ScenNLB"
|
||||
#define GRB_DBL_ATTR_SCENNUB "ScenNUB"
|
||||
#define GRB_DBL_ATTR_SCENNOBJ "ScenNObj"
|
||||
#define GRB_DBL_ATTR_SCENNRHS "ScenNRHS"
|
||||
#define GRB_STR_ATTR_SCENNNAME "ScenNName"
|
||||
#define GRB_DBL_ATTR_SCENNX "ScenNX"
|
||||
#define GRB_DBL_ATTR_SCENNOBJBOUND "ScenNObjBound"
|
||||
#define GRB_DBL_ATTR_SCENNOBJVAL "ScenNObjVal"
|
||||
#define GRB_INT_ATTR_NUMOBJ "NumObj"
|
||||
#define GRB_INT_ATTR_NUMSCENARIOS "NumScenarios"
|
||||
#define GRB_INT_ATTR_NUMSTART "NumStart"
|
||||
#define GRB_GENCONSTR_MAX 0
|
||||
#define GRB_GENCONSTR_MIN 1
|
||||
#define GRB_GENCONSTR_ABS 2
|
||||
@@ -714,6 +714,13 @@ extern std::function<int(GRBenv *env, const char *paramname, const char *value)>
|
||||
extern std::function<int(GRBenv *env)> GRBresetparams;
|
||||
extern std::function<int(GRBenv *dest, GRBenv *src)> GRBcopyparams;
|
||||
extern std::function<int(GRBenv **envP, const char *logfilename)> GRBloadenv;
|
||||
extern std::function<int(GRBenv **envP)> GRBemptyenv;
|
||||
extern std::function<int(GRBenv *envP)> GRBgetnumparams;
|
||||
extern std::function<int(GRBenv *envP, int i, char **paramnameP)> GRBgetparamname;
|
||||
extern std::function<int(GRBenv *envP, const char *paramname)> GRBgetparamtype;
|
||||
extern std::function<int(GRBenv *envP, const char *paramname, int *valueP, int *minP, int *maxP, int *defP)> GRBgetintparaminfo;
|
||||
extern std::function<int(GRBenv *envP, const char *paramname, double *valueP, double *minP, double *maxP, double *defP)> GRBgetdblparaminfo;
|
||||
extern std::function<int(GRBenv *envP, const char *paramname, char *valueP, char *defP)> GRBgetstrparaminfo;
|
||||
extern std::function<GRBenv *(GRBmodel *model)> GRBgetenv;
|
||||
extern std::function<void(GRBenv *env)> GRBfreeenv;
|
||||
extern std::function<const char *(GRBenv *env)> GRBgeterrormsg;
|
||||
|
||||
98
ortools/gurobi/gurobi_util.cc
Normal file
98
ortools/gurobi/gurobi_util.cc
Normal file
@@ -0,0 +1,98 @@
|
||||
// Copyright 2010-2022 Google LLC
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "ortools/gurobi/gurobi_util.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "absl/strings/str_cat.h"
|
||||
#include "absl/strings/str_format.h"
|
||||
#include "absl/strings/str_join.h"
|
||||
#include "ortools/gurobi/environment.h"
|
||||
|
||||
namespace operations_research {
|
||||
|
||||
std::string GurobiParamInfoForLogging(GRBenv* grb, bool one_liner_output) {
|
||||
const absl::ParsedFormat<'s', 's', 's'> kExtendedFormat(
|
||||
" Parameter: '%s' value: %s default: %s");
|
||||
const absl::ParsedFormat<'s', 's', 's'> kOneLinerFormat("'%s':%s (%s)");
|
||||
const absl::ParsedFormat<'s', 's', 's'>& format =
|
||||
one_liner_output ? kOneLinerFormat : kExtendedFormat;
|
||||
std::vector<std::string> changed_parameters;
|
||||
const int num_parameters = GRBgetnumparams(grb);
|
||||
for (int i = 0; i < num_parameters; ++i) {
|
||||
char* param_name = nullptr;
|
||||
GRBgetparamname(grb, i, ¶m_name);
|
||||
const int param_type = GRBgetparamtype(grb, param_name);
|
||||
switch (param_type) {
|
||||
case 1: // integer parameters.
|
||||
{
|
||||
int default_value;
|
||||
int min_value;
|
||||
int max_value;
|
||||
int current_value;
|
||||
GRBgetintparaminfo(grb, param_name, ¤t_value, &min_value,
|
||||
&max_value, &default_value);
|
||||
if (current_value != default_value) {
|
||||
changed_parameters.push_back(
|
||||
absl::StrFormat(format, param_name, absl::StrCat(current_value),
|
||||
absl::StrCat(default_value)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: // double parameters.
|
||||
{
|
||||
double default_value;
|
||||
double min_value;
|
||||
double max_value;
|
||||
double current_value;
|
||||
GRBgetdblparaminfo(grb, param_name, ¤t_value, &min_value,
|
||||
&max_value, &default_value);
|
||||
if (current_value != default_value) {
|
||||
changed_parameters.push_back(
|
||||
absl::StrFormat(format, param_name, absl::StrCat(current_value),
|
||||
absl::StrCat(default_value)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3: // string parameters.
|
||||
{
|
||||
char current_value[GRB_MAX_STRLEN + 1];
|
||||
char default_value[GRB_MAX_STRLEN + 1];
|
||||
GRBgetstrparaminfo(grb, param_name, current_value, default_value);
|
||||
// This ensure that strcmp does not go beyond the end of the char
|
||||
// array.
|
||||
current_value[GRB_MAX_STRLEN] = '\0';
|
||||
default_value[GRB_MAX_STRLEN] = '\0';
|
||||
if (std::strcmp(current_value, default_value) != 0) {
|
||||
changed_parameters.push_back(absl::StrFormat(
|
||||
format, param_name, current_value, default_value));
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: // unknown parameter types
|
||||
changed_parameters.push_back(absl::StrFormat(
|
||||
"Parameter '%s' of unknown type %d", param_name, param_type));
|
||||
}
|
||||
}
|
||||
if (changed_parameters.empty()) return "";
|
||||
if (one_liner_output) {
|
||||
return absl::StrCat("GurobiParams{",
|
||||
absl::StrJoin(changed_parameters, ", "), "}");
|
||||
}
|
||||
return absl::StrJoin(changed_parameters, "\n");
|
||||
}
|
||||
|
||||
} // namespace operations_research
|
||||
31
ortools/gurobi/gurobi_util.h
Normal file
31
ortools/gurobi/gurobi_util.h
Normal file
@@ -0,0 +1,31 @@
|
||||
// Copyright 2010-2022 Google LLC
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef OR_TOOLS_GUROBI_GUROBI_UTIL_H_
|
||||
#define OR_TOOLS_GUROBI_GUROBI_UTIL_H_
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "ortools/gurobi/environment.h"
|
||||
|
||||
namespace operations_research {
|
||||
|
||||
// Returns a human-readable listing of all gurobi parameters that are set to
|
||||
// non-default values, and their current value in the given environment. If all
|
||||
// parameters are at their default value, returns the empty string.
|
||||
// To produce a one-liner string, use `one_liner_output=true`.
|
||||
std::string GurobiParamInfoForLogging(GRBenv* grb,
|
||||
bool one_liner_output = false);
|
||||
|
||||
} // namespace operations_research
|
||||
#endif // OR_TOOLS_GUROBI_GUROBI_UTIL_H_
|
||||
Reference in New Issue
Block a user