[Lemon-user] equality form of min-cost network flow

Kovács Péter kpeter at inf.elte.hu
Fri Apr 23 02:17:42 CEST 2010


Dear All,

Basically, all min cost flow algorithms work with the general inequality 
form of the problem. If you need equalites, you should do the following.

   1. If you need equalites for all nodes, simply ensure that the sum of 
supply values is zero.

   2. If you need equalites for some nodes and inequalities for the 
others, then you should modify (extend) the input graph. Note that this 
use case requires the sum of supply values to be non-positive (typically 
negative, otherwise we have the above case). Let -x denote the sum of 
supply values (x>=0). First, add an extra root node s to that graph with 
supply[s]=x. Then add an arc (s,i) for each node i that needs inequality 
condition. Set the lower bound to 0, the upper bound to x and the cost 
to 0 on these new arcs. Finally, run the algorithm on the new network. 
Now we have sum(supply[i])=0, so we require equalities for all nodes. It 
can be easily verified that the new problem is feasible if and only if 
the original problem is feasible. Moreover, if you restrict an optimal 
solution of the new problem to the arcs of the original graph, then you 
obtain an optimal solution for the original problem.

Regards,
Peter


 > In the documentation for min-cost network flow, it states:
 > "However if the sum of the supply values is zero, then these two
 > problems are equivalent. The algorithms
 > <http://lemon.cs.elte.hu/pub/doc/latest/a00531.html> in LEMON support
 > the general form, so if you need the equality form, you have to ensure
 > this additional contraint manually."
 >
 > http://lemon.cs.elte.hu/pub/doc/latest/min_cost_flow.html
 >
 > What is the best way to do this? Say, you have a set of flow-balance
 > constraints that are all >=. But, for one node / row, you want to ensure
 > equality. Let's also assume that sum{ i} supply[i] != 0. That is, the =
 > and >= are not equivalent. This equality is "another constraint". How do
 > you go about ensuring this constraint manually? as suggested in the
 > documentation. Is there any way to adjust the input graph to ensure
 > this? Or change something in the algorithm to identify one constraint or
 > the other as = vs >=0?
 >
 > Thanks,
 > Matt
 >
 >



More information about the Lemon-user mailing list