最小費用流問題(さいしょうひようりゅうもんだい、最小費用フロー問題、、略称:MCFP)とは、フローネットワークにおいてある与えられた量のフローを流すとき、最も費用がかからないものを求める最適化・決定問題である。最小費用流問題の主な応用例としては道路網に容量と費用が付随した中での工場から倉庫までの最適な配送経路を求める事例が挙げられる。多くのフローや循環に関する問題は最小費用流問題として定式化することができ、それをネットワーク単体法を用いて効率良く解くことができるため、最小費用流問題は最も基本的な問題の一つとして挙げられる。
定義 フローネットワークでは有向グラフ および始点となる頂点 と、終点となる頂点 が与えられる。ただし、各辺 に対して正の値をとる容量 とフロー量 、費用 が定義され、最小費用流問題に対するアルゴリズムでは非負の費用であることが求められる。辺 にフローを流すときにかかる費用は によって求まる。この問題は始点 から終点 へフロー を流すことを考える。
最小費用流問題で求めることはすべての辺においてフローを流すときにかかる費用の総和の最小化である。
これを達成するために、守らなければならない条件(制約条件)は:
| 容量制約: || |- | 流量保存則: || |- | 始終点に関する制約: || |- | フロー需給量制約: ||
他の問題との関連性 最小費用流問題の類似問題としてはフローネットワークにおいて最大流を流すときに、その中で最も費用が掛からないものを求める問題が挙げれられる。これは最小費用最大流問題として知られ、最小費用の下で最大マッチングを求めるために利用されている。
最小費用最大流問題はいくつかの解法によって、多くの問題に対して効率よく最小費用最大流を求めることができる。そうでない場合は、二分探索によってある の下での最小費用流を解いていくことで、最小費用最大流を求めることができる。
以下の問題は最小費用流問題の特殊な問題として知られている: (単一の始点をもつ)最短経路問題: 始点 から終点 へ単一のフローを流すときにかかる費用が最小の解を求めることと等しい。なお、各辺の容量は無限であると仮定する。 最大流問題: 十分に大きな需要量 を与える( は始点から出る辺の容量の総和を超すようなフロー量などフローネットワークでの最大流より十分に大きなものとする)。そして、各辺の費用をすべてゼロとする。また、始点から終点へ単位費用と の容量を持つ辺を新たに加える。 : 二つに分けられた部分集合がそれぞれ 個の頂点を持っているとする。また、二つの部分集合を と記述する。各 では供給量 を持ち、各 においては需要量 を持つとする。各辺は単位容量を持つとする。
解法 最小費用流問題は線形で表される制約の下で線形関数の最適化を行うため、線形計画法により解くことができる。
これ以外にも多くの厳密解法が知られている。いくつかの解法は最大流問題に対する解法を一般化させたものではあるが、異なるアプローチにより提案された解法も存在している。
(変種も含めた)一般的に知られているアルゴリズムは以下が挙げられる: 負閉路消去法(Cycle canceling): 一般的に知られている解法で主(プライマル)法に分類される。 カット消去法(Cut canceling): 双対法に分類される解法で、一般的に知られている。 最小平均閉路消去法(Minimum mean cycle canceling): 単純な解法でで実行できる。 逐次最短路法(最短路繰り返し法、Successive shortest path)・容量スケーリング法(capacity scaling): 最大流問題に対するフォード・ファルカーソン法を一般化させた解法で、双対法に分類される。 費用スケーリング法(Cost scaling): 最大流問題に対するプリフロープッシュ法を一般化させた解法であり、主双対法に分類される。 ネットワーク単体法(ネットワークシンプレックス法、Network simplex algorithm): 線形計画法に対する単体法を最小費用流問題に特化させた解法。 アウトオブキルタ法(Out-of-kilter algorithm): により提案された。
脚注
注釈
出典
参考文献
関連項目
ネットワークフロー問題
外部リンク LEMON C++ライブラリでは複数の最小費用流問題に対する解法が提供されている。 MCFClass C++プロジェクトライブラリでは複数の最小費用流および最短経路問題に対する解法が提供されている。