1

Determine all variables, this would be i.e.

And is upper bound on congestion of edges.

Minimise , subject to:

  • The flow conservation constraints:

    This is equivalent to for each and

    • Commodity : (node ) (node ) (node ) .. etc
    • Commodity : as above
    • Commodity : as above
  • The congestion constraints, one constraint for each edge:

    This is equivalent to for each

    • (edge )
    • .. etc
  • Force non-negative flows:

    This is equivalent to for each

    • .. etc

2

By transitivity, we can ensure they all sum to :

3

This would only let commodity use edge :

But we want only ‘one’ commodity (so any of them):

  1. We define binary variables , , (which commodity is selected).
  2. Then we add a constraint to enforce only one is selected:
  3. Finally, we add constraints to allow one of the commodities to use the edge:

Using binary variables is a standard way to add this sort of control flow in optimisation problems.