Skip to content

Commit f6a6483

Browse files
committed
Update columngenerationsolver dependency
1 parent 13ccb74 commit f6a6483

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

extern/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ set(COLUMNGENERATIONSOLVER_USE_HIGHS ON)
7070
FetchContent_Declare(
7171
columngenerationsolver
7272
GIT_REPOSITORY https://github.com/fontanf/columngenerationsolver.git
73-
GIT_TAG 6f449498593dfe846f6bbb72364394a4a0388b86
73+
GIT_TAG c661bbd0f05e32161b07db2a28484dbb12d60c10
7474
#SOURCE_DIR "${PROJECT_SOURCE_DIR}/../columngenerationsolver/"
7575
EXCLUDE_FROM_ALL)
7676
FetchContent_MakeAvailable(columngenerationsolver)

src/rectangleguillotine/column_generation_2.cpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

503511
std::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

15381548
void column_generation_2_horizontal(

0 commit comments

Comments
 (0)