19#include "absl/flags/parse.h"
20#include "absl/flags/usage.h"
21#include "absl/status/statusor.h"
22#include "absl/time/time.h"
27using ::operations_research::math_opt::MathOpt;
28using ::operations_research::math_opt::Result;
29using ::operations_research::math_opt::SolveParametersProto;
30using ::operations_research::math_opt::SOLVER_TYPE_GSCIP;
31using ::operations_research::math_opt::SolveResultProto;
32using ::operations_research::math_opt::SolveStatsProto;
33using ::operations_research::math_opt::Variable;
36constexpr double kInf = std::numeric_limits<double>::infinity();
45void SolveSimpleMIP() {
46 MathOpt optimizer(SOLVER_TYPE_GSCIP,
"Integer programming example");
49 const Variable x = optimizer.AddIntegerVariable(0.0,
kInf,
"x");
50 const Variable y = optimizer.AddIntegerVariable(0.0,
kInf,
"y");
53 optimizer.AddLinearConstraint(x + 7 * y <= 17.5,
"c1");
54 optimizer.AddLinearConstraint(x <= 3.5,
"c2");
57 optimizer.objective().Maximize(x + 10 * y);
59 std::cout <<
"Num variables: " << optimizer.num_variables() << std::endl;
60 std::cout <<
"Num constraints: " << optimizer.num_linear_constraints()
63 const Result result = optimizer.Solve(SolveParametersProto()).value();
66 for (
const auto& warning : result.warnings) {
67 LOG(
ERROR) <<
"Solver warning: " << warning << std::endl;
71 <<
"Failed to find an optimal solution: " << result.termination_detail;
73 std::cout <<
"Problem solved in " << result.solve_time() << std::endl;
74 std::cout <<
"Objective value: " << result.objective_value() << std::endl;
76 const double x_val = result.variable_values().at(x);
77 const double y_val = result.variable_values().at(y);
79 std::cout <<
"Variable values: [x=" << x_val <<
", y=" << y_val <<
"]"
81 const SolveStatsProto& stat = result.solve_stats;
82 std::cout <<
"Simplex iterations: " << stat.simplex_iterations() << std::endl;
83 std::cout <<
"Barrier iterations: " << stat.barrier_iterations() << std::endl;
84 std::cout <<
"Branch and bound nodes: " << stat.node_count() << std::endl;
88int main(
int argc,
char** argv) {
90 absl::ParseCommandLine(argc, argv);
int main(int argc, char **argv)
void InitGoogleLogging(const char *argv0)
IdMap< Variable, V > VariableMap