42
42
43
43
using namespace generalizedassignmentsolver ;
44
44
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;
49
48
50
49
class PricingSolver : public columngenerationsolver ::PricingSolver
51
50
{
@@ -61,7 +60,7 @@ class PricingSolver: public columngenerationsolver::PricingSolver
61
60
virtual std::vector<std::shared_ptr<const Column>> initialize_pricing (
62
61
const std::vector<std::pair<std::shared_ptr<const Column>, Value>>& fixed_columns);
63
62
64
- virtual std::vector<std::shared_ptr< const Column>> solve_pricing (
63
+ virtual PricingOutput solve_pricing (
65
64
const std::vector<Value>& duals);
66
65
67
66
private:
@@ -164,10 +163,12 @@ std::vector<std::shared_ptr<const Column>> PricingSolver::initialize_pricing(
164
163
return {};
165
164
}
166
165
167
- std::vector<std::shared_ptr< const Column>> PricingSolver::solve_pricing (
166
+ PricingOutput PricingSolver::solve_pricing (
168
167
const std::vector<Value>& duals)
169
168
{
170
- std::vector<std::shared_ptr<const Column>> columns;
169
+ PricingOutput output;
170
+ Value reduced_cost_bound = 0.0 ;
171
+
171
172
for (AgentIdx agent_id = 0 ;
172
173
agent_id < instance_.number_of_agents ();
173
174
++agent_id) {
@@ -222,9 +223,14 @@ std::vector<std::shared_ptr<const Column>> PricingSolver::solve_pricing(
222
223
column.objective_coefficient += instance_.cost (item_id, agent_id);
223
224
}
224
225
}
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));
226
230
}
227
- return columns;
231
+
232
+ output.overcost = instance_.number_of_agents () * std::min (0.0 , reduced_cost_bound);
233
+ return output;
228
234
}
229
235
230
236
// //////////////////////////////////////////////////////////////////////////////
@@ -244,7 +250,7 @@ const ColumnGenerationOutput generalizedassignmentsolver::column_generation(
244
250
columngenerationsolver::ColumnGenerationParameters cgs_parameters;
245
251
cgs_parameters.verbosity_level = 0 ;
246
252
cgs_parameters.timer = parameters.timer ;
247
- cgs_parameters.linear_programming_solver
253
+ cgs_parameters.solver_name
248
254
= columngenerationsolver::s2lps (parameters.linear_programming_solver );
249
255
cgs_parameters.internal_diving = true ;
250
256
cgs_parameters.self_adjusting_wentges_smoothing = true ;
@@ -273,7 +279,7 @@ const ColumnGenerationHeuristicGreedyOutput generalizedassignmentsolver::column_
273
279
columngenerationsolver::GreedyParameters cgsg_parameters;
274
280
cgsg_parameters.verbosity_level = 0 ;
275
281
cgsg_parameters.timer = parameters.timer ;
276
- cgsg_parameters.column_generation_parameters .linear_programming_solver
282
+ cgsg_parameters.column_generation_parameters .solver_name
277
283
= columngenerationsolver::s2lps (parameters.linear_programming_solver );
278
284
cgsg_parameters.internal_diving = true ;
279
285
cgsg_parameters.column_generation_parameters .self_adjusting_wentges_smoothing = true ;
@@ -308,7 +314,7 @@ const ColumnGenerationHeuristicLimitedDiscrepancySearchOutput generalizedassignm
308
314
columngenerationsolver::LimitedDiscrepancySearchParameters cgslds_parameters;
309
315
cgslds_parameters.verbosity_level = 0 ;
310
316
cgslds_parameters.timer = parameters.timer ;
311
- cgslds_parameters.column_generation_parameters .linear_programming_solver
317
+ cgslds_parameters.column_generation_parameters .solver_name
312
318
= columngenerationsolver::s2lps (parameters.linear_programming_solver );
313
319
cgslds_parameters.column_generation_parameters .self_adjusting_wentges_smoothing = true ;
314
320
cgslds_parameters.column_generation_parameters .automatic_directional_smoothing = true ;
0 commit comments