2019年5月10日金曜日

TTPC 2015 N - 何かグラフの問題

TTPC 2015 N - 何かグラフの問題

最短経路問題の双対と、この問題のような通称「牛ゲー」を負閉路検出で解くことの間にはギャップがあって、理解できていないままになっていたのだけど、ようやくわかった。

前提を確認する。重み付きグラフ G:=(V,E,(ce)eE)G := (V, E, (c_e)_{e \in E}) とその頂点s,tVs, t \in Vが与えられたとし、次の問題をDual(s,t)\operatorname{Dual}(s, t)とする:

maximize xtxssubject to xwxvcee:=(v,w)E \begin{aligned} \text{maximize} & \: & x_t - x_s &\\ \text{subject to} & \: & x_w - x_v \le c_e & \qquad \forall e := (v, w) \in E \end{aligned}

Dual(s,t)\operatorname{Dual}(s, t)の双対問題をPrimal(s,t)\operatorname{Primal}(s, t)とすると、Primal(s,t)\operatorname{Primal}(s, t)は点ssからttへの最短経路問題になる。具体的には、E(v)E^-(v), E+(v)E^+(v)をそれぞれvvに入る辺、vvから出る辺とするとき、Primal(s,t)\operatorname{Primal}(s, t)は次のように書ける:

minimize eEceyesubject toeE(v)yeeE+(v)ye=0vV{s,t}eE(s)yeeE+(s)ye=1eE(t)yeeE+(t)ye=1ye0eE \begin{aligned} \text{minimize} & \: &\sum_{e \in E} c_e y_e \\ \text{subject to} & & \sum_{e \in E^-(v)} y_e - \sum_{e \in E^+(v)} y_e & = 0 & \qquad \forall v \in V \setminus \{s, t\} \\ & & \sum_{e \in E^-(s)} y_e - \sum_{e \in E^+(s)} y_e & = -1 \\ & & \sum_{e \in E^-(t)} y_e - \sum_{e \in E^+(t)} y_e & =1 \\ & & y_e & \ge 0 & \qquad \forall e \in E \end{aligned}

これはLP双対の定義に従って変形すれば確認できる。(ここは本題ではない。)

さて、『何かグラフの問題』やAsteroids2のような問題はDual(s,t)\operatorname{Dual}(s, t)によく似ているが、まったく同じというわけではない。違いは、これらが目的関数を持たず、実行可能性を判定する問題だということだ。目的関数をどう選んでも実行可能性は変わらないのだから、好きに選べばよいと思うかもしれないが、双対問題が関わるとそうはいかない。

  • 主問題が非有界 \Rightarrow 双対問題が実行不可能
  • 主問題が実行不可能 \Rightarrow 双対問題は実行不可能または非有界

だから、最短経路問題Primal(s,t)\operatorname{Primal}(s, t)が非有界であることとDual(s,t)\operatorname{Dual}(s, t)が実行不可能であることは一般に同値ではないのだ。では、何を解けばよいのか。

結論から言えば、実行可能性のみを判定したいときは、次の問題Dual0\operatorname{Dual}_0を解けばよい:

maximize 0subject to xwxvcee:=(v,w)E \begin{aligned} \text{maximize} & \: & 0 &\\ \text{subject to} & \: & x_w - x_v \le c_e & \qquad \forall e := (v, w) \in E \end{aligned}
最大化問題としては無意味だが、正しいLPである。このとき、Dual0\operatorname{Dual}_0の双対問題Primal0\operatorname{Primal}_0

minimize eEceyesubject toeE(v)yeeE+(v)ye=0vVye0eE \begin{aligned} \text{minimize} & \: &\sum_{e \in E} c_e y_e \\ \text{subject to} & & \sum_{e \in E^-(v)} y_e - \sum_{e \in E^+(v)} y_e = 0 & \qquad \forall v \in V \\ & & y_e \ge 0 & \qquad \forall e \in E \end{aligned}

となる。Primal0\operatorname{Primal}_0を観察すると、これはグラフGG最短閉路を探す問題であることがわかる。この際、閉路は1点につぶれていても良く、y:=0y := 0が常に実行可能解になっている。また、同じ辺を何回通ってもよい。したがって、グラフGGに負閉路があれば非有界(-\infty)であり、なければ0が最適解になるが、重要なのは「常に実行可能」の部分である。このために次の3つがそれぞれ同値になる:

  • グラフGが負閉路を持つ
  • Primal0\operatorname{Primal}_0が非有界である
  • Dual0\operatorname{Dual}_0が実行不可能である

したがって、GGの負閉路検出でDual0\operatorname{Dual}_0の実行可能性が判定できることになる。

参考:
http://www.me.titech.ac.jp/~mizu_lab/text/PDF-LP/LP2-dual.pdf
http://tokoharu.github.io/tokoharupage/docs/formularization.pdf