@@ -380,13 +380,21 @@ std::vector<std::shared_ptr<const Column>> generate_all_columns_3h_patterns(
380380 return {};
381381}
382382
383- columngenerationsolver::Model get_model (
383+ struct GetModelOutput
384+ {
385+ columngenerationsolver::Model model;
386+ std::vector<std::shared_ptr<const Column>> column_pool;
387+ };
388+
389+ GetModelOutput get_model (
384390 const Instance& instance)
385391{
386392 const BinType& bin_type = instance.bin_type (0 );
387393 double multiplier_length = largest_power_of_two_lesser_or_equal (bin_type.rect .w );
388394
389- columngenerationsolver::Model model;
395+ GetModelOutput output;
396+ columngenerationsolver::Model& model = output.model ;
397+ std::vector<std::shared_ptr<const Column>>& column_pool = output.column_pool ;
390398
391399 if (instance.objective () == Objective::OpenDimensionX) {
392400 model.objective_sense = optimizationtools::ObjectiveDirection::Minimize;
@@ -435,12 +443,12 @@ columngenerationsolver::Model get_model(
435443 if (instance.parameters ().number_of_stages == 1
436444 && instance.parameters ().cut_type == CutType::Roadef2018) {
437445 for (const auto & column: generate_all_columns_1r_patterns (instance))
438- model. columns .push_back (column);
446+ column_pool .push_back (column);
439447 }
440448 if (instance.parameters ().number_of_stages == 2
441449 && instance.parameters ().cut_type == CutType::Homogenous) {
442450 for (const auto & column: generate_all_columns_2h_patterns (instance))
443- model. columns .push_back (column);
451+ column_pool .push_back (column);
444452 }
445453
446454 // Pricing solver.
@@ -459,7 +467,7 @@ columngenerationsolver::Model get_model(
459467 auto columns = generate_all_columns_2e_patterns (instance);
460468 if (!columns.empty ()) {
461469 for (const auto & column: columns)
462- model. columns .push_back (column);
470+ column_pool .push_back (column);
463471 static_cast <ColumnGenerationPricingSolver&>(*model.pricing_solver ).set_all_columns_2e_patterns_generated ();
464472 }
465473 }
@@ -472,7 +480,7 @@ columngenerationsolver::Model get_model(
472480 auto columns = generate_all_columns_2n_patterns (instance);
473481 if (!columns.empty ()) {
474482 for (const auto & column: columns)
475- model. columns .push_back (column);
483+ column_pool .push_back (column);
476484 static_cast <ColumnGenerationPricingSolver&>(*model.pricing_solver ).set_all_columns_2n_patterns_generated ();
477485 }
478486 }
@@ -483,7 +491,7 @@ columngenerationsolver::Model get_model(
483491 auto columns = generate_all_columns_2r_patterns (instance);
484492 if (!columns.empty ()) {
485493 for (const auto & column: columns)
486- model. columns .push_back (column);
494+ column_pool .push_back (column);
487495 static_cast <ColumnGenerationPricingSolver&>(*model.pricing_solver ).set_all_columns_2r_patterns_generated ();
488496 }
489497 }
@@ -492,12 +500,12 @@ columngenerationsolver::Model get_model(
492500 auto columns = generate_all_columns_3h_patterns (instance);
493501 if (!columns.empty ()) {
494502 for (const auto & column: columns)
495- model. columns .push_back (column);
503+ column_pool .push_back (column);
496504 static_cast <ColumnGenerationPricingSolver&>(*model.pricing_solver ).set_all_columns_3h_patterns_generated ();
497505 }
498506 }
499507
500- return model ;
508+ return output ;
501509}
502510
503511std::vector<std::shared_ptr<const Column>> ColumnGenerationPricingSolver::initialize_pricing (
@@ -1465,8 +1473,10 @@ void column_generation_2_vertical(
14651473 const ColumnGeneration2Parameters& parameters,
14661474 AlgorithmFormatter& algorithm_formatter)
14671475{
1468- columngenerationsolver::Model cgs_model = get_model (instance);
1476+ GetModelOutput cgs_model = get_model (instance);
14691477 columngenerationsolver::LimitedDiscrepancySearchParameters cgslds_parameters;
1478+ for (const auto & column: cgs_model.column_pool )
1479+ cgslds_parameters.column_pool .push_back (column);
14701480 cgslds_parameters.verbosity_level = 0 ;
14711481 cgslds_parameters.timer = parameters.timer ;
14721482 cgslds_parameters.timer .add_end_boolean (&algorithm_formatter.end_boolean ());
@@ -1532,7 +1542,7 @@ void column_generation_2_vertical(
15321542 };
15331543 cgslds_parameters.column_generation_parameters .solver_name
15341544 = parameters.linear_programming_solver_name ;
1535- columngenerationsolver::limited_discrepancy_search (cgs_model, cgslds_parameters);
1545+ columngenerationsolver::limited_discrepancy_search (cgs_model. model , cgslds_parameters);
15361546}
15371547
15381548void column_generation_2_horizontal (
0 commit comments