TTPC 2015 N - 何かグラフの問題
最短経路問題の双対と、この問題のような通称「牛ゲー」を負閉路検出で解くことの間にはギャップがあって、理解できていないままになっていたのだけど、ようやくわかった。
前提を確認する。重み付きグラフ G:=(V,E,(ce)e∈E) とその頂点s,t∈Vが与えられたとし、次の問題をDual(s,t)とする:
maximizesubject toxt−xsxw−xv≤ce∀e:=(v,w)∈E
Dual(s,t)の双対問題をPrimal(s,t)とすると、Primal(s,t)は点sからtへの最短経路問題になる。具体的には、E−(v), E+(v)をそれぞれvに入る辺、vから出る辺とするとき、Primal(s,t)は次のように書ける:
minimizesubject toe∈E∑ceyee∈E−(v)∑ye−e∈E+(v)∑yee∈E−(s)∑ye−e∈E+(s)∑yee∈E−(t)∑ye−e∈E+(t)∑yeye=0=−1=1≥0∀v∈V∖{s,t}∀e∈E
これはLP双対の定義に従って変形すれば確認できる。(ここは本題ではない。)
さて、『何かグラフの問題』やAsteroids2のような問題はDual(s,t)によく似ているが、まったく同じというわけではない。違いは、これらが目的関数を持たず、実行可能性を判定する問題だということだ。目的関数をどう選んでも実行可能性は変わらないのだから、好きに選べばよいと思うかもしれないが、双対問題が関わるとそうはいかない。
- 主問題が非有界 ⇒ 双対問題が実行不可能
- 主問題が実行不可能 ⇒ 双対問題は実行不可能または非有界
だから、最短経路問題Primal(s,t)が非有界であることとDual(s,t)が実行不可能であることは一般に同値ではないのだ。では、何を解けばよいのか。
結論から言えば、実行可能性のみを判定したいときは、次の問題Dual0を解けばよい:
maximizesubject to0xw−xv≤ce∀e:=(v,w)∈E
最大化問題としては無意味だが、正しいLPである。このとき、Dual0の双対問題Primal0は
minimizesubject toe∈E∑ceyee∈E−(v)∑ye−e∈E+(v)∑ye=0ye≥0∀v∈V∀e∈E
となる。Primal0を観察すると、これはグラフGの最短閉路を探す問題であることがわかる。この際、閉路は1点につぶれていても良く、y:=0が常に実行可能解になっている。また、同じ辺を何回通ってもよい。したがって、グラフGに負閉路があれば非有界(−∞)であり、なければ0が最適解になるが、重要なのは「常に実行可能」の部分である。このために次の3つがそれぞれ同値になる:
- グラフGが負閉路を持つ
- Primal0が非有界である
- Dual0が実行不可能である
したがって、Gの負閉路検出でDual0の実行可能性が判定できることになる。
参考:
http://www.me.titech.ac.jp/~mizu_lab/text/PDF-LP/LP2-dual.pdf
http://tokoharu.github.io/tokoharupage/docs/formularization.pdf