The circulation problem and its variants are a generalisation of network flow problems, with the added constraint of a lower bound on edge flows, and with flow conservation also being required for the source and sink (i.e. there are no special nodes). In variants of the problem, there are multiple commodities flowing through the network, and a cost on the flow.
Given flow network
G(V,E)
l(v,w)
v
w
u(v,w)
v
w
c(v,w)
(v,w)
and the constraints:
l(v,w)\leqf(v,w)\lequ(v,w)
\sumwf(u,w)=0
Finding a flow assignment satisfying the constraints gives a solution to the given circulation problem.
In the minimum cost variant of the problem, minimize
\sum(v,w)c(v,w) ⋅ f(v,w).
In a multi-commodity circulation problem, you also need to keep track of the flow of the individual commodities:
fi(v,w) | The flow of commodity i v w | |
f(v,w)=\sumifi(v,w) | The total flow. |
There is also a lower bound on each flow of commodity.
li(v,w)\leqfi(v,w) |
The conservation constraint must be upheld individually for the commodities:
\sumwfi(u,w)=0.
For the circulation problem, many polynomial algorithms have been developed (e.g., Edmonds–Karp algorithm, 1972; Tarjan 1987-1988). Tardos found the first strongly polynomial algorithm.[1]
For the case of multiple commodities, the problem is NP-complete for integer flows.[2] For fractional flows, it is solvable in polynomial time, as one can formulate the problem as a linear program.
Below are given some problems, and how to solve them with the general circulation setup given above.
Ki(si,ti,di)
di
i
si
ti
(ti,si)
li(ti,si)=u(ti,si)=di
i
li(u,v)=0
t
s
l(t,s)=0
u(t,s)=
c(t,s)=-1
m
l(t,s)=u(t,s)=m
c(t,s)=0
l(u,v)=0
c(u,v)=1
(t,s)
l(t,s)=u(t,s)=1
c(t,s)=0
v(v-1)/2