20 #include "absl/algorithm/container.h"
21 #include "absl/container/flat_hash_map.h"
22 #include "absl/container/flat_hash_set.h"
23 #include "absl/strings/string_view.h"
25 #include "ortools/math_opt/model.pb.h"
26 #include "ortools/math_opt/model_update.pb.h"
27 #include "ortools/math_opt/sparse_containers.pb.h"
35 const absl::string_view
name) {
36 const VariableId
id = next_variable_id_;
37 VariableData& var_data = variables_[id];
41 var_data.name = std::string(
name);
47 std::vector<VariableId> result;
48 result.reserve(variables_.size());
49 for (
const auto& [
var, _] : variables_) {
50 result.push_back(
var);
56 std::vector<VariableId> result =
Variables();
62 const VariableId
start)
const {
63 std::vector<VariableId> result;
64 for (
const VariableId v :
66 if (variables_.contains(v)) {
73 void VariableStorage::AppendVariable(
const VariableId variable,
74 VariablesProto*
proto)
const {
75 const VariableData& data = variables_.at(variable);
76 proto->add_ids(variable.value());
77 proto->add_lower_bounds(data.lower_bound);
78 proto->add_upper_bounds(data.upper_bound);
79 proto->add_integers(data.is_integer);
80 proto->add_names(data.name);
84 VariablesProto result;
86 AppendVariable(v, &result);
101 for (
const VariableId v : diff.
deleted) {
106 result.
updates.mutable_lower_bounds()->add_ids(v.value());
110 result.
updates.mutable_upper_bounds()->add_ids(v.value());
114 result.
updates.mutable_integers()->add_ids(v.value());
117 for (
const VariableId v :
119 if (variables_.contains(v)) {
120 AppendVariable(v, &result.
creates);
std::vector< VariableId > SortedVariables() const
double upper_bound(VariableId id) const
std::vector< VariableId > VariablesFrom(VariableId start) const
VariableId Add(double lower_bound, double upper_bound, bool is_integer, absl::string_view name)
const std::string & name(VariableId id) const
double lower_bound(VariableId id) const
std::vector< VariableId > Variables() const
void AdvanceCheckpointInDiff(Diff &diff) const
VariablesProto Proto() const
UpdateResult Update(const Diff &diff) const
bool is_integer(VariableId id) const
std::vector< T > SortedElements(const absl::flat_hash_set< T > &elements)
StrongIntRange< IntType > MakeStrongIntRange(IntType end)
absl::flat_hash_set< VariableId > integer
absl::flat_hash_set< VariableId > lower_bounds
absl::flat_hash_set< VariableId > deleted
absl::flat_hash_set< VariableId > upper_bounds
VariableUpdatesProto updates
google::protobuf::RepeatedField< int64_t > deleted