31 std::vector<double> relaxation_values(
36 const IntegerVariable positive_var = lp_var.
positive_var;
37 if (integer_trail->IsCurrentlyIgnored(positive_var))
continue;
49std::vector<double> GetLPRelaxationValues(
50 const SharedLPSolutionRepository*
lp_solutions, absl::BitGenRef random) {
51 std::vector<double> relaxation_values;
54 return relaxation_values;
58 const SharedSolutionRepository<double>::Solution lp_solution =
61 for (
int model_var = 0; model_var < lp_solution.variable_values.size();
63 relaxation_values.push_back(lp_solution.variable_values[model_var]);
65 return relaxation_values;
68std::vector<double> GetGeneralRelaxationValues(
70 absl::BitGenRef random) {
71 std::vector<double> relaxation_values;
75 return relaxation_values;
77 const SharedSolutionRepository<int64_t>::Solution relaxation_solution =
80 for (
int model_var = 0;
81 model_var < relaxation_solution.variable_values.size(); ++model_var) {
82 relaxation_values.push_back(relaxation_solution.variable_values[model_var]);
84 return relaxation_values;
87std::vector<double> GetIncompleteSolutionValues(
89 std::vector<double> empty_solution_values;
93 return empty_solution_values;
105 absl::BitGenRef random) {
108 const bool use_only_relaxation_values =
109 (response_manager ==
nullptr ||
112 if (use_only_relaxation_values &&
lp_solutions ==
nullptr &&
116 return rins_neighborhood;
119 std::vector<double> relaxation_values;
123 relaxation_values = GetLPRelaxationValues(
lp_solutions, random);
126 <<
"No relaxation solutions repository or lp solutions repository "
131 if (relaxation_values.empty())
return rins_neighborhood;
133 const double tolerance = 1e-6;
135 use_only_relaxation_values
139 for (
int model_var = 0; model_var < relaxation_values.size(); ++model_var) {
140 const double relaxation_value = relaxation_values[model_var];
142 if (relaxation_value == std::numeric_limits<double>::infinity()) {
146 if (use_only_relaxation_values) {
153 const int64_t domain_lb =
154 static_cast<int64_t
>(std::floor(relaxation_value + tolerance));
155 const int64_t domain_ub =
156 static_cast<int64_t
>(std::ceil(relaxation_value - tolerance));
157 if (domain_lb == domain_ub) {
158 rins_neighborhood.
fixed_vars.push_back({model_var, domain_lb});
161 {model_var, {domain_lb, domain_ub}});
165 const IntegerValue best_solution_value =
166 IntegerValue(solution.variable_values[model_var]);
167 if (std::abs(best_solution_value.value() - relaxation_value) < 1e-4) {
169 {model_var, best_solution_value.value()});
174 return rins_neighborhood;
double GetSolutionValue(IntegerVariable variable) const
Class that owns everything related to a particular optimization model.
std::vector< double > GetNewSolution()
bool HasNewSolution() const
void NewLPSolution(std::vector< double > lp_solution)
const SharedSolutionRepository< int64_t > & SolutionsRepository() const
Solution GetRandomBiasedSolution(absl::BitGenRef random) const
SharedRelaxationSolutionRepository * relaxation_solutions
SharedLPSolutionRepository * lp_solutions
SharedIncompleteSolutionManager * incomplete_solutions
void RecordLPRelaxationValues(Model *model)
RINSNeighborhood GetRINSNeighborhood(const SharedResponseManager *response_manager, const SharedRelaxationSolutionRepository *relaxation_solutions, const SharedLPSolutionRepository *lp_solutions, SharedIncompleteSolutionManager *incomplete_solutions, absl::BitGenRef random)
Collection of objects used to extend the Constraint Solver library.
IntegerVariable positive_var
LinearProgrammingConstraint * lp
std::vector< LPVariable > vars
std::vector< std::pair< int, int64_t > > fixed_vars
std::vector< std::pair< int, std::pair< int64_t, int64_t > > > reduced_domain_vars