Recall that an arc flow of a network is a vector that satisfies the constraint

with for all and

Note, here we have replaced the supply/node with which represents the imbalance. One may view as the inflow minus the outflow of node . If then is an excess node. If then is a deficit node. Otherwise, inflow and outflow are equal and is a balanced node.

In flow decomposition we go from flows on arcs to defining flows on paths and cycles. For example, consider the figure below:

center

We have decomposed the flow into the paths , and cycle . sends 4 units of flow, sends 3 units of flow and cycle has units of flow circulating.

If we denote the flow of a path/cycle by , then the set of paths and the set of cycles in the flow decomposition uniquely determine the flow . That is,

where is the indicator function

Flow Decomposition Theorem

Every path and cycle flow has a unique representation as nonnegative arc flows. Conversely, every nonnegative arc flow can be represented as a path and cycle flow (though not necessarily unique) with the following two properties:

  1. Every directed path with positive flow connects a deficit node to an excess node.
  2. At most paths and cycles have nonzero flow; out of these, at most cycles have nonzero flow.

Flow Decomposition Algorithm

Define the following:

The algorithm is outlined below:

Algorithm 4 Flow decomposition algorithm

procedure FlowDecomposition(G=(N,A), xG=(N,A),~x)

y:=xy:=x

P:=\mathcal{P} := \emptyset

W:=\mathcal{W} := \emptyset

while y0y\ne0 do

s:=s:=Select(y)(y)

Do DFS starting at node ss until finding a cycle WW in G(y)G(y) or a path PP in G(y)G(y) from node ss to node tDt\in D

if cycle WW is found then

add WW to W\mathcal{W}

f(W):=Δ(W)f(W) := \Delta(W)

yij:=yijΔ(W), (i,j)Wy_{ij} := y_{ij}-\Delta(W),~\forall (i,j)\in W

update A(y)A(y) and N(y)N(y)

end if

if path PP is found then

add PP to P\mathcal{P}

f(P):=Δ(P)f(P) := \Delta(P)

yij:=yijΔ(P), (i,j)Py_{ij} := y_{ij} - \Delta(P),~\forall (i,j)\in P

b(s)=b(s)Δ(P)b(s) = b(s) - \Delta(P) where ss is the starting node of PP

b(t)=b(t)+Δ(P)b(t) = b(t) + \Delta(P) where tt is the ending node of PP

update A(y)A(y), N(y)N(y), (S)\mathcal(S) and D\mathcal{D}

end if

end while

end procedure

function Select(y)

if SS\ne\empty then

return xSx\in S

else

return xN(y)x\in N(y)

end if

end function