@@ -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,14 @@ void optimize_sequential_value_correction(
303309 const OptimizeParameters& parameters,
304310 AlgorithmFormatter& algorithm_formatter)
305311{
312+ if (parameters.optimization_mode == OptimizationMode::Anytime) {
313+ optimize_sequential_single_knapsack (
314+ instance,
315+ parameters,
316+ algorithm_formatter,
317+ parameters.sequential_value_correction_subproblem_queue_size - 1 );
318+ }
319+
306320 SequentialValueCorrectionFunction<Instance, Solution> kp_solve
307321 = [&algorithm_formatter, ¶meters](const Instance& kp_instance)
308322 {
@@ -642,7 +656,8 @@ packingsolver::irregular::Output packingsolver::irregular::optimize(
642656 std::ref (exception_ptr_list.front ()),
643657 std::ref (instance),
644658 std::ref (parameters),
645- std::ref (algorithm_formatter)));
659+ std::ref (algorithm_formatter),
660+ -1 ));
646661 } else {
647662 try {
648663 optimize_sequential_single_knapsack (
0 commit comments