23 #include "absl/container/flat_hash_set.h"
24 #include "absl/status/statusor.h"
25 #include "absl/strings/string_view.h"
27 #include "ortools/math_opt/callback.pb.h"
30 #include "ortools/math_opt/model_update.pb.h"
38 const SolveParametersProto& solver_parameters,
41 CheckModel(model_parameters.
model());
42 CheckModel(callback_registration.
model());
45 <<
"No callback was provided to run, but callback events were "
49 bool attempted_incremental_solve =
false;
50 if (solver_ !=
nullptr) {
51 const ModelUpdateProto model_update = model_->ExportModelUpdate();
54 attempted_incremental_solve =
true;
59 if (solver_ ==
nullptr) {
61 solver_initializer_));
67 cb = [&](
const CallbackDataProto& callback_data_proto) {
68 const CallbackData data(model_.get(), callback_data_proto);
70 CheckModel(result.
model());
71 return result.
Proto();
75 solver_->Solve(solver_parameters, model_parameters.
Proto(),
76 callback_registration.
Proto(), cb));
77 Result result(model_.get(), solve_result);
86 const LinearConstraintId constraint = model_->AddLinearConstraint(
90 model_->set_linear_constraint_coefficient(constraint, variable,
coef);
96 std::vector<Variable> result;
97 result.reserve(model_->num_variables());
98 for (
const VariableId var_id : model_->variables()) {
99 result.push_back(
Variable(model_.get(), var_id));
105 std::vector<Variable> result =
Variables();
106 std::sort(result.begin(), result.end(),
108 return l.typed_id() < r.typed_id();
114 std::vector<LinearConstraint> result;
115 result.reserve(model_->num_linear_constraints());
116 for (
const LinearConstraintId lin_con_id : model_->linear_constraints()) {
124 std::sort(result.begin(), result.end(),
126 return l.typed_id() < r.typed_id();
134 if (
model !=
nullptr) {
#define CHECK_EQ(val1, val2)
IndexedModel * model() const
const absl::flat_hash_map< VariableId, double > & raw_terms() const
std::function< CallbackResult(CallbackData)> Callback
const std::string & name() const
LinearConstraint AddLinearConstraint(absl::string_view name="")
ModelProto ExportModel() const
std::vector< Variable > Variables()
absl::StatusOr< Result > Solve(const SolveParametersProto &solver_parameters, const ModelSolveParameters &model_parameters={}, const CallbackRegistration &callback_registration={}, Callback callback=nullptr)
std::vector< LinearConstraint > LinearConstraints()
std::vector< LinearConstraint > SortedLinearConstraints()
std::vector< Variable > SortedVariables()
std::function< CallbackResultProto(const CallbackDataProto &)> Callback
static absl::StatusOr< std::unique_ptr< Solver > > New(SolverType solver_type, const ModelProto &model, const SolverInitializerProto &initializer)
constexpr absl::string_view kObjectsFromOtherIndexedModel
Collection of objects used to extend the Constraint Solver library.
#define ASSIGN_OR_RETURN(lhs, rexpr)
double upper_bound_minus_offset() const
LinearExpression expression
double lower_bound_minus_offset() const
CallbackRegistrationProto Proto() const
IndexedModel * model() const
absl::flat_hash_set< CallbackEventProto > events
IndexedModel * model() const
CallbackResultProto Proto() const
ModelSolveParametersProto Proto() const
IndexedModel * model() const
bool attempted_incremental_solve