1#ifndef ZONOOPT_GUROBI_SETTINGS_HPP_
2#define ZONOOPT_GUROBI_SETTINGS_HPP_
33 bool gurobi_available();
34 const std::string& gurobi_unavailable_reason();
89 std::unique_ptr<SolverSettings>
clone()
const override
91 return std::make_unique<GurobiSettings>(*
this);
97 if (!detail::gurobi_available())
99 throw std::runtime_error(
"GurobiSettings: " + detail::gurobi_unavailable_reason());
108 std::stringstream ss;
109 ss <<
"GurobiSettings (unset fields use Gurobi defaults):\n";
110 auto opt_int = [&](
const char*
n,
const std::optional<int>& v) {
if (v) ss <<
" " <<
n <<
" = " << *v <<
"\n"; };
111 auto opt_dbl = [&](
const char*
n,
const std::optional<double>& v) {
if (v) ss <<
" " <<
n <<
" = " << *v <<
"\n"; };
112 auto opt_str = [&](
const char*
n,
const std::optional<std::string>& v) {
if (v) ss <<
" " <<
n <<
" = \"" << *v <<
"\"\n"; };
119 opt_dbl(
"MIPGap",
MIPGap);
125 opt_int(
"Method",
Method);
127 opt_int(
"Cuts",
Cuts);
132 opt_int(
"Seed",
Seed);
143 for (
const auto& kv :
int_params) ss <<
" [int] " << kv.first <<
" = " << kv.second <<
"\n";
144 for (
const auto& kv :
dbl_params) ss <<
" [dbl] " << kv.first <<
" = " << kv.second <<
"\n";
145 for (
const auto& kv :
str_params) ss <<
" [str] " << kv.first <<
" = \"" << kv.second <<
"\"\n";
185 std::shared_ptr<ExternalSolverResults>
clone()
const override
187 return std::make_shared<GurobiSolverResults>(*
this);
192 std::stringstream ss;
193 ss <<
"GurobiSolverResults:\n";
194 ss <<
" status: " <<
status <<
"\n";
197 ss <<
" mip_gap: " <<
mip_gap <<
"\n";
198 ss <<
" obj_bound: " <<
obj_bound <<
"\n";
int n
Definition GurobiSolver.cpp:83
Optimization settings and solution data structures for ZonoOpt library.
Definition ZonoOpt.hpp:58
Abstract base for external-solver-specific solution metadata.
Definition SolverDataStructures.hpp:267
Settings for the dynamically-loaded Gurobi solver backend.
Definition GurobiSettings.hpp:43
std::optional< int > NumericFocus
0..3 numerical-care knob
Definition GurobiSettings.hpp:62
std::optional< double > Heuristics
MIP heuristics effort (0..1)
Definition GurobiSettings.hpp:63
std::map< std::string, double > dbl_params
Definition GurobiSettings.hpp:85
std::optional< double > MIPGap
relative MIP optimality gap
Definition GurobiSettings.hpp:51
std::optional< int > Presolve
-1 auto, 0 off, 1 conservative, 2 aggressive
Definition GurobiSettings.hpp:59
void verify_available() const override
Verify the solver backend selected by this settings type is usable.
Definition GurobiSettings.hpp:95
std::optional< double > MIPGapAbs
absolute MIP optimality gap
Definition GurobiSettings.hpp:52
std::string solver_name() const override
Return name of the solver backend selected by this settings type, e.g., "ZonoOpt",...
Definition GurobiSettings.hpp:155
GurobiSettings()
Construct a new Gurobi Settings object.
Definition GurobiSettings.hpp:153
std::optional< int > MIPFocus
0 default, 1 feasibility, 2 optimality, 3 bound
Definition GurobiSettings.hpp:61
std::optional< int > PoolSolutions
Definition GurobiSettings.hpp:68
std::optional< double > FeasibilityTol
constraint feasibility tolerance
Definition GurobiSettings.hpp:53
std::optional< int > OutputFlag
0 silent, 1 verbose (Gurobi default 1)
Definition GurobiSettings.hpp:74
std::optional< double > TimeLimit
wall-clock time limit in seconds
Definition GurobiSettings.hpp:45
std::string print() const
displays the parameters that have been explicitly set
Definition GurobiSettings.hpp:106
std::optional< double > WorkLimit
deterministic work limit
Definition GurobiSettings.hpp:46
std::optional< double > OptimalityTol
dual feasibility tolerance
Definition GurobiSettings.hpp:54
std::optional< double > PoolGap
Definition GurobiSettings.hpp:70
std::optional< double > MemLimit
memory limit in GB
Definition GurobiSettings.hpp:47
std::optional< int > LogToConsole
Definition GurobiSettings.hpp:75
std::unique_ptr< SolverSettings > clone() const override
Polymorphic copy. Must be overridden by every concrete subclass.
Definition GurobiSettings.hpp:89
std::optional< int > Seed
random seed
Definition GurobiSettings.hpp:65
std::map< std::string, int > int_params
Definition GurobiSettings.hpp:84
std::optional< int > Cuts
global cut aggressiveness: -1..3
Definition GurobiSettings.hpp:60
std::optional< int > Method
root-node algorithm: -1 auto, 0..5
Definition GurobiSettings.hpp:58
std::optional< double > PoolGapAbs
Definition GurobiSettings.hpp:71
std::optional< int > PoolSearchMode
Definition GurobiSettings.hpp:69
std::map< std::string, std::string > str_params
Definition GurobiSettings.hpp:86
std::optional< int > Threads
worker thread count; 0 = auto
Definition GurobiSettings.hpp:64
std::optional< int > SolutionLimit
stop after this many MIP solutions
Definition GurobiSettings.hpp:48
std::optional< std::string > LogFile
Definition GurobiSettings.hpp:76
std::optional< double > IntFeasTol
integer feasibility tolerance
Definition GurobiSettings.hpp:55
Solver-native solution metadata produced by the Gurobi backend.
Definition GurobiSettings.hpp:169
int status
Raw Gurobi status code (see Gurobi's status code table).
Definition GurobiSettings.hpp:171
double iter_count
Simplex / barrier iteration count (Gurobi attribute "IterCount").
Definition GurobiSettings.hpp:174
double mip_gap
Relative MIP optimality gap achieved at termination (Gurobi attribute "MIPGap").
Definition GurobiSettings.hpp:180
double node_count
Number of branch-and-bound nodes explored (Gurobi attribute "NodeCount").
Definition GurobiSettings.hpp:177
std::shared_ptr< ExternalSolverResults > clone() const override
Polymorphic copy; required so callers can deep-copy an OptSolution.
Definition GurobiSettings.hpp:185
double obj_bound
Best dual bound found for the MIP (Gurobi attribute "ObjBound").
Definition GurobiSettings.hpp:183
std::string print() const override
Human-readable summary of the solver-specific fields.
Definition GurobiSettings.hpp:190
Abstract base for all solver settings.
Definition SolverDataStructures.hpp:35