

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):
- We define binary variables , , (which commodity is selected).
- Then we add a constraint to enforce only one is selected:
- 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.