35 absl::Span<const int64_t> new_solution,
36 absl::Span<const int64_t> base_solution,
37 std::vector<int64_t>* new_combined_solution) {
38 new_combined_solution->resize(new_solution.size());
39 for (
int i = 0;
i < new_solution.size(); ++
i) {
40 if (new_solution[
i] != base_solution[
i]) {
42 (*new_combined_solution)[
i] = new_solution[
i];
51 const CpModelProto& model, absl::Span<const int64_t> new_solution,
52 absl::Span<const int64_t> base_solution,
54 CHECK_EQ(new_solution.size(), base_solution.size());
56 std::shared_ptr<const SharedSolutionRepository<int64_t>::Solution>>
61 for (
int sol_idx = 0; sol_idx < solutions.size(); ++sol_idx) {
62 std::shared_ptr<const SharedSolutionRepository<int64_t>::Solution> s =
64 DCHECK_EQ(s->variable_values.size(), new_solution.size());
66 if (s->variable_values == new_solution ||
67 s->variable_values == base_solution) {
70 std::vector<int64_t> new_combined_solution;
71 if (
TrySolution(model, s->variable_values, new_solution, base_solution,
72 &new_combined_solution)) {
73 absl::StrAppend(solution_info,
" [combined with: ",
74 std::string_view(solutions[sol_idx]->info).substr(0, 20),
76 return new_combined_solution;
84 absl::Span<const int64_t> new_solution, absl::string_view solution_info,
89 new_solution, solution_info,
nullptr,
90 base_solution ==
nullptr ? -1 : base_solution->source_id);
91 if (base_solution !=
nullptr) {
92 std::string combined_solution_info(solution_info);
93 std::optional<std::vector<int64_t>> combined_solution =
95 base_solution->variable_values, response_manager,
96 &combined_solution_info);
97 if (combined_solution.has_value()) {
99 combined_solution.value(), combined_solution_info);
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)
PushedSolutionPointers PushAndMaybeCombineSolution(SharedResponseManager *response_manager, const CpModelProto &model_proto, absl::Span< const int64_t > new_solution, absl::string_view solution_info, std::shared_ptr< const SharedSolutionRepository< int64_t >::Solution > base_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)