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

Matthew Galati magh at lehigh.edu
Fri Apr 23 02:47:24 CEST 2010


Peter - Thank you very much for the reply. I have the 2nd case - so it
seems, I will need to expand my input graph. I saw in the source code that
the graph is already expanded in a similar manner (for detecting
infeasibility). However, this seems to be for the case when all flow balance
constraints are either >= or <=. The mixed case does not seem to be handled.

I will try changing the input graph and let you know if I have any
difficulty.

Thanks,
Matt



2010/4/22 Kovács Péter <kpeter at inf.elte.hu>

> 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
>  >
>  >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lemon.cs.elte.hu/pipermail/lemon-user/attachments/20100422/ef6ee659/attachment.html>


More information about the Lemon-user mailing list