MathLabs

応用数学と計算数学

離散最適化

スケジューリングや経路選択のように、有限または可算な選択肢の集合上で最適化を行う分野。

直観離散最適化とは何か

配送トラックの経路、シフトへの作業員の割り当て、資金を投じるプロジェクトの部分集合を選ぶ場面を想像してほしい。滑らかな曲線とは違い、ここでの選択は分割できない整数単位で決まる。トラックはある通りを通るか通らないか、作業員はシフトに入るか入らないかのどちらかである。離散最適化とは、連続的な曲線上を滑るのではなく、有限(または可算無限)個のnn個の離散的な可能性の集合の中から最良の選択を見つける数学である。

複数のノードと辺の中で強調表示された経路を示すネットワーク図。
配送ネットワーク:ノードは配送先、辺はコスト付きの道路を表す。強調された経路は、有限個の可能なルートの中から選ばれた一つの離散的な選択を示す。

中高連続から離散へ:整数解を選ぶ

定義: 整数線形計画(ILP)

整数線形計画とは、線形の目的関数 cTxc^T x を、線形制約 Ax≤bAx \le b のもとで最大化する問題であり、すべての決定変数は非負整数でなければならない: x∈Z≥0nx \in \mathbb{Z}^n_{\ge 0}。何台のトラックを購入するか、どのプロジェクトを選ぶかといった多くの現実の問題は本質的に整数であるため、連続な解を四捨五入するだけでは十分ではない。

max⁡ cTx s.t. Ax≤b, x∈Z≥0n\max\ c^T x \ \text{s.t.}\ Ax \le b,\ x \in \mathbb{Z}^n_{\ge 0}

ここで cTxc^T x は最大化したい目的値(利益、コスト、カバー率)であり、Ax≤bAx \le b は資源の制約(予算、容量、時間)をひとつの行列不等式にまとめたもの、そして x∈Z≥0nx \in \mathbb{Z}^n_{\ge 0} は解ベクトルのすべての座標が非負整数でなければならないことを表す。整数条件を外すと、以下のLP緩和が得られる。

max⁡ cTx s.t. Ax≤b, x∈R≥0n\max\ c^T x \ \text{s.t.}\ Ax \le b,\ x \in \mathbb{R}^n_{\ge 0}
ILP、LP緩和、分枝限定法の比較
手法実行可能集合計算量
整数計画x∈Z≥0nx \in \mathbb{Z}^n_{\ge 0}一般にNP困難
LP緩和x∈R≥0nx \in \mathbb{R}^n_{\ge 0}多項式時間(単体法・内点法)
分枝限定法LP緩和を部分問題に分割最悪指数時間だが実用上は高速

大学厳密な保証:最大流最小カット定理と分枝限定法の上界

非負の辺容量を持つ、始点 ss と終点 tt を持つ任意のフローネットワークにおいて、ss-tt フローの最大値は、あらゆる ss-tt カットの中での最小容量に等しい。

なぜ正しいのか?

この定理は、最大化問題(最大の流れを求める)を、それと等価な最小化問題(最小のボトルネックを求める)に変換する。そのため、一つのカットを示すだけで、その流れがすでに最適であることを即座に検証できる証明となる。これはLP双対性や分枝限定法での枝刈りを支える主双対の考え方と同じである。

証明

まず弱双対性を示す。ss が SS に、tt が TT に属する任意の ss-tt カット SS,TT と、任意の実行可能フロー ∣f∣|f| を考える。ss から出るすべての単位のフローは、最終的に tt に到達するために SS から TT へ渡らなければならず、保存則により、カットを横切る正味フローはフローの総量に等しい。TT から SS へ戻る辺はこの正味量を減らすことしかできないため、フロー値は SS から出る辺の容量の合計を決して超えない。すなわち任意のカットについて ∣f∣|f| は cap(S,T)\mathrm{cap}(S,T) 以下である。

次にFord-Fulkersonアルゴリズムを最後まで実行する:残余グラフ(残り容量とすでに送ったフローの逆転可能分)の中で ss から tt への経路を繰り返し見つけ、その経路上で最も細い辺が許す分だけフローを押し出す。容量は整数または有理数であり、使用するたびに経路上で真に減少するため、この過程は有限回の増加で終了する。

終了時には増加経路が存在しない。最終的な残余グラフで ss から到達可能なノードの集合を SS、残りを TT とする(到達する経路がないため、tt は TT に属する)。元のネットワークで SS から TT へのすべての辺は完全に飽和していなければならず(そうでなければ残余容量が残り、SS がさらに広がる)、TT から SS へのすべての辺のフローはゼロでなければならない(そうでなければその逆残余辺が SS を広げる)。

SS 内のすべてのノードについてフロー保存則を足し合わせると、総フロー値は飽和した順方向辺の容量の合計からゼロの逆方向フローを引いたものに正確に等しく、これはこのカットに対する cap(S,T)\mathrm{cap}(S,T) そのものである。最初の段落で示した上界と合わせると、このカットは達成可能な最小容量を実現しており、したがって最大フロー値は最小カット容量に等しい。

最大化型の整数線形計画に対して、そのLP緩和の最適値は整数計画の最適値の上界を与える。したがって分枝限定法は、ある部分問題のLP緩和による上界がこれまでに見つかった最良の整数解より良くない場合、真の最適解を決して取りこぼすことなく、その部分問題を破棄してよい。

なぜ正しいのか?

LP緩和を解くのは高速(多項式時間)であるため、これまでに見つかった最良の整数解と比較するための安価な上界を与える。ある枝がその上界を超えられないなら、それ以上探索するのは無駄な作業であり、これこそが大規模な整数計画に対して分枝限定法を実用的にしている理由である。

証明

整数実行可能集合を x∈Z≥0nx \in \mathbb{Z}^n_{\ge 0}、同じ制約 Ax≤bAx \le b に対する(より大きな)LP緩和の実行可能集合を x∈R≥0nx \in \mathbb{R}^n_{\ge 0} とする。整数条件を外すことは制約を減らすだけなので、整数実行可能な点はすべてLP実行可能でもあり、したがって整数実行可能集合はLP緩和の実行可能集合の部分集合である。

両方の問題が同じ線形目的関数 cTxc^T x を最大化し、整数計画の実行可能集合がLP緩和の実行可能集合に含まれるため、小さい集合上で達成できる最良値は大きい集合上で達成できる最良値を超えることはできない。したがってLP緩和の最適値は整数計画の最適値の上界となる。

分枝限定法は、現在のLP緩和解の中で分数値をとる変数を一つ選び、それぞれ x1≤1x_1 \le 1 または x1≥2x_1 \ge 2 を追加した二つの子部分問題を作ることで探索木を構築する。すべての整数実行可能点はこの二つの条件のどちらか一方を必ず満たすため、この分割によって整数解が失われることはなく、分割を繰り返しても空間は隙間なく分割され続ける。

各ノードで、その部分問題のLP緩和を解くと、より小さな制約集合に対して上と同じ議論を適用することで、その下でまだ到達可能なすべての整数解に対する上界が得られる。この上界が、木の中でこれまでに見つかった最良の整数解の値以下であれば、このノードのどの子孫もそれを改善できないため、木の他の場所で真の最適解が見つかることを保証したまま、この部分木全体を刈り取ってよい。

大学実世界での応用と具体例

離散最適化は現代社会の物流を支えている。航空会社は毎日乗務員スケジューリングのILPを解き、半導体メーカーはグラフ彩色や最大流の考え方を用いて配線を行い、配送会社が解く車両経路問題は本質的に整数計画上の分枝限定探索である。以下の二つの具体例で、LP緩和と分枝を組み合わせた手法、および最大流最小カットの手法が実際に働く様子を示す。

例: 小さなILPに対する分枝限定法

x1x_1 と x2x_2 を非負整数として、制約 2x1+x2≤52x_1 + x_2 \le 5 と x1+2x2≤5x_1 + 2x_2 \le 5 のもとで x1x_1 + x2x_2 を最大化せよ。

解答

ステップ1:LP緩和を解く。二つの制約はその交点で最も厳しくなる:2x1+x2=52x_1 + x_2 = 5 と x1+2x2=5x_1 + 2x_2 = 5 を連立させると x1=x2=53x_1 = x_2 = \frac{5}{3} が得られ、目的関数値は 103≈3.33\frac{10}{3} \approx 3.33 である。

ステップ2:LP最適解の x1x_1 は分数であるため、これで分枝する:一方の子は x1≤1x_1 \le 1 を、他方は x1≥2x_1 \ge 2 を追加する。

ステップ3:x1≤1x_1 \le 1 の枝では、制約により x1x_1 = 11 のとき x2x_2 は 22 まで押し上げられ、整数点 x1=1, x2=2x_1 = 1,\ x_2 = 2 が得られ、x1+x2=3x_1 + x_2 = 3 となる。

ステップ4:x1≥2x_1 \ge 2 の枝では、制約により x1x_1 = 22 のとき x2x_2 は 11 まで押し下げられ、整数点 x1=2, x2=1x_1 = 2,\ x_2 = 1 が得られ、同様に x1+x2=3x_1 + x_2 = 3 となる。

ステップ5:両方の枝がすでに同じ目的関数値を持つ整数解を与えているため、これ以上の分枝は不要である。ILPの最適値は 33 であり、定理が予言する通り、LP緩和の上界 103≈3.33\frac{10}{3} \approx 3.33 より真に小さい。

例: 小さな輸送ネットワークにおける最大流

ノード ss, a, b, tt からなるネットワークがあり、辺の容量は ss→a: 1010, ss→b: 55, a→b: 44, a→tt: 88, b→tt: 99 である。ss から tt への最大流を求めよ。

解答

ステップ1:ss→a→tt に沿ってフローを流す。ボトルネックは min⁡(10,8)=8\min(10,8)=8 なので 88 単位を送る。ss→a の辺には残り 22 単位の容量が残る。

ステップ2:ss→b→tt に沿ってフローを流す。ボトルネックは min⁡(5,9)=5\min(5,9)=5 なので 55 単位を送る。b→tt の辺には残り 44 単位が残る。

ステップ3:残った容量を使って ss→a→b→tt に沿ってフローを流す:min⁡(2,4,4)=2\min(2,4,4)=2 なので、さらに 22 単位を送る。これで ss から出る両方の辺が使い切られる。

ステップ4:送られた総フローは 8+5+2=158+5+2=15 である。

ステップ5:ss から出る両方の辺が飽和しているため、これ以上の増加経路は存在しない。ss だけを分離するカットの容量は 10+5=1510+5=15 であり、これは見つかったフローと一致する — 最大流最小カット定理により、これは 1515 が最適であることを確認する。

最大化型ILPのLP緩和の最適値が 42.342.3 であるとき、ILPの最適値について何が言えるか。

配送会社は、いくつかの候補ルートそれぞれについて使用するかしないかを決め、カバレッジ制約のもとで総コストを最小化したい。どの定式化が最も適切か。

あるフローネットワークにおいて、最小 ss-tt カットの容量が 1515 である。最大流の値はいくらか。

最大化型ILPに対する分枝限定法において、部分木をいつ刈り取るべきか。

参考文献

  1. Alexander Schrijver (2003). Combinatorial Optimization: Polyhedra and Efficiency
  2. Anna R. Karlin, Nathan Klein, Shayan Oveis Gharan (2021). A (Slightly) Improved Approximation Algorithm for Metric TSP · arXiv:2007.01409