diff --git a/ortools/packing/arc_flow_solver.cc b/ortools/packing/arc_flow_solver.cc index cb733b3c42..cfc48b8bba 100644 --- a/ortools/packing/arc_flow_solver.cc +++ b/ortools/packing/arc_flow_solver.cc @@ -72,13 +72,18 @@ double ConvertVectorBinPackingProblem(const vbp::VectorBinPackingProblem& input, vbp::VectorBinPackingSolution SolveVectorBinPackingWithArcFlow( const vbp::VectorBinPackingProblem& problem, MPSolver::OptimizationProblemType solver_type, - const std::string& mip_params, double time_limit, int num_threads) { + const std::string& mip_params, double time_limit, int num_threads, + int max_bins) { ArcFlowGraph graph; const double arc_flow_time = ConvertVectorBinPackingProblem(problem, &graph); int max_num_bins = 0; - for (const auto& item : problem.item()) { - max_num_bins += item.num_copies(); + if (max_bins > 0) { + max_num_bins = max_bins; + } else { + for (const auto& item : problem.item()) { + max_num_bins += item.num_copies(); + } } const int num_types = problem.item_size(); std::vector> incoming_vars(graph.nodes.size()); diff --git a/ortools/packing/arc_flow_solver.h b/ortools/packing/arc_flow_solver.h index 8d67f8614e..8655740776 100644 --- a/ortools/packing/arc_flow_solver.h +++ b/ortools/packing/arc_flow_solver.h @@ -23,7 +23,8 @@ namespace packing { vbp::VectorBinPackingSolution SolveVectorBinPackingWithArcFlow( const vbp::VectorBinPackingProblem& problem, MPSolver::OptimizationProblemType solver_type, - const std::string& mip_params, double time_limit, int num_threads); + const std::string& mip_params, double time_limit, int num_threads, + int max_bins); } // namespace packing } // namespace operations_research