Supply Chain Optimization Problem with CVXPY and CBC

303 Views Asked by At

I have a question regarding cvxpy capability to systematically choose one of the solutions which result in the same value of an objective function.

Let us consider a typical supply chain optimization problem as an example:

  1. There is a product which is ordered by customers A, B, C.

  2. The demand for this product is 100, 200, and 100 pcs, respectively (total demand is 400 pcs).

  3. The available supply is 250 pcs (hence, there is 150 pcs shortage).

  4. Each customer pays the same price for the product ($10/item).

  5. The objective is to allocate this product among the customers in such a way that the revenue is maximized.

  6. Since unit prices are identical, there are multiple possible solutions / allocation alternatives resulting in the optimal value of the objective function of $2500 (i.e. the total allocation multiplied by the unit price).

Is there a way to pass as a parameter to the solver (e.g. to CBC or cvxpy) which of the allocation alternatives should be chosen? By default, the solver does the allocation on the first come, first served basis, whereas the intended allocation is the one proportional to the demand.

Your help and assistance would be much appreciated.

1

There are 1 best solutions below

0
On

I think this can be formulated as a multiple objective problem:

  1. Minimize Cost
  2. Try to be as close as possible to a single fraction of demand is met.

This can be solved in two steps:

  1. Solve for objective 1.
  2. Add objective 1 as a constraint to the problem and solve for objective 2.

We need to allow deviations from the fraction of demand being met to allow objective 1 stay optimal, so I would do that by adding slacks and minimizing those.

This is similar to what @sascha suggested in the comments.