21#include "absl/flags/parse.h"
22#include "absl/flags/usage.h"
23#include "absl/status/statusor.h"
24#include "absl/strings/str_cat.h"
25#include "absl/strings/str_join.h"
26#include "absl/time/time.h"
31using ::operations_research::math_opt::LinearConstraint;
32using ::operations_research::math_opt::LinearExpression;
33using ::operations_research::math_opt::Model;
34using ::operations_research::math_opt::SolveResult;
38using ::operations_research::math_opt::Variable;
40constexpr double kInf = std::numeric_limits<double>::infinity();
52 Model
model(
"Linear programming example");
55 std::vector<Variable> x;
56 for (
int j = 0; j < 3; j++) {
57 x.push_back(
model.AddContinuousVariable(0.0,
kInf, absl::StrCat(
"x", j)));
61 std::vector<LinearConstraint> constraints;
62 constraints.push_back(
63 model.AddLinearConstraint(10 * x[0] + 4 * x[1] + 5 * x[2] <= 600,
"c1"));
64 constraints.push_back(
65 model.AddLinearConstraint(2 * x[0] + 2 * x[1] + 6 * x[2] <= 300,
"c2"));
67 constraints.push_back(
model.AddLinearConstraint(
Sum(x) <= 100,
"c3"));
70 model.Maximize(10 * x[0] + 6 * x[1] + 4 * x[2]);
72 std::cout <<
"Num variables: " <<
model.num_variables() << std::endl;
73 std::cout <<
"Num constraints: " <<
model.num_linear_constraints()
76 const SolveResult result =
Solve(
model, SolverType::kGlop).value();
79 for (
const auto& warning : result.warnings) {
80 LOG(
ERROR) <<
"Solver warning: " << warning << std::endl;
83 QCHECK_EQ(result.termination.reason, TerminationReason::kOptimal)
84 <<
"Failed to find an optimal solution: " << result.termination;
86 std::cout <<
"Problem solved in " << result.solve_time() << std::endl;
87 std::cout <<
"Objective value: " << result.objective_value() << std::endl;
89 std::cout <<
"Variable values: ["
90 << absl::StrJoin(result.variable_values().Values(x),
", ") <<
"]"
92 std::cout <<
"Constraint duals: ["
93 << absl::StrJoin(result.dual_values().Values(constraints),
", ")
95 std::cout <<
"Reduced costs: ["
96 << absl::StrJoin(result.reduced_costs().Values(x),
", ") <<
"]"
103int main(
int argc,
char** argv) {
105 absl::ParseCommandLine(argc, argv);
int main(int argc, char **argv)
void InitGoogleLogging(const char *argv0)
LinearExpression Sum(const Iterable &items)
absl::StatusOr< SolveResult > Solve(const Model &model, const SolverType solver_type, const SolveArguments &solve_args, const SolverInitArguments &init_args)