Multi-commodity flow problem

From Infogalactic: the planetary knowledge core
Jump to: navigation, search

The multi-commodity flow problem is a network flow problem with multiple commodities (flow demands) between different source and sink nodes.

Definition

Given a flow network \,G(V,E), where edge (u,v) \in E has capacity \,c(u,v). There are \,k commodities K_1,K_2,\dots,K_k, defined by \,K_i=(s_i,t_i,d_i), where \,s_i and \,t_i is the source and sink of commodity \,i, and \,d_i is the demand. The flow of commodity \,i along edge \,(u,v) is \,f_i(u,v). Find an assignment of flow which satisfies the constraints:

Capacity constraints: \,\sum_{i=1}^{k} f_i(u,v) \leq c(u,v)
Flow conservation: \,\sum_{w \in V} f_i(u,w) = 0 \quad \mathrm{when} \quad u \neq s_i, t_i
\,\forall v, u,\, f_i(u,v) = -f_i(v,u)
Demand satisfaction: \,\sum_{w \in V} f_i(s_i,w) = \sum_{w \in V} f_i(w,t_i) = d_i

In the minimum cost multi-commodity flow problem, there is a cost a(u,v) \cdot f(u,v) for sending flow on \,(u,v). You then need to minimize

\sum_{(u,v) \in E} \left( a(u,v) \sum_{i=1}^{k} f_i(u,v) \right)

In the maximum multi-commodity flow problem, there are no hard demands on each commodity, but the total throughput is maximised:

\sum_{i=1}^{k} \sum_{w \in V} f_i(s_i,w)

In the maximum concurrent flow problem, the task is to maximise the minimal fraction of the flow of each commodity to its demand:

\min_{1 \leq i \leq k} \frac{\sum_{w \in V} f_i(s_i,w)}{d_i}

Relation to other problems

The minimum cost variant is a generalisation of the minimum cost flow problem. Variants of the circulation problem are generalisations of all flow problems.

Usage

Routing and wavelength assignment (RWA) in optical burst switching of Optical Network would be approached via multi-commodity flow formulas.

Solutions

In the decision version of problems, the problem of producing an integer flow satisfying all demands is NP-complete,[1] even for only two commodities and unit capacities (making the problem strongly NP-complete in this case).

If fractional flows are allowed, the problem can be solved in polynomial time through linear programming.[2] Or through (typically much faster) fully polynomial time approximation schemes.[3]

External resources

References

  1. Lua error in package.lua at line 80: module 'strict' not found.
  2. Lua error in package.lua at line 80: module 'strict' not found.
  3. Lua error in package.lua at line 80: module 'strict' not found.