牛ゲーが最短経路問題で解けることの説明
牛ゲーが最短経路問題で解けることの説明
本記事では、牛ゲーが最短経路問題に帰着できることを説明したいと思います。
「こうすれば解けるのはわかったけど、なんで?」という人向けの説明になっています。
数理最適化の言葉を使って記述します。
対象読者
- 数理最適化についての基礎を知っている人
- 使う定理のステートメントは記載します
- 牛ゲーという言葉は知っている人
- 蟻本の牛ゲーの説明がピンとこなかった人
準備
牛ゲーとは
牛ゲーという言葉はPOJ 3169 - Layoutという問題が起源となっているようです。
問題文から数理的な構造だけを取り出すと以下のようになります。説明のため元の問題から記号を置き換えている部分があります。
数直線上に
このとき以下の制約を満たす必要があります。
d_i \leq d_{i+1} \ (i = 1, \ldots, N-1) - 三つ組
(但し(u,v,c) )で表現される以下のu < v 個の制約を満たす。M d_v - d_u \leq c
- 三つ組
(但し(u,v,c) )で表現される以下のu < v 個の制約を満たす。L d_v - d_u \geq c
以上のもと、
そのような配置が存在しない場合は
ここでは、この問題を定式化すると現れる線形計画問題のことを牛ゲーと呼称することとします。
定式化
上で与えられた制約を少し整理します。
また、
以上のことから、牛ゲーの制約式は
d_{v_i} - d_{u_i} \leq c_i \ \ (i = 1, \ldots, N+M+L)
ここまでの議論を元に、線形計画問題の形で牛ゲーを表現します。
そのために、改めて
{\bf d} := (d_1, d_2, \ldots, d_{N-1}, d_N)^{\mathrm{T}} \in \mathbb{R}^N {\bf b} := (-1, 0, \ldots, 0, 1)^{\mathrm{T}} \in \mathbb{R}^N {\bf c} := (c_1, c_2, \ldots, c_M)^{\mathrm{T}} \in \mathbb{R}^M
但し、
最後に行列
これらを使うことで、牛ゲーは以下のように表現されます。変数は
牛ゲーの双対問題
上で作った問題は線形計画問題と呼ばれる問題です。線形計画問題には自身に対応する双対問題と呼ばれる問題が必ず存在します。これは数理最適化において重要な概念です。ここでは必要以上に深くは触れませんが、気になる方は調べてみてください。
ちなみにそのような双対問題に対して、元となる問題のことを主問題と呼びます。
というわけで、先ほど作った問題の双対問題を作ろうと思います。主問題が与えられれば双対問題は機械的に導出できます。具体的にはこのPDFが参考になります。
以下がその問題です。今度の変数は
牛ゲーと最短経路問題の関係
双対問題の意味づけ
準備の項では牛ゲーを線形計画問題として記述し、その双対問題を導きました。
実は、この双対問題こそが最短経路問題になっているのです。具体的には以下のような問題設定の最短経路問題になっています。
頂点 N 辺の有向グラフが与えられる。各頂点は M と番号づけられている。各辺は 1, 2, \ldots, N-1, N から u_i に向かって伸びており、コストは v_i である。 c_i
頂点から頂点 1 までの最小コストはいくつか? N
これだけ言われても「本当?」という気持ちがぬぐえないと思うので、ここからは数式と照らし合わせて見ていきましょう。
まず目的関数を見ます。
そして最小化すべきは
2021-12-29追記
上の議論では
具体的にはこのPDFで挙げられている定理
正確な記述はPDFを見てほしいのですが、ざっくりとしたステートメントは 線形計画問題の係数行列が完全単模行列で、定数項ベクトルが整数ならば、整数ベクトルによる最適解が存在する、というものです。
完全単模行列とは任意の小行列式の値が
今回の問題に合わせると
追記ここまで。noshi91さんにご指摘いただきました。ありがとうございました。
次に制約を見ていきます。
これは
それと
最後に右辺側の
それが制約として課されているため、
2021-12-29追記
そのため厳密にはこれは最短経路問題にはなっていませんが、実用上は最短経路問題と考えてよいです。以下でそのことについて説明します。
後述しますが、この問題の最適値が必要になるケースでは負閉路が存在しないと仮定してよいです。(負閉路を持つ場合は牛ゲーの解は存在しません)
実行可能解は必ず
以上のことから、牛ゲーの文脈でこの問題を最短経路問題だと考えても問題ないことが分かります。
追記ここまで。noshi91さんにご指摘いただきました。ありがとうございました。
以上のことをまとめると、上の双対問題が最短経路問題であることがわかっていただけると思います。
なぜ牛ゲーが最短経路問題に帰着できるのか
この項ではなぜ牛ゲーが最短経路問題に帰着されるのか、ということについて述べていきます。
帰着できるのを示すために双対定理という強い定理を使います。
これは、主問題が最適解を持つならば双対問題も最適解を持ち、その最適値は等しいという強力な定理です。
つまり牛ゲーの双対問題が最短経路問題であることから、最短経路問題の最適値が牛ゲーの最適値にもなります。
双対定理の結果は主問題が最適解を持たなければ使えません。そのため、最適解を持たない場合については別個考える必要があります。
数理最適化において最適解を持たない場合というのは二つあります。一つは実行不可能な場合で、解となるような要素が一個もない場合です。もう一つは最適値が非有界な場合で、いくらでも解を大きく(最小化問題の場合は小さく)できる場合です。
最短経路問題が非有界の場合
主問題が非有界ならば双対問題は実行不可能である、という定理があります。双対問題の双対問題は主問題なので、双対問題が非有界ならば主問題は実行不可能であることも言えます。
最短経路問題の解が無限に大きくなる場合は負閉路がある場合です。このとき牛ゲーの解は存在せず、実行不可能になります。
最短経路問題が実行不可能な場合
最短経路問題が実行不可能である場合、つまり頂点
最適解を持つことはありえません。これは双対定理から言えます。
少し考えてみたのですが、この二つを最短経路問題だけを考えて識別するのは無理な気がします。
実際に牛ゲー側の問題で一つ解を構築できれば実行不可能ではないことが分かり、識別ができます。
2021-12-29追記
noshi91さんに教えていただきました。
主問題の目的関数を置き換えることで双対問題の制約を少し変更し、主問題の実行不可能性を導いています。
こちらでもう少し詳しく説明します。
もし負閉路を含めば
実行可能性は制約にのみ依存し、
また、
これによって 最短経路問題におけるグラフが負閉路を持つならば元の主問題が実行不可能であることがわかりました。
以上のことを踏まえると、最短経路問題が実行不可能な場合の牛ゲーの状態は以下のようになります。
- 負閉路を持つならば実行不可能
- 持たなければ非有界
まとめ
noshi91さんのこのツイートの通りです。
上のツイートが消えたときのためにも簡単にまとめておくと、以下のようなことが言えます。逆も成立しています。
- 双対問題におけるグラフが負閉路を持てば主問題は実行不可能
- 双対問題におけるグラフが負閉路を持たず、1-Nパスが存在しなければ主問題は非有界
- 双対問題におけるグラフが負閉路を持たず、1-Nパスが存在すれば主問題も最適解を持つ
(おまけ)最短経路問題の言葉で牛ゲーを説明する
さて、牛ゲーが解けることはわかりました。ただ、双対定理という超強力な道具でぶん殴っただけなのでどうも気持ち悪いですね。牛ゲーは最短経路問題の双対問題なわけですから、牛ゲーの条件式も最短経路問題において意味を持つ形になっているはずです。
元の問題は"到達可能な時間の最小化"でした。これの双対ということなので、直感的には"到達不可能な時間の最大化"を表していると思えます。例えば最短経路のコストが
まとめ
久々に(Zennでは初めて)記事を書きました。数学をバリバリ使ったのも久しぶりなので、何か変なところ等があればご指摘ください。
お読みいただきありがとうございました。
Discussion