@@ -238,7 +238,8 @@ void optimize_tree_search(
238238void optimize_sequential_single_knapsack (
239239 const Instance& instance,
240240 const OptimizeParameters& parameters,
241- AlgorithmFormatter& algorithm_formatter)
241+ AlgorithmFormatter& algorithm_formatter,
242+ Counter queue_size_max = -1 )
242243{
243244 double maximum_approximation_ratio = parameters.initial_maximum_approximation_ratio ;
244245 for (Counter queue_size = 1 ;;) {
@@ -248,6 +249,11 @@ void optimize_sequential_single_knapsack(
248249 maximum_approximation_ratio = parameters.not_anytime_maximum_approximation_ratio ;
249250 }
250251
252+ if (queue_size_max != -1
253+ && queue_size > queue_size_max) {
254+ break ;
255+ }
256+
251257 SequentialValueCorrectionFunction<Instance, Solution> kp_solve
252258 = [&algorithm_formatter, ¶meters, queue_size, maximum_approximation_ratio](const Instance& kp_instance)
253259 {
@@ -303,6 +309,12 @@ void optimize_sequential_value_correction(
303309 const OptimizeParameters& parameters,
304310 AlgorithmFormatter& algorithm_formatter)
305311{
312+ optimize_sequential_single_knapsack (
313+ instance,
314+ parameters,
315+ algorithm_formatter,
316+ parameters.sequential_value_correction_subproblem_queue_size - 1 );
317+
306318 SequentialValueCorrectionFunction<Instance, Solution> kp_solve
307319 = [&algorithm_formatter, ¶meters](const Instance& kp_instance)
308320 {
@@ -642,7 +654,8 @@ packingsolver::irregular::Output packingsolver::irregular::optimize(
642654 std::ref (exception_ptr_list.front ()),
643655 std::ref (instance),
644656 std::ref (parameters),
645- std::ref (algorithm_formatter)));
657+ std::ref (algorithm_formatter),
658+ -1 ));
646659 } else {
647660 try {
648661 optimize_sequential_single_knapsack (
0 commit comments