0

We have a supplier/depot (index d) and several factories (index f) with demand known for different products (p) during T month (index t) ahead. There is a fleet of trucks (index v) with different truck types (index k) (e.g., some of them have fridge) which restricts carrying some products just to that truck type. We have a set of pre-defined routes (index r) between depot and factories (there exists routes between factories themselves).

A truck loads goods from the supplier and uses the pre-defined routes in which multiple factories can be visited, and finally gets back to the depot for the next load. In a month each truck may carry goods from the depot to factory j more than once. So variable x_{p,k,r,f,n,t} is the amount of product p that truck type v (of type k) can load from depot and through rout r take to factory f at time t. The vehicles of a type are limited by V_k.

The counter n is the number of rounds in a month that a truck type takes the same product, route, to the same factory. The goal is to minimize the total cost. The simplest case is where a vehicle takes the path depot -> factory 1 -> depot -> factory 1 in a month. In this case we have two index x_{p,k,r,f,1,t} and x_{p,k,r,f,2,t} to differentiate these two rounds. Here is the problem, this model generates many alternate solutions. For example if we have 4 trucks of type k, then one solution is (we call it solution 1):

x_{p,k,r,f,1,t} = 6

x_{p,k,r,f,2,t} = 4.

Another solution (solution 2) is:

x_{p,k,r,f,1,t} = 4

x_{p,k,r,f,2,t} = 6.

Whish is basically the same as solution 1 (just the order changes).

As the problem size enlarges, many different solutions have the same total costs. We would like to think of a method to decreasing the solution space (alternate solutions), while keeping all possible objective values.

Matt Najarian
  • 151
  • 1
  • 8

3 Answers3

0

Check out Cplex solution pool and how to set its filters.

  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Mar 18 '22 at 21:03
0

This is the parameter that you can use to filter cplex solution pool:

Limit on populate (number of solutions generated)

Check the link below:

https://www.ibm.com/docs/en/icos/20.1.0?topic=pool-which-parameters-control-solution

  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Mar 18 '22 at 02:02
  • It will not help solving the problem. What I am looking for is adding constraints to reduce the solution space and the alternate solutions. – Matt Najarian Mar 22 '22 at 13:58
0

You should add additional constraints to get rid of symmetries.

For instance

forall(p,k,r,f,t) forall(n in 1..N-1) x_{p,k,r,f,n,t}<=x_{p,k,r,f,n+1,t}

will get rid of some duplicate solutions

In a smaller example like the zoo example,

in OPL CPLEX

int nbKids=300;
float costBus40=500;
float costBus30=400;
 
dvar int+ nbBus40;
dvar int+ nbBus40b;
dvar int+ nbBus30;
 
minimize
 costBus40*nbBus40  +costBus40*nbBus40b  +nbBus30*costBus30;
 
subject to
{
 40*(nbBus40+nbBus40b)+nbBus30*30>=nbKids;
 
} 

may lead to many duplicate solutions. The additional constraint

nbBus40b<=nbBus40;

willget rid of some

Alex Fleischer
  • 9,276
  • 2
  • 12
  • 15
  • It will solve the problem if there is only one products to carry. But consider when you have product x and y. Then for n and n+1 the following scenarios are the same: x_{n} = 10, x_{n+1}=6, y_{n}=3, y_{n+1}=7. Then switch the n and n+1 for the new solution. If we add the constraint x_{n}>x_{n+1} and y_{n}>y_{n+1} we may even make it infeasibly. I have added this constraint for just one product (say x). – Matt Najarian Mar 22 '22 at 13:59