2019年5月10日金曜日

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

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

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

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

maximize xt−xssubject to xw−xv≤ce∀e:=(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 ∑e∈Eceyesubject to∑e∈E−(v)ye−∑e∈E+(v)ye=0∀v∈V∖{s,t}∑e∈E−(s)ye−∑e∈E+(s)ye=−1∑e∈E−(t)ye−∑e∈E+(t)ye=1ye≥0∀e∈E \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)が実行不可能であることは一般に同値ではないのだ。では、何を解けばよいのか。

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

maximize 0subject to xw−xv≤ce∀e:=(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である。このとき、Dual⁡0\operatorname{Dual}_0の双対問題Primal⁡0\operatorname{Primal}_0は

minimize ∑e∈Eceyesubject to∑e∈E−(v)ye−∑e∈E+(v)ye=0∀v∈Vye≥0∀e∈E \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}

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

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

したがって、GGの負閉路検出でDual⁡0\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