4242
4343using namespace generalizedassignmentsolver ;
4444
45- typedef columngenerationsolver::RowIdx RowIdx;
46- typedef columngenerationsolver::ColIdx ColIdx;
47- typedef columngenerationsolver::Value Value;
48- typedef columngenerationsolver::Column Column;
45+ using Value = columngenerationsolver::Value;
46+ using Column = columngenerationsolver::Column;
47+ using PricingOutput = columngenerationsolver::PricingSolver::PricingOutput;
4948
5049class PricingSolver : public columngenerationsolver ::PricingSolver
5150{
@@ -61,7 +60,7 @@ class PricingSolver: public columngenerationsolver::PricingSolver
6160 virtual std::vector<std::shared_ptr<const Column>> initialize_pricing (
6261 const std::vector<std::pair<std::shared_ptr<const Column>, Value>>& fixed_columns);
6362
64- virtual std::vector<std::shared_ptr< const Column>> solve_pricing (
63+ virtual PricingOutput solve_pricing (
6564 const std::vector<Value>& duals);
6665
6766private:
@@ -164,10 +163,12 @@ std::vector<std::shared_ptr<const Column>> PricingSolver::initialize_pricing(
164163 return {};
165164}
166165
167- std::vector<std::shared_ptr< const Column>> PricingSolver::solve_pricing (
166+ PricingOutput PricingSolver::solve_pricing (
168167 const std::vector<Value>& duals)
169168{
170- std::vector<std::shared_ptr<const Column>> columns;
169+ PricingOutput output;
170+ Value reduced_cost_bound = 0.0 ;
171+
171172 for (AgentIdx agent_id = 0 ;
172173 agent_id < instance_.number_of_agents ();
173174 ++agent_id) {
@@ -222,9 +223,14 @@ std::vector<std::shared_ptr<const Column>> PricingSolver::solve_pricing(
222223 column.objective_coefficient += instance_.cost (item_id, agent_id);
223224 }
224225 }
225- columns.push_back (std::shared_ptr<const Column>(new Column (column)));
226+ output.columns .push_back (std::shared_ptr<const Column>(new Column (column)));
227+ reduced_cost_bound = (std::min)(
228+ reduced_cost_bound,
229+ columngenerationsolver::compute_reduced_cost (column, duals));
226230 }
227- return columns;
231+
232+ output.overcost = instance_.number_of_agents () * std::min (0.0 , reduced_cost_bound);
233+ return output;
228234}
229235
230236// //////////////////////////////////////////////////////////////////////////////
@@ -244,7 +250,7 @@ const ColumnGenerationOutput generalizedassignmentsolver::column_generation(
244250 columngenerationsolver::ColumnGenerationParameters cgs_parameters;
245251 cgs_parameters.verbosity_level = 0 ;
246252 cgs_parameters.timer = parameters.timer ;
247- cgs_parameters.linear_programming_solver
253+ cgs_parameters.solver_name
248254 = columngenerationsolver::s2lps (parameters.linear_programming_solver );
249255 cgs_parameters.internal_diving = true ;
250256 cgs_parameters.self_adjusting_wentges_smoothing = true ;
@@ -273,7 +279,7 @@ const ColumnGenerationHeuristicGreedyOutput generalizedassignmentsolver::column_
273279 columngenerationsolver::GreedyParameters cgsg_parameters;
274280 cgsg_parameters.verbosity_level = 0 ;
275281 cgsg_parameters.timer = parameters.timer ;
276- cgsg_parameters.column_generation_parameters .linear_programming_solver
282+ cgsg_parameters.column_generation_parameters .solver_name
277283 = columngenerationsolver::s2lps (parameters.linear_programming_solver );
278284 cgsg_parameters.internal_diving = true ;
279285 cgsg_parameters.column_generation_parameters .self_adjusting_wentges_smoothing = true ;
@@ -308,7 +314,7 @@ const ColumnGenerationHeuristicLimitedDiscrepancySearchOutput generalizedassignm
308314 columngenerationsolver::LimitedDiscrepancySearchParameters cgslds_parameters;
309315 cgslds_parameters.verbosity_level = 0 ;
310316 cgslds_parameters.timer = parameters.timer ;
311- cgslds_parameters.column_generation_parameters .linear_programming_solver
317+ cgslds_parameters.column_generation_parameters .solver_name
312318 = columngenerationsolver::s2lps (parameters.linear_programming_solver );
313319 cgslds_parameters.column_generation_parameters .self_adjusting_wentges_smoothing = true ;
314320 cgslds_parameters.column_generation_parameters .automatic_directional_smoothing = true ;
0 commit comments