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" 31 #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 absl::optional<ModelUpdateProto> model_update =
52 update_tracker_->ExportModelUpdate();
53 bool did_update =
false;
54 if (model_update == absl::nullopt) {
58 update_tracker_->Checkpoint();
61 attempted_incremental_solve =
true;
73 update_tracker_ =
nullptr;
76 if (solver_ ==
nullptr) {
77 update_tracker_ = model_->NewUpdateTracker();
79 solver_initializer_));
84 cb = [&](
const CallbackDataProto& callback_data_proto) {
85 const CallbackData data(model_.get(), callback_data_proto);
87 CheckModel(result.model());
88 return result.Proto();
92 solver_->Solve(solver_parameters, model_parameters.
Proto(),
93 callback_registration.
Proto(), cb));
94 Result result(model_.get(), solve_result);
103 const LinearConstraintId constraint = model_->AddLinearConstraint(
107 model_->set_linear_constraint_coefficient(constraint, variable,
coef);
113 std::vector<Variable> result;
114 result.reserve(model_->num_variables());
115 for (
const VariableId var_id : model_->variables()) {
116 result.push_back(
Variable(model_.get(), var_id));
122 std::vector<Variable> result =
Variables();
123 std::sort(result.begin(), result.end(),
131 std::vector<LinearConstraint> result;
132 for (
const LinearConstraintId constraint :
133 model_->linear_constraints_with_variable(variable.
typed_id())) {
140 std::vector<LinearConstraint> result;
141 result.reserve(model_->num_linear_constraints());
142 for (
const LinearConstraintId lin_con_id : model_->linear_constraints()) {
150 std::sort(result.begin(), result.end(),
160 if (
model !=
nullptr) {
constexpr absl::string_view kObjectsFromOtherIndexedModel
std::vector< LinearConstraint > ColumnNonzeros(Variable variable)
std::vector< Variable > SortedVariables()
LinearConstraint AddLinearConstraint(absl::string_view name="")
const absl::flat_hash_map< VariableId, double > & raw_terms() const
double lower_bound_minus_offset() const
LinearExpression expression
IndexedModel * model() const
absl::flat_hash_set< CallbackEventProto > events
std::function< CallbackResult(CallbackData)> Callback
bool attempted_incremental_solve
IndexedModel * model() const
IndexedModel * model() const
static absl::StatusOr< std::unique_ptr< Solver > > New(SolverType solver_type, const ModelProto &model, const SolverInitializerProto &initializer)
std::vector< Variable > Variables()
CallbackRegistrationProto Proto() const
VariableId typed_id() const
#define CHECK_EQ(val1, val2)
std::function< CallbackResultProto(const CallbackDataProto &)> Callback
double upper_bound_minus_offset() const
std::vector< LinearConstraint > SortedLinearConstraints()
Collection of objects used to extend the Constraint Solver library.
absl::StatusOr< Result > Solve(const SolveParametersProto &solver_parameters, const ModelSolveParameters &model_parameters={}, const CallbackRegistration &callback_registration={}, Callback callback=nullptr)
ModelProto ExportModel() const
LinearConstraintId typed_id() const
const std::string & name() const
std::vector< LinearConstraint > LinearConstraints()
ModelSolveParametersProto Proto() const
#define ASSIGN_OR_RETURN(lhs, rexpr)