34 absl::Span<const int64_t> new_solution,
35 absl::Span<const int64_t> base_solution,
36 std::vector<int64_t>* new_combined_solution) {
37 new_combined_solution->resize(new_solution.size());
38 for (
int i = 0;
i < new_solution.size(); ++
i) {
39 if (new_solution[
i] != base_solution[
i]) {
41 (*new_combined_solution)[
i] = new_solution[
i];
50 const CpModelProto& model, absl::Span<const int64_t> new_solution,
51 absl::Span<const int64_t> base_solution,
53 CHECK_EQ(new_solution.size(), base_solution.size());
55 std::shared_ptr<const SharedSolutionRepository<int64_t>::Solution>>
58 for (
int sol_idx = 0; sol_idx < solutions.size(); ++sol_idx) {
59 std::shared_ptr<const SharedSolutionRepository<int64_t>::Solution> s =
61 DCHECK_EQ(s->variable_values.size(), new_solution.size());
63 if (s->variable_values == new_solution ||
64 s->variable_values == base_solution) {
67 std::vector<int64_t> new_combined_solution;
68 if (
TrySolution(model, s->variable_values, new_solution, base_solution,
69 &new_combined_solution)) {
70 absl::StrAppend(solution_info,
" [combined with: ",
71 std::string_view(solutions[sol_idx]->info).substr(0, 20),
73 return new_combined_solution;
81 absl::Span<const int64_t> new_solution,
const std::string& solution_info,
82 absl::Span<const int64_t> base_solution,
Model* model) {
85 response_manager->
NewSolution(new_solution, solution_info, model);
86 if (!base_solution.empty()) {
87 std::string combined_solution_info = solution_info;
88 std::optional<std::vector<int64_t>> combined_solution =
90 response_manager, &combined_solution_info);
91 if (combined_solution.has_value()) {
93 combined_solution.value(), combined_solution_info, model);
bool TrySolution(const CpModelProto &model, absl::Span< const int64_t > solution, absl::Span< const int64_t > new_solution, absl::Span< const int64_t > base_solution, std::vector< int64_t > *new_combined_solution)
std::optional< std::vector< int64_t > > FindCombinedSolution(const CpModelProto &model, absl::Span< const int64_t > new_solution, absl::Span< const int64_t > base_solution, const SharedResponseManager *response_manager, std::string *solution_info)
PushedSolutionPointers PushAndMaybeCombineSolution(SharedResponseManager *response_manager, const CpModelProto &model_proto, absl::Span< const int64_t > new_solution, const std::string &solution_info, absl::Span< const int64_t > base_solution, Model *model)