30 std::vector<double> relaxation_values(
35 const IntegerVariable positive_var = lp_var.
positive_var;
36 if (integer_trail->IsCurrentlyIgnored(positive_var))
continue;
48 std::vector<double> GetLPRelaxationValues(
50 std::vector<double> relaxation_values;
53 return relaxation_values;
57 const SharedSolutionRepository<double>::Solution lp_solution =
60 for (
int model_var = 0; model_var < lp_solution.variable_values.size();
62 relaxation_values.push_back(lp_solution.variable_values[model_var]);
64 return relaxation_values;
67 std::vector<double> GetGeneralRelaxationValues(
70 std::vector<double> relaxation_values;
74 return relaxation_values;
76 const SharedSolutionRepository<int64>::Solution relaxation_solution =
79 for (
int model_var = 0;
80 model_var < relaxation_solution.variable_values.size(); ++model_var) {
81 relaxation_values.push_back(relaxation_solution.variable_values[model_var]);
83 return relaxation_values;
86 std::vector<double> GetIncompleteSolutionValues(
88 std::vector<double> empty_solution_values;
92 return empty_solution_values;
107 const bool use_only_relaxation_values =
108 (response_manager ==
nullptr ||
111 if (use_only_relaxation_values &&
lp_solutions ==
nullptr &&
115 return rins_neighborhood;
118 std::vector<double> relaxation_values;
122 relaxation_values = GetLPRelaxationValues(
lp_solutions, random);
125 <<
"No relaxation solutions repository or lp solutions repository "
130 if (relaxation_values.empty())
return rins_neighborhood;
132 const double tolerance = 1e-6;
134 use_only_relaxation_values
138 for (
int model_var = 0; model_var < relaxation_values.size(); ++model_var) {
139 const double relaxation_value = relaxation_values[model_var];
141 if (relaxation_value == std::numeric_limits<double>::infinity()) {
145 if (use_only_relaxation_values) {
152 const int64 domain_lb =
153 static_cast<int64>(std::floor(relaxation_value + tolerance));
154 const int64 domain_ub =
155 static_cast<int64>(std::ceil(relaxation_value - tolerance));
156 if (domain_lb == domain_ub) {
157 rins_neighborhood.
fixed_vars.push_back({model_var, domain_lb});
160 {model_var, {domain_lb, domain_ub}});
164 const IntegerValue best_solution_value =
165 IntegerValue(solution.variable_values[model_var]);
166 if (std::abs(best_solution_value.value() - relaxation_value) < 1e-4) {
168 {model_var, best_solution_value.value()});
173 return rins_neighborhood;