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::Model;
28using ::operations_research::math_opt::SolveResult;
31using ::operations_research::math_opt::Variable;
34constexpr double kInf = std::numeric_limits<double>::infinity();
43void SolveSimpleMIP() {
44 Model
model(
"Integer programming example");
47 const Variable x =
model.AddIntegerVariable(0.0,
kInf,
"x");
48 const Variable y =
model.AddIntegerVariable(0.0,
kInf,
"y");
51 model.AddLinearConstraint(x + 7 * y <= 17.5,
"c1");
52 model.AddLinearConstraint(x <= 3.5,
"c2");
55 model.Maximize(x + 10 * y);
57 std::cout <<
"Num variables: " <<
model.num_variables() << std::endl;
58 std::cout <<
"Num constraints: " <<
model.num_linear_constraints()
61 const SolveResult result =
Solve(
model, SolverType::kGscip).value();
64 for (
const auto& warning : result.warnings) {
65 LOG(
ERROR) <<
"Solver warning: " << warning << std::endl;
68 QCHECK_EQ(result.termination.reason, TerminationReason::kOptimal)
69 <<
"Failed to find an optimal solution: " << result.termination;
71 std::cout <<
"Problem solved in " << result.solve_time() << std::endl;
72 std::cout <<
"Objective value: " << result.objective_value() << std::endl;
74 const double x_val = result.variable_values().at(x);
75 const double y_val = result.variable_values().at(y);
77 std::cout <<
"Variable values: [x=" << x_val <<
", y=" << y_val <<
"]"
82int main(
int argc,
char** argv) {
84 absl::ParseCommandLine(argc, argv);
int main(int argc, char **argv)
void InitGoogleLogging(const char *argv0)
IdMap< Variable, V > VariableMap
absl::StatusOr< SolveResult > Solve(const Model &model, const SolverType solver_type, const SolveArguments &solve_args, const SolverInitArguments &init_args)