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(),
125 return l.typed_id() < r.typed_id();
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(),
152 return l.typed_id() < r.typed_id();
160 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()
std::vector< LinearConstraint > ColumnNonzeros(Variable variable)
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)
VariableId typed_id() const
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