30 std::vector<double> relaxation_values(
36 const IntegerVariable positive_var = lp_var.
positive_var;
44 relaxation_values[model_var] = lp_value;
51 std::vector<double> GetLPRelaxationValues(
53 std::vector<double> relaxation_values;
56 return relaxation_values;
60 const SharedSolutionRepository<double>::Solution lp_solution =
63 for (
int model_var = 0; model_var < lp_solution.variable_values.size();
65 relaxation_values.push_back(lp_solution.variable_values[model_var]);
67 return relaxation_values;
70 std::vector<double> GetGeneralRelaxationValues(
73 std::vector<double> relaxation_values;
77 return relaxation_values;
79 const SharedSolutionRepository<int64>::Solution relaxation_solution =
82 for (
int model_var = 0;
83 model_var < relaxation_solution.variable_values.size(); ++model_var) {
84 relaxation_values.push_back(relaxation_solution.variable_values[model_var]);
86 return relaxation_values;
89 std::vector<double> GetIncompleteSolutionValues(
91 std::vector<double> empty_solution_values;
95 return empty_solution_values;
110 const bool use_only_relaxation_values =
111 (response_manager ==
nullptr ||
114 if (use_only_relaxation_values &&
lp_solutions ==
nullptr &&
118 return rins_neighborhood;
121 std::vector<double> relaxation_values;
125 relaxation_values = GetLPRelaxationValues(
lp_solutions, random);
128 <<
"No relaxation solutions repository or lp solutions repository "
133 if (relaxation_values.empty())
return rins_neighborhood;
135 const double tolerance = 1e-6;
136 for (
int model_var = 0; model_var < relaxation_values.size(); ++model_var) {
137 const double relaxation_value = relaxation_values[model_var];
139 if (relaxation_value == std::numeric_limits<double>::infinity()) {
143 if (use_only_relaxation_values) {
150 const int64 domain_lb =
151 static_cast<int64>(std::floor(relaxation_value + tolerance));
152 const int64 domain_ub =
153 static_cast<int64>(std::ceil(relaxation_value - tolerance));
154 if (domain_lb == domain_ub) {
155 rins_neighborhood.
fixed_vars.push_back({model_var, domain_lb});
158 {model_var, {domain_lb, domain_ub}});
166 const IntegerValue best_solution_value =
167 IntegerValue(solution.variable_values[model_var]);
168 if (std::abs(best_solution_value.value() - relaxation_value) < 1e-4) {
170 {model_var, best_solution_value.value()});
175 return rins_neighborhood;