これは、複数商品フロー問題のバリエーションです。
これらの問題は、フローが整数である必要がある場合に特に解決が困難です。つまり、1 つのソースs_d
から 1 つのデマンドへのフローを からへt_d
の複数のパスに「分割」することはできません。s_d
t_d
これがあなたの問題の場合だと思います。つまり、1 つのソースから 1 つの宛先への複数のパスを介して gaz を送信できますが、これは「合理的」と思われます。
このトピックに関する広範な文献があり、主に整数バージョンまたは問題の非常に大きなインスタンス (通信ネットワークや輸送の問題で発生する) の解決に焦点を当てています。問題が小さい場合は、単純な線形ソルバーで十分です。
ネットワーク グラフは(E,V)
、質問のように示されます。有向頂点を想定しています。
それぞれが source 、 destination 、 valueである一連D
の要求を考えます。この値を最大化する特定の需要を除いて、値は定数です。させて:d in D
s_d
t_d
V_d
V_d
d0
c^{min}_e
エッジの最大容量e in E
c^{max}_e
そのような容量を持つエッジe
のサブセット内のエッジの最小容量E'
のノードのv
場合V
:
delta_{vd}
の場合は 1、 の場合v = t_d
は -1、v = s_d
それ以外の場合は 0
E^+_v
は頭のある辺の集合ですv
E^-_v
テール付きのエッジのセットですv
各エッジe
と各需要に対して、エッジを通過するフローの量を表すd
変数を導入します。x_{ed}
d
e
問題は、次の形式の線形 (連続) モデルとして記述できます。
maximize V_{d0} on x and V_{d0}
subject to:
// flow constraints
forall v in V, d in D:
sum_{e in E^+_v x_{ed} - sum_{e in E^-_v} x_{ed} = V_d delta_{vd}
// max capacity constraints
forall e in E:
sum_{d in D} x_{ed} <= c^{max}_e
// min capacity constraints
forall e in E':
sum_{d in D} x_{ed} >= c^{min}_e
// bound constraints on the variable `x`
forall d in D, forall e in E:
0 <= x_{ed} <= V_d