双対性
JOI春合宿 2018
岩田 陽一 (NII)
2
自己紹介
 東大情報科学科→情報理工(2016年3月博士卒)
 国立情報学研究所 助教
 離散アルゴリズムの研究をしている
世界 1 位 (2010)
世界 2 位 (2011)
世界 3 位 (2009)3回優勝
(2013,2015,2016)
競プロ: wata Twitter: @wata_orz
ICFPC
(最適化問題の)双対性とは?
3
(強)双対性
 「〇〇の最小値=□□の最大値」という形の定理
効率的に解ける様々な組合せ最適化問題の背後に
隠れている
 「〇〇を最小化せよ」という問題を直接解く代わりに、
□□を最大化すれば良い
→解ける問題の範囲が広がる
 ○○と□□の解のペアで値が等しいものを手に入れ
たら、それぞれ最小値・最大値であると確信出来る
→アルゴリズムを考える・正しさの証明に便利
4
最適化問題
例:最小𝑠-𝑡カット問題
最小何本の辺を取り除けば𝑠-𝑡パスが無くなるか?
5
s t
min
𝑥∈𝑃
𝑓(𝑥)
𝑃の範囲で𝑓(𝑥)を最小化せよ
判定問題
Yes の場合には簡単に検証可能な「証明」が存在
(𝑥を実際に与えれば良い)
⇒ NP (Non-deterministic Polynomial time)と言う
6
min
𝑥∈𝑃
𝑓(𝑥) ≤ 𝑘?
𝑓 𝑥 ≤ 𝑘 となる 𝑥 ∈ 𝑃 があるか
s t
2本は可能?
はい。この2本を取
り除けば良いです。
補問題
No の場合に簡単に検証可能な「証明」は存在?
⇒ 存在するような問題は co-NP と言う
7
min
𝑥∈𝑃
𝑓(𝑥) ≤ 𝑘?
𝑓 𝑥 ≤ 𝑘 となる 𝑥 ∈ 𝑃 があるか
s t
1本は不可能?
多分出来ないと思う
けど・・・
P ⊆ NP ∩ co-NP
Noを示すもっと簡単な証明はないだろうか?
8
P
NP co-NP
s t
1本は不可能?
最小値を計算したら
2だったので無理です
多項式時間で解ける(P)ならば
アルゴリズムの実行自体が効率
的に検証可能な証明といえる。
最大流=最小カット
最大𝑠-𝑡フロー問題
最大何個の辺を共有しない𝑠-𝑡パスを選べるか?
任意の 𝑠-𝑡フロー 𝐹 = {𝑃1, … , 𝑃𝑓} と 𝑠-𝑡 カット 𝐶 に対し、
|𝐹| ≤ |𝐶| が成り立つ。(∵ 𝐸 𝑃𝑖 ∩ 𝐶 ≠ ∅)
実は、max |𝐹| = min |𝐶| が成り立つ。
9
s t
1本は不可能?
この2本のパスがあ
るので無理です。
双対問題
min
𝑥∈𝑃
𝑓 𝑥 = max
𝑦∈𝑄
𝑔(𝑦)
となるように 𝑄, 𝑔 を設計出来れば、𝑦を与えることでNo
が証明可能!
10
min
𝑥∈𝑃
𝑓(𝑥)
𝑃の範囲で𝑓(𝑥)を最小化せよ
max
𝑦∈𝑄
𝑔(𝑦)
𝑄の範囲で𝑔(𝑦)を最大化せよ
一致
𝑓(𝑥)の範囲
𝑔(𝑦)の範囲
よくあるパターン
1. 𝑓 𝑥 ≥ 𝑔(𝑦) (∀𝑥 ∈ 𝑃, ∀𝑦 ∈ 𝑄) が簡単に示せる
2. アルゴリズムの停止時に 𝑓 𝑥 = 𝑔(𝑦) となる 𝑥 ∈ 𝑃
と 𝑦 ∈ 𝑄 が得られることが示せる
→ 強双対定理とアルゴリズムの正当性が導かれる
11
(強)双対定理
min
𝑥∈𝑃
𝑓(𝑥) = max
𝑦∈𝑄
𝑔(𝑦)
扱う内容
1. 双対LP
2. 最短路・負閉路
3. 最小費用流
4. ラグランジュ双対
 最小費用流などのアルゴリズムの解説はしない
 双対を考えることでどんな問題が解けるようになる
のかの解説がメイン
12
更に勉強したい人向け参考書
 ネットワークフロー入門(JOI 2014-2015 春合宿)
 保坂和宏、http://hos.ac/slides/20150319_flow.pdf
• 最大流・最小費用流の入門に
 プログラミングコンテストチャレンジブック
 秋葉拓哉、岩田陽一、北川宜稔
• 競プロ向け最大流・最小費用流の基礎と応用例
 離散凸解析と最適化アルゴリズム
 室田一雄、塩浦昭義
• 最適化アルゴリズムを離散凸という観点から一般化
 Graphs, Networks and Algorithms
 D. Jungnickel
• フローの色々なアルゴリズムが載ってる
 Combinatorial Optimization
 A. Schrijver
• 3部からなる超大作(オススメ)
13
双対LP
14
線形計画問題(LP: Linear Programming)
 目的関数と制約が全て一次式な連続最適化問題
 整数性条件は無し
 多項式時間で解ける
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4
−2𝑥1 + 𝑥2 ≤ 2
𝑥1 ≤ 3
𝑥1, 𝑥2 ≥ 0
15
Max =
22
3
𝒙 =
2
3
,
10
3
本当に最大?
解の上界を示す
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (1)
−2𝑥1 + 𝑥2 ≤ 2 (2)
𝑥1 ≤ 3 (3)
𝑥1, 𝑥2 ≥ 0
(1) + (2) + 2(3): 𝑥1 + 2𝑥2 ≤ 12
2 1 : 𝑥1 + 2𝑥2 ≤ 2𝑥1 + 2𝑥2 ≤ 8
5
3
1 +
1
3
(2): 𝑥1 + 2𝑥2 ≤
22
3
16
22
3
より大は無理
解の上界を示す
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (1)
−2𝑥1 + 𝑥2 ≤ 2 (2)
𝑥1 ≤ 3 (3)
𝑥1, 𝑥2 ≥ 0
より一般に、(1)を𝑦1倍、(2)を𝑦2倍、(3)を𝑦3倍して足すと、
𝑦1 − 2𝑦2 + 𝑦3 𝑥1 + 𝑦1 + 𝑦2 𝑥2 ≤ 4𝑦1 + 2𝑦2 + 3𝑦3
17
解の上界を示す
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (1)
−2𝑥1 + 𝑥2 ≤ 2 (2)
𝑥1 ≤ 3 (3)
𝑥1, 𝑥2 ≥ 0
より一般に、(1)を𝑦1倍、(2)を𝑦2倍、(3)を𝑦3倍して足すと、
𝑦1 − 2𝑦2 + 𝑦3 𝑥1 + 𝑦1 + 𝑦2 𝑥2 ≤ 4𝑦1 + 2𝑦2 + 3𝑦3
目的関数: 1𝑥1 + 2𝑥2
18
≥
≥
2つの ≥ が成り立てば、
右辺が最大値の上界
双対LP
出来るだけ良い上界を示す問題もLPとなる。
19
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (× 𝑦1)
−2𝑥1 + 𝑥2 ≤ 2 (× 𝑦2)
𝑥1 ≤ 3 (× 𝑦3)
𝑥1, 𝑥2 ≥ 0
minimize 4𝑦1 + 2𝑦2 + 3𝑦3
subject to 𝑦1 − 2𝑦2 + 𝑦3 ≥ 1
𝑦1 + 𝑦2 ≥ 2
𝑦1, 𝑦2, 𝑦3 ≥ 0
双対
主問題
双対問題
双対LP
出来るだけ良い上界を示す問題もLPとなる。
もう一回双対を取ると元に戻る。
20
maximize 𝑥1 + 2𝑥2
subject to 𝑥1 + 𝑥2 ≤ 4 (× 𝑦1)
−2𝑥1 + 𝑥2 ≤ 2 (× 𝑦2)
𝑥1 ≤ 3 (× 𝑦3)
𝑥1, 𝑥2 ≥ 0
minimize 4𝑦1 + 2𝑦2 + 3𝑦3
subject to 𝑦1 − 2𝑦2 + 𝑦3 ≥ 1 (× 𝑥1)
𝑦1 + 𝑦2 ≥ 2 (× 𝑥2)
𝑦1, 𝑦2, 𝑦3 ≥ 0
双対 双対
主問題
双対問題
強双対性
21
maximize 𝒄𝒙
subject to 𝐴𝒙 ≤ 𝒃
𝒙 ≥ 𝟎
minimize 𝒃𝒚
subject to 𝐴T 𝒚 ≥ 𝒄
𝒚 ≥ 𝟎
=
 双対LPの意味(制約の線形和で出来るだけ良い上
界・下界を示す)さえ理解すれば簡単に双対が取れ
るので標準形を暗記する必要はない。
 双対LPの作り方から ≤ は明らかだが、実は常に等号
が成立する (強双対性)
 もしくは (∞, 解なし)、(解なし、 − ∞)
 ただし、等号が成立する整数解があるとは限らない
標準形
他の標準形
(標準形を暗記するより意味を理解しよう)
→: 等号なので、負の係数をかけて足しても良い
 𝒂𝒙 ≤ 𝑏 を −1 倍したら −𝒂𝒙 ≥ −𝑏 で不等号が逆に
←: 非負制約がないので、係数は一致させないとダメ
 𝒚 ≥ 𝟎 ならば、𝒃′ ≤ 𝒃 から 𝒃′ 𝒚 ≤ 𝒃𝒚 が言える
22
maximize 𝒄𝒙
subject to 𝐴𝒙 = 𝒃
𝒙 ≥ 𝟎
minimize 𝒃𝒚
subject to 𝐴T 𝒚 ≥ 𝒄
𝒚 ≥ 𝟎
=
LP双対ゲーの解き方
二通りの方針
1. とりあえずLPで書いてみてから双対を取り、知ってる
問題じゃないか考える
 ダメなLPを書くとうまくいかないので結構試行錯誤が必要
2. 双対問題の形を予め覚えておいて、その形になるよ
うに定式化
 多くの場合こっちの方が簡単
23
例題: Min-Max (出典: POJ Monthly)
𝑛 (≤ 50000)次元の非負実数ベクトル (𝜇1, … , 𝜇 𝑛) が
あり、 σ𝑖 𝜇𝑖 = 1 を満たしている。2つのベクトル 𝑝, 𝑞 と
実数𝐶が与えられる。σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 であるとき、σ𝑞𝑖 𝜇𝑖 の
取りうる値の最小値・最大値を求めよ。
24
http://poj.org/problem?id=2595
例題: Min-Max (出典: POJ Monthly)
最小値を求める問題をLPで書くと、
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖
σ𝑖 𝜇𝑖 = 1
σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶
𝜇𝑖 ≥ 0
双対LPを作ってみると、
25
例題: Min-Max (出典: POJ Monthly)
最小値を求める問題をLPで書くと、
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖
σ𝑖 𝜇𝑖 = 1
σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶
𝜇𝑖 ≥ 0
双対LPを作ってみると、
max
𝑥,𝑦
𝑥 + 𝐶𝑦
𝑥 + 𝑝𝑖 𝑦 ≤ 𝑞𝑖 (× 𝜇𝑖)
26
× 𝑥
(× 𝑦)
例題: Min-Max (出典: POJ Monthly)
max
𝑥,𝑦
𝑥 + 𝐶𝑦
𝑥 + 𝑝𝑖 𝑦 ≤ 𝑞𝑖
これは、二次元の多角形内部で、(1, 𝐶)方向に一番遠
い点を求める問題。多角形を𝑂(𝑛 log 𝑛)で構築して端
点を全て調べれば良い。
27
実は定数次元のLPは線形時間で
解けることが知られている。
(Seidel’s LP algorithm など)
まとめ
 双対LPを構築出来るようになろう
 制約式の線形和で出来るだけ良い上界(下界)を
作る、ということだけ覚えておけば自然に作れる
 LPでは強双対性が成り立ち、双対LPを解くことで元の
LPも解ける
 ただし、整数解で成り立つとは限らないので注意
 LPで書ける問題は、そのままだと解き方が分からなく
ても、双対を取ってみると知ってる問題になるかも
28
最短路・負閉路
29
𝒔-𝒕最短路問題をLPで書いてみる
辺 𝑒 を通る回数を表す変数 𝑓𝑒
𝑤𝑒 ≔ 辺𝑒の長さ
𝛿+ 𝑣 ≔ 𝑣から出る辺集合、𝛿− 𝑣 ≔ 𝑣へ入る辺集合
𝑓 𝐹 ≔ σ 𝑒∈𝐹 𝑓𝑒
minimize σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
subject to 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = ൞
−1 (𝑣 = 𝑠)
1 (𝑣 = 𝑡)
0 (otherwise)
𝑓𝑒 ≥ 0 (∀𝑒 ∈ 𝐸)
(注意:負の閉路があると最小値は − ∞になる)
30
𝑣
𝛿−
(𝑣) 𝛿+(𝑣)
双対LP
minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
s.t. 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = ൞
−1 𝑣 = 𝑠 (× 𝑝𝑠)
1 𝑣 = 𝑡 (× 𝑝𝑡)
0 otherwise (× 𝑝 𝑣)
𝑓𝑒 ≥ 0
maximize 𝑝 𝑝𝑡 − 𝑝𝑠
s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 (× 𝑓𝑢𝑣)
31
= ただし、整数解で一致するとは
まだ言っていない
目的関数・制約ともに「二変数の差」の形
二変数の差が現れたら双対ゲーを疑おう!
距離関数
𝑠から𝑣への最短距離を𝑝 𝑣とすると、
1. 𝑝𝑡 − 𝑝𝑠 = 𝑠−𝑡最短路の長さ
2. ∀𝑢𝑣 ∈ 𝐸に対して、𝑝 𝑣 ≤ 𝑝 𝑢 + 𝑤 𝑢𝑣
が成り立つので、𝑝は双対LPの最適解である。つまり、
 最短路アルゴリズムで双対LPが解ける。
 𝑤が整数なら整数解が求まる。
ただし、負閉路がある場合に注意
32
maximize 𝑝 𝑝𝑡 − 𝑝𝑠
s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
負閉路検出
負閉路にそって𝑓𝑒を増やすことで、主問題の解は幾らで
も小さくなるので、双対問題は解なしとなる。つまり、
を満たす𝑝が存在する⇔負閉路が存在しない。
そのような𝑝は「ポテンシャル」と呼ばれる。
 最適化の場合も、通常の最短路アルゴリズムだと𝑠から到
達不能な負閉路を見逃すので注意が必要。
 Bellman-Fordで𝑑 𝑠 = 0, 𝑑 𝑣 = 𝐷(十分大きな値)から開始す
れば良い。
33
𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
解ける問題
 目的関数が 𝑝𝑡 − 𝑝𝑠 の形
 𝑠 から 𝑡 への最短距離を求める
 制約が全て 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 の形
 𝑢 から 𝑣 へ長さ 𝑤 𝑢𝑣 の辺を張る
 𝑤 𝑢𝑣 ≤ 𝑝 𝑣 − 𝑝 𝑢 の形も 𝑝 𝑢 − 𝑝 𝑣 ≤ −𝑤 𝑢𝑣 と書けるので 𝑣 か
ら 𝑢 へ長さ −𝑤 𝑢𝑣 の辺を張れば良い
Bellman-Fordの更新式を思い出せばグラフは自然に作れる
𝑑 𝑣 ← min(𝑑 𝑣, 𝑑 𝑢 + 𝑤 𝑢𝑣) だから停止時に 𝑑 𝑣 ≤ 𝑑 𝑢 + 𝑤 𝑢𝑣 が成立
34
maximize 𝑝 𝑝𝑡 − 𝑝𝑠
s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
「二変数の差」を作る頻出テク
1. 絶対値上限制約: 𝑝 𝑢 − 𝑝 𝑣 ≤ 𝑤 𝑢𝑣
 −𝑤 𝑢𝑣 ≤ 𝑝 𝑢 − 𝑝 𝑣 ≤ 𝑤 𝑢𝑣
2. 一変数制約: 𝑝𝑖 ≤ 𝑤𝑖
 新しい変数 𝑝0 を導入し、全ての変数𝑝𝑗を𝑝𝑗 − 𝑝0
で置き換えると、𝑝𝑖 − 𝑝0 ≤ 𝑤𝑖 となる
 既存の二変数制約 𝑝𝑗 − 𝑝𝑖 ≤ 𝑤𝑖𝑗 は変化しない
3. 二部グラフ
 𝑥𝑖 + 𝑦𝑗 型のときは、全ての𝑦の符号を反転させる
ことで、𝑥𝑖 − 𝑦𝑗型になる
 グリッドグラフとかで頻出
35
「二変数の差」を作る頻出テク
4. 区間の和: 𝑥𝑖 + 𝑥𝑖+1 + ⋯ + 𝑥𝑗 ≤ 𝑤𝑖𝑗
 𝑝𝑖 − 𝑝0 ≔ 𝑥1 + ⋯ + 𝑥𝑖 とおくと、𝑝𝑗 − 𝑝𝑖−1 ≤ 𝑤𝑖𝑗
5. 円形区間和: 𝑥𝑖 + 𝑥𝑖+1 + ⋯ + 𝑥 𝑛 + 𝑥1 + ⋯ + 𝑥𝑗
 総和 𝑆 ≔ 𝑥1 + ⋯ + 𝑥 𝑛 を全通り試す・二分探索
などにより固定し、制約 𝑥1 + ⋯ + 𝑥 𝑛 = 𝑆 を追加
 𝑆 − (𝑥𝑗+1 + ⋯ + 𝑥𝑖−1) と通常の区間和になる
(𝑆は変数でなく定数なことに注意)
36
= −
例題: Asteroids2 (出典: UTPC 2013)
https://utpc2013.contest.atcoder.jp/tasks/utpc2013_08
𝑁次元ベクトル𝑝, 𝑞と 𝑁 × 𝑁行列𝐴, 𝐵 が与えられるので
0 ≤ 𝑢𝑖 ≤ 𝑝𝑖 𝑖 ∈ 𝑁
0 ≤ 𝑣𝑗 ≤ 𝑞 𝑗 (𝑗 ∈ [𝑁])
𝐴𝑖𝑗 ≤ 𝑢𝑖 + 𝑣𝑗 ≤ 𝐵𝑖𝑗 𝑖, 𝑗 ∈ N
を満たす整数ベクトル 𝑢, 𝑣 が存在するか判定せよ。
37
∞
−∞
3
2
1
1
7
5
3
1 2
4
No
例題: Asteroids2 (出典: UTPC 2013)
新たに変数𝑠を導入し、𝑢𝑖 → 𝑢𝑖 − 𝑠, 𝑣𝑖 → 𝑠 − 𝑣𝑖 と置き
直すと、
0 ≤ 𝑢𝑖 − 𝑠 ≤ 𝑝𝑖 𝑖 ∈ 𝑁
0 ≤ 𝑠 − 𝑣𝑗 ≤ 𝑞 𝑗 (𝑗 ∈ [𝑁])
𝐴𝑖𝑗 ≤ 𝑢𝑖 − 𝑣𝑗 ≤ 𝐵𝑖𝑗 𝑖, 𝑗 ∈ N
全て差の形になったので負閉路検出して終了
38
例題: Cashier Employment (出典: Tehran 2000)
http://poj.org/problem?id=1275
24時間営業のスーパーが店員を募集している。𝑖 時か
ら 𝑖 + 8 時までの8時間働く(日を跨ぐ可能性あり)こと
を希望する応募者が𝑐𝑖人居る。𝑖 時から 𝑖 + 1 時の間は
少なくとも 𝑟𝑖 人の店員が必要である。最小何人の店員
を雇えばよいか?
𝑖 時から 𝑖 + 8 時希望の応募者から 𝑥𝑖 人を雇うとすると、
σ 𝑗=0
7
𝑥(𝑖−𝑗) mod 24 ≥ 𝑟𝑖 が満たされる必要がある。
 円形区間和
39
例題: Cashier Employment (出典: Tehran 2000)
雇う人数の最小値を二分探索で求めよう。
𝑝𝑖 − 𝑝0 ≔ 𝑥0 + ⋯ + 𝑥𝑖−1 とすると、𝑘 人で可能かは以
下のLPで判定できる。
𝑝24 − 𝑝0 = 𝑘
0 ≤ 𝑝𝑖+1 − 𝑝𝑖 ≤ 𝑐𝑖 (𝑖 = 0, … , 23)
𝑝𝑖+1 − 𝑝𝑖−7 ≥ 𝑟𝑖 (𝑖 = 7, … , 23)
𝑘 − 𝑝17+𝑖 − 𝑝𝑖+1 ≥ 𝑟𝑖 𝑖 = 0, … , 6
全て差の形になったので負閉路検出して終了
40
類題: YamanoteLine (SRM553Hard)
円形区間和の上限・下限制約で総和の取りうる値の総数を求める
まとめ
 目的関数・制約が全て「二変数の差」 (𝑥 − 𝑦) の形
⇒ 最短路・負閉路検出の双対
 辺の向きに迷ったらBellmanFordの更新式を思い出そう
 「二変数の差」を作る頻出テクを覚えておこう
41
最小費用流
42
フロー
各辺𝑒に容量𝑐 𝑒(≥ 0)のある有向グラフと供給需要関数
𝑏: 𝑉 → ℝ に対して、以下を満たす𝑓: 𝐸 → ℝ≥0 を「許容
フロー」という。
𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣
0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 ∀𝑒 ∈ 𝐸
43
𝑣
𝛿−
(𝑣) 𝛿+(𝑣)
𝑏 𝑣 > 0な点では
𝑏 𝑣湧き出る
𝑏 𝑣 = 0な点では
入る量=出る量
𝑒を通して最大𝑐 𝑒
まで流せる
𝑏 𝑣 < 0な点では
−𝑏 𝑣消費する
最小費用流問題
最小重みの許容フローを求める問題
 最短路(𝑏𝑠 = 1, 𝑏𝑡 = −1, 𝑏 𝑣 = 0)の自然な拡張
minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
subject to 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣
0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 (∀𝑒 ∈ 𝐸)
多項式時間で解ける
 アルゴリズムの解説は省略
 他の資料で勉強してね
44
双対LP
minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒
s.t. 𝑓 𝛿−
𝑣 − 𝑓 𝛿+
𝑣 = −𝑏 𝑣 (× 𝑝 𝑣)
0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 (× 𝑧 𝑒)
maximize 𝑝,𝑧 − σ 𝑣 𝑏 𝑣 𝑝 𝑣 − σ 𝑒 𝑐 𝑒 𝑧 𝑒
s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣 (× 𝑓𝑢𝑣)
𝑧 𝑒 ≥ 0
𝑤が整数なら、𝑝も整数最適解が存在
 最短路反復法で使うポテンシャル𝑝が実は双対最適解
45
=
もう少し整理
maximize 𝑝,𝑧 − σ 𝑣 𝑏 𝑣 𝑝 𝑣 − σ 𝑒 𝑐 𝑒 𝑧 𝑒
s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣
𝑧 𝑒 ≥ 0
minimize 𝑝,𝑧 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑒 𝑐 𝑒 𝑧 𝑒
s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣
𝑧 𝑒 ≥ 0
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
46
−1倍
=
𝑧 𝑢𝑣 の値は 𝑝 𝑢, 𝑝 𝑣 から定まる
解ける問題
47
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
 線形関数とmax(0, 二変数の差 − 定数)の和
𝑝 𝑣 − 𝑝 𝑢
0 𝑤 𝑢𝑣
傾き = 𝑐 𝑢𝑣 > 0
解ける問題
実は任意の下に凸な折れ線が表現可能
 傾き負と正に分け、傾きの変化を係数とすれば良い
−1 + max 0, −𝑥 + max 0, 𝑥 − 1 + 2 max(0, 𝑥 − 3)
48
𝑥 = 𝑝 𝑣 − 𝑝 𝑢
0
−1
傾き3
−1 1
1
3
傾き1
傾き0
傾き−1
解ける問題
49
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
「二変数の差に関する下に凸な折れ線」の和
の最小化は最小費用流で解ける。
 折れ線を分解して上の形にしてからグラフを構築すれば
良い
 σ 𝑣 𝑏 𝑣 = 0 なことを考えると、σ 𝑣 𝑏 𝑣 𝑝 𝑣の部分もこの形
 最短路のときの「二変数の差」を作る頻出テクがこっちで
も役に立つ
 途中で−1倍したので、最小値 = −最小費用流なことに
注意
例題: How to Create a Good Game (出典: JAG Summer 2010)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2230
𝑁(≤ 100)点𝑀(≤ 1000)辺のDAGが与えられる。点0か
ら点𝑁 − 1へのLongest Pathの長さを変えないように、
出来るだけ辺の重みを増やしたい。増やす重みの和の
最大値を求めよ。
Longest Pathの長さを𝐷、辺𝑒の重みを𝑤𝑒、増やす量を
𝑎 𝑒とすると、
max
𝑎≥0
σ 𝑒 𝑎 𝑒
s.t. Longest Pathの長さが𝐷
50
例題: How to Create a Good Game (出典: JAG Summer 2010)
最短路の双対から、Longest Pathの長さが𝐷以下
⇔ 以下を満たす𝑝が存在。
𝑝 𝑁−1 − 𝑝0 ≤ 𝐷
𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣
よって、解きたい問題は
max
𝑎,𝑝
σ 𝑒 𝑎 𝑒
𝑝 𝑁−1 − 𝑝0 ≤ 𝐷
𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣
𝑎 𝑒 ≥ 0
51
例題: How to Create a Good Game (出典: JAG Summer 2010)
52
min
𝑎,𝑝
σ −𝑎 𝑒
𝑝 𝑁−1 − 𝑝0 ≤ 𝐷
𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣
𝑎 𝑒 ≥ 0
𝑝 𝑣 − 𝑝 𝑢
0 𝑤 𝑢𝑣
傾き−1
∞
−𝑎 𝑢𝑣
下に凸なので分解して最小費用流で終了
−1倍して
= ∞ max 0, 𝑝 𝑢 − 𝑝 𝑣 + 𝑤 𝑢𝑣
+ 𝑝 𝑢 − 𝑝 𝑣 + 𝑤 𝑢𝑣
例題: じょうしょうツリー (出典: UTPC 2012)
https://utpc2012.contest.atcoder.jp/tasks/utpc2012_12
各頂点𝑣が値𝑐𝑖を持つ𝑁(≤ 105)点の根付き木が与えら
れる。コストを1払うことで一つの頂点の値を±1変更で
きる。各点𝑢とその子供𝑣について、𝑐 𝑢 > 𝑐 𝑣が成り立つ
ように変更する最小コストを求めよ。
53
コスト8
例題: じょうしょうツリー (出典: UTPC 2012)
簡単な変形で、 𝑐 𝑢 > 𝑐 𝑣ではなく 𝑐 𝑢 ≥ 𝑐 𝑣 を目指す問題に出来る。
𝑝 𝑣 ≔ 変更後の𝑣の値、とすると
min
𝑝
σ 𝑣 |𝑝 𝑣 − 𝑐 𝑣|
s.t. 𝑝 𝑢 ≥ 𝑝 𝑣
|𝑝 𝑣 − 𝑐 𝑣|が一変数なので𝑝 𝑣 → 𝑝 𝑣 − 𝑝0と置き直すと
min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣|
s.t. 𝑝 𝑢 ≥ 𝑝 𝑣
54
𝑝 𝑣 − 𝑝0
0 𝑐 𝑣
|𝑝 𝑣 − 𝑝0 − 𝑐 𝑣|
下に凸なので分解して最小費用流で終了
…と言いたいところだが𝑁が大きいのでTLE
例題: じょうしょうツリー (出典: UTPC 2012)
min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣|
s.t. 𝑝 𝑢 ≥ 𝑝 𝑣
分解すると、
min
𝑝
σ 𝑣 max(0, 𝑝 𝑣 − 𝑝0 − 𝑐 𝑣)
0から𝑣へ容量1重み𝑐 𝑣
+ σ 𝑣 max(0, 𝑝0 − 𝑝 𝑣 + 𝑐 𝑣)
𝑣から0へ容量1重み−𝑐 𝑣
+ σ 𝑢𝑣 ∞max(0, 𝑝 𝑣 − 𝑝 𝑢)
𝑢から𝑣へ容量∞重み0
55
𝑣
𝑢
0 0
𝑐 𝑢
−𝑐 𝑢
𝑐 𝑣
−𝑐 𝑣
例題: じょうしょうツリー (出典: UTPC 2012)
需要供給無しなので、負閉路を詰め込む問題。
グラフの形から全ての負閉路は0 → 𝑢 → 子供 → ⋯ → 𝑣 → 0という形をして
おり、葉から根に向かって以下の貪欲法で解ける。
𝑢 … 𝑣0というパスでまだ使えるものの長さをヒープで管理する。
𝑢を以下のようにして処理する
1. 子供のヒープを全てマージ
2. ヒープにパス𝑢0の長さ−𝑐 𝑢を突っ込む
3. 𝑐 𝑢 + ヒープの最小値 < 0 ならばヒープからpopして貪欲に使う
データ構造をマージする一般的テクで𝑂(𝑛 log2
𝑛)
マージ可能ヒープを用いると𝑂(𝑛 log 𝑛)
56
𝑣
𝑢
0 0
𝑐 𝑢
−𝑐 𝑢
𝑐 𝑣
−𝑐 𝑣
例題: じょうしょうツリー (出典: UTPC 2012)
𝑢 … 𝑣0というパスでまだ使えるものの長さをヒープで管理する。
𝑢を以下のようにして処理する
1. 子供のヒープを全てマージ
2. ヒープにパス𝑢0の長さ−𝑐 𝑢を突っ込む
3. 𝑐 𝑢 + ヒープの最小値 < 0 ならばヒープからpopして貪欲に使う
57
6
2 10
3 5 8
9 5
−9 −5
−3 −5
−9, −8, −5 → −8, −5
−5, −3, −2 → −3, −2 −10, −8, −5
−10, −8, −5, −3, −2
答え: 9 − 8 + 5 − 2 + 10 − 6 = 8
例題: じょうしょうツリー (出典: UTPC 2012)
貪欲の証明:
𝐷 𝑢 ≔ 𝑢以下の頂点集合(𝑢を含む)とすると、𝑢を処理し終えた段
階で𝐺[ 0 ∪ 𝐷 𝑢]の最小費用流が求まっていることを示す。
𝐺[ 0 ∪ 𝐷 𝑢 ∖ 𝑢 ]の最小費用流は、グラフの形から各子供𝑣につ
いて𝐺[ 0 ∪ 𝐷𝑣]の最小費用流の和と等しい。
𝑢を追加したことで生じる新たな閉路は0𝑢 … 𝑣0という形のものだ
けであり、0𝑢の容量が1であることから、この中で最小のものを1
つ選べば最小費用流になる。
58
類題: 花火 (第二回ドワンゴからの挑戦状予選)
Farm Village (JAG Asia 2017)
特殊なグラフの最小費用流
まとめ
 「二変数の差に関する下に凸な折れ線」の和の最小化
⇒ 最小費用流の双対
 下に凸な折れ線を分解して下の形にすればよい
 𝑏 𝑣 ≔ 供給 − 需要
 𝑢 → 𝑣 へ重み𝑤 𝑢𝑣、容量𝑐 𝑢𝑣の辺
 𝑤 𝑢𝑣は負になる場合あり
 特殊なグラフのフローは速く解ける可能性あり
59
minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
ラグランジュ双対
60
ラグランジュ緩和
61
𝑔 𝑥 = 0 の制約がなければ
解けるんだけど・・・
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
ラグランジュ緩和
邪魔な制約を「ペナルティ」として目的関数に移動させ
よう。(この操作をラグランジュ緩和という)
任意の 𝜆 (ラグランジュ乗数という) に対して次の不等式
が成り立つ。
62
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
≤
これなら
解ける!max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥 s.t. 𝑔 𝑥 = 0
=
∵ 𝑔 𝑥 = 0 なら 𝜆𝑔 𝑥 = 0
∵ 制約が減った
ラグランジュ双対
出来るだけ良い上界を求める問題を考えよう。
(この問題をラグランジュ双対という)
𝐿 𝜆 ≔ max
𝑥∈𝑃
𝑓 𝑥 − 𝜆𝑔(𝑥) とすると、𝐿(𝜆)は下に凸となるので、
(三分探索などで)最小化出来る。
𝐿 𝛼𝜆1 + 1 − 𝛼 𝜆2 = 𝑓 𝑥∗ − 𝛼𝜆1 + 1 − 𝛼 𝜆2 𝑔(𝑥∗)
= 𝛼 𝑓 𝑥∗ − 𝜆1 𝑔 𝑥∗ + 1 − 𝛼 𝑓 𝑥∗ − 𝜆2 𝑔 𝑥∗
≤ 𝛼𝐿 𝜆1 + 1 − 𝛼 𝐿(𝜆2)
63
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
min
𝜆
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥≤
強双対性
𝑓 𝑥 − 𝜆𝑔(𝑥) を最大化する𝑥の集合を𝑋(𝜆)と定義する。もし、
𝑥 ∈ 𝑋(𝜆)であって、𝑔 𝑥 = 0 となるものが存在すれば、等号が
成立する。𝜆 を小さくすれば𝑔(𝑥)は大きくなり、大きくすれば𝑔(𝑥)
は小さくなるので、二分探索すればちょうど0になるものが見つか
り元の問題が解けるのでは?
 等号が成立しても全ての 𝑥 ∈ 𝑋(𝜆) で𝑔 𝑥 = 0 となるとは限らないの
で、実際に𝑥を構築する方法は少し考えないといけない
 最適値を求めるだけなら二分探索して終了
64
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
min
𝜆
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
=
?
一般には成り立たない
が、LPでは成り立つ
強双対性(LPの場合)
𝐴𝒙 ≤ 𝒃 の多面体中で、(𝒄 − 𝜆𝒅)方向に一番遠い点を
求める問題。
𝜆 を動かすと、𝑋(𝜆)の範囲も連続的に動くので、ちょう
ど𝒅𝒙 = 𝑘 となる点が存在する。
65
max
𝒙
𝒄𝒙
s.t. 𝐴𝒙 ≤ 𝒃
𝒅𝒙 = 𝑘
min
𝜆
max
𝒙
𝒄𝒙 − 𝜆(𝒅𝒙 − 𝑘)
s.t. 𝐴𝒙 ≤ 𝒃
=
𝐴𝒙 ≤ 𝒃 𝒄 − 𝜆𝒅
𝒅𝒙 = 𝑘 𝑋(𝜆)
整数解に限定したら飛び越すかも
𝒈 𝒙 ≤ 𝟎 の場合
LPの場合は等号成立
66
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 ≤ 0
min
𝜆≥0
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
≤
∵ 𝑔 𝑥 ≤ 0, 𝜆 ≥ 0 なら −𝜆𝑔 𝑥 ≥ 0
複数個邪魔な場合
LPの場合は等号成立
67
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔𝑖 𝑥 = 0 (𝑖 ∈ [𝑛])
min
𝜆1,…,𝜆 𝑛
max
𝑥∈𝑃
𝑓(𝑥) − σ𝑖 𝜆𝑖 𝑔𝑖(𝑥)
≤
双対LPとの関係
全部の制約をラグランジュ緩和すれば双対LPになる。
𝑥𝑖の係数は 𝑐𝑖 − 𝐴∗𝑖 𝒚 (𝐴∗𝑖 ≔ 𝐴の𝑖列ベクトル)
もし、ある 𝑖 で 𝑐𝑖 − 𝐴∗𝑖 𝒚 > 0 なら、max
𝒙
⋯ = ∞
逆に、全ての 𝑖 で 𝑐𝑖 − 𝐴∗𝑖 𝒚 ≤ 0 なら、max
𝒙
⋯ = 𝒃𝒚
68
max
𝒙
𝒄𝒙 s.t. 𝐴𝒙 ≤ 𝒃, 𝒙 ≥ 0
min
𝒚≥0
max
𝒙
𝒄𝒙 − 𝒚T(𝐴𝒙 − 𝒃) s.t. 𝒙 ≥ 0
=
min
𝒚
𝒃𝒚 s.t. 𝐴T 𝒚 ≥ 𝒄, 𝒚 ≥ 0
=
双対LPとの関係
LPのラグランジュ双対は「双対LPを作る途中段階」だと
思うと、双対変数とラグランジュ乗数が同じものである
ことがわかる。
 𝒂𝒙 ≤ 𝑏 に対応する双対変数が最適双対解で取る
値と 𝒂𝒙 ≤ 𝑏を消すラグランジュ双対の最適解でラ
グランジュ乗数が取る値は同じ
 特に、双対LPが整数解を持つLPに対してラグラン
ジュ双対を作れば、ラグランジュ乗数の最適値も
整数になる
69
ラグランジュゲーの解き方
タイプ1: 解ける問題+邪魔な制約
⇒ ラグランジュ緩和で制約を消し、二分探索などで双
対問題を解く
タイプ2: min max ~ という形の最適化問題(ゲームとか)
⇒ ラグランジュ双対問題だとみなして元の max ~ の
形に戻して解く
 等号が成り立つことを確認しよう(特に整数解が必
要な場合)
70
例題: Min-Max (出典: POJ Monthly) の別解
𝑛 (≤ 50000)次元の非負実数ベクトル (𝜇1, … , 𝜇 𝑛) が
あり、 σ𝑖 𝜇𝑖 = 1 を満たしている。2つのベクトル 𝑝, 𝑞 と
実数𝐶が与えられる。σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 であるとき、σ𝑞𝑖 𝜇𝑖 の
取りうる値の最小値・最大値を求めよ。
71
http://poj.org/problem?id=2595
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖
σ𝑖 𝜇𝑖 = 1
σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶
𝜇𝑖 ≥ 0
←この制約がなければ非常に簡単
(一番小さい𝑞𝑖に対して𝜇𝑖 = 1とすればよい)
例題: Min-Max (出典: POJ Monthly) の別解
ラグランジュ双対を取ると、
max
𝜆
min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖 + 𝜆(σ𝑖 𝑝𝑖 𝜇𝑖 − 𝐶)
σ𝑖 𝜇𝑖 = 1
𝜇𝑖 ≥ 0
 (𝑞𝑖 + 𝜆𝑝𝑖) が一番小さい 𝑖 に対して、𝜇𝑖 = 1 とすれば
内側の最小化可能。
 𝑝𝑖 − 𝐶 の符号で二分探索すれば外側の最大化が出
来る。
双対LPで幾何の問題にするより、かなり簡単!
72
例題: Skyland (出典: JAG Spring 2012)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2396
𝑛 (≤ 100)個の浮遊島がある。各島の高度は0以上の
任意の実数値に設定できる。𝑖 番目の島を高度ℎにする
にはコストが𝑑𝑖ℎかかる。島𝑖と島𝑗の高度差が𝑥あるとコ
ストが𝑐𝑖𝑗 𝑥かかる。高度の合計を𝐻以上にする最小コス
トを求めよ。(本来はそのようなℎを求める問題)
73
min
ℎ
σ𝑖 𝑑𝑖ℎ𝑖 + σ𝑖𝑗 𝑐𝑖𝑗|ℎ𝑖 − ℎ𝑗|
σ𝑖 ℎ𝑖 ≥ 𝐻
ℎ𝑖 ≥ 0
←この制約がなければ
双対最小費用流の形
例題: Skyland (出典: JAG Spring 2012)
ラグランジュ双対を取ると、
 双対最小費用流で内側の最小化が可能
 よく眺めると全ての重みが0なので、供給需要を満
たすフローがあるか判定問題→最大流
 許容フローがあるかどうかで二分探索すれば外側の
最大化が可能
 解の構築はこの方針だともう少し考察が必要
74
max
𝜆≥0
min
ℎ
σ𝑖 𝑑𝑖ℎ𝑖 + σ𝑖𝑗 𝑐𝑖𝑗|ℎ𝑖 − ℎ𝑗| −𝜆(σ𝑖 ℎ𝑖 − 𝐻)
ℎ𝑖 ≥ 0
解の構築方法(プロ向け補足)
解の構築がしたい場合は?
重み0の最小費用流の双対なので、単純にはℎ = 0が
解として求まってしまい、σ𝑖 ℎ𝑖 = 𝐻 とならないので、別
の最適解を構築する必要がある。
ℎ𝑖 → ℎ𝑖 − ℎ0 と置き換えてグラフを作ってみると、
75
0
𝑖 𝑗
𝑐𝑖𝑗
∞ ∞
𝑏0 = 𝜆𝑛 − σ𝑖 𝑑𝑖
𝑏𝑖 = 𝑑𝑖 − 𝜆 𝑏𝑗 = 𝑑𝑗 − 𝜆
解の構築方法(プロ向け補足)
最適な𝜆における許容フロー𝑓を固定する。相補性定理
から、ℎが最適解 ⇔ 𝑓の残余グラフにおける全ての容
量正の辺𝑢𝑣で ℎ 𝑣 ≤ ℎ 𝑢。もし0から全ての点が到達可能
なら、𝜆を𝜖増やしても許容フローが存在するので矛盾。
到達出来ない点集合𝑆に対して𝑣 ∈ 𝑆 で ℎ 𝑣 = 𝐻/|𝑆| と
すれば良い。(このような最適解が存在することに先に
気づけば二分探索+最小カットで直接解ける)
76
0
𝑖 𝑗
𝑐𝑖𝑗
∞ ∞
𝑏0 = 𝜆𝑛 − σ𝑖 𝑑𝑖
𝑏𝑖 = 𝑑𝑖 − 𝜆 𝑏𝑗 = 𝑑𝑗 − 𝜆
例題: Longest Shortest Path (出典: JAG Asia 2015)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2736
𝑁(≤ 200)点𝑀(≤ 2000)辺の重み付き有向グラフが与
えられる。各辺𝑒について、コスト𝑥 ⋅ 𝑐 𝑒(非負実数)支払う
ことで重みを𝑤𝑒から𝑤𝑒 + 𝑥に増加させることが出来る。
予算𝑃の範囲内で𝑠-𝑡最短路の長さを最大化せよ。
77
max
𝑥
(重み𝑤 + 𝑥での𝑠−𝑡距離)
σ 𝑒 𝑐 𝑒 𝑥 𝑒 ≤ 𝑃
𝑥 𝑒 ≥ 0
例題: Longest Shortest Path (出典: JAG Asia 2015)
ラグランジュ双対を取ると、
 双対最小費用流で内側の最大化が可能
 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃の符号で二分探索すれば外側の最小化
が可能
78
min
𝜆≥0
max
𝑥
(𝑤 + 𝑥での𝑠−𝑡距離) − 𝜆 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃
𝑥 𝑒 ≥ 0
min
𝜆≥0
max
𝑥,𝑝
𝑝𝑡 − 𝑝𝑠 − 𝜆 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃
𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 + 𝑥 𝑢𝑣
𝑥 𝑒 ≥ 0
=
𝑠-𝑡最短路の双対
例題: Longest Shortest Path (出典: JAG Asia 2015)
入力が小さいのでこのままでも解けるが、もう少し高速
化が可能。𝜆 → 1/𝐹 と置き換えると、
これは(流量𝐹の最小費用流 + 𝑃)/𝐹 を最小化する問題
⇒ 𝐹 を1ずつ増やしていくことで解ける
79
min
𝐹>0
max
𝑥,𝑝
(𝐹𝑝𝑡 − 𝐹𝑝𝑠 − σ 𝑒 𝑐 𝑒 𝑥 𝑒 + 𝑃)/𝐹
𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 + 𝑥 𝑢𝑣
𝑥 𝑒 ≥ 0
例題: きたまさの逆襲 (出典: UTPC 2012)
https://utpc2012.contest.atcoder.jp/tasks/utpc2012_10
重み付き二部グラフ𝐺 = (𝑈, 𝑉)がある。秋葉さんは大きさ|𝑉|の
マッチングで出来るだけ重みの小さいものが欲しい。きたまささ
んは重みを操作することで秋葉さんの妨害をしたい。𝑈の分割
𝑈 = 𝑈1 ∪ ⋯ ∪ 𝑈 𝑑があり、コスト𝑏𝑖を支払うことで𝑈𝑖に接続する全
ての辺の重みを1増えせる(複数回増やして良い)。(秋葉さんの
マッチングの重み)−(きたまささんのコスト)を最大化せよ。
80
max
𝜆1,…,𝜆 𝑑≥0
min
𝑓
σ𝑖 σ 𝑢∈𝑈 𝑖
σ 𝑣(𝑤 𝑢𝑣 + 𝜆𝑖) 𝑓𝑢𝑣 − σ𝑖 𝑏𝑖 𝜆𝑖
𝑓: 大きさ|𝑉|のマッチング
例題: きたまさの逆襲 (出典: UTPC 2012)
ラグランジュ双対をとった形だと思うと、
81
max
𝜆1,…,𝜆 𝑑≥0
min
𝑓
σ 𝑒 𝑤𝑒 𝑓𝑒 + σ𝑖(σ 𝑢∈𝑈 𝑖
σ 𝑣 𝑓𝑢𝑣 − 𝑏𝑖)𝜆𝑖
𝑓: 大きさ|𝑉|のマッチング
=min
𝑓
σ 𝑒 𝑤𝑒 𝑓𝑒
𝑓: 大きさ|𝑉|のマッチング
σ 𝑢∈𝑈 𝑖
σ 𝑣 𝑓𝑢𝑣 ≤ 𝑏𝑖
例題: きたまさの逆襲 (出典: UTPC 2012)
これは(双対でなく普通の)最小費用流
82
min
𝑓
σ 𝑒 𝑤𝑒 𝑓𝑒
𝑓: 大きさ|𝑉|のマッチング
σ 𝑢∈𝑈 𝑖
σ 𝑣 𝑓𝑢𝑣 ≤ 𝑏𝑖
𝑠 𝑈𝑖 𝑢 𝑣 𝑡
重み
容量
0 0 𝑤 𝑢𝑣 0
𝑏𝑖 1 1 1
この容量制約の双対変数が𝜆𝑖
よって整数解が存在
𝑈𝑖から出る流量
の和が𝑏𝑖以下
例題: Homework (ICPC Asia 2017)
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1385
(意訳) 2つの二部グラフ𝐺1 = (𝑈1 ∪ 𝑉, 𝐸1)と𝐺2 = (𝑈2 ∪
𝑉, 𝐸2)が与えられる。𝑉 = 𝑉1 ∪ 𝑉2と分割し、(𝑈1, 𝑉1)と
(𝑈2, 𝑉2)の最大マッチングの和を最小化せよ。
83
a b c
1 4 6
2 3 5
A B C
2 3 5
1 4 6
𝑈1
𝑉
𝑉
𝑈2
1 + 1 = 2
例題: Homework (ICPC Asia 2017)
𝑓𝑒 ≔ 𝑒をマッチングに含めるか
𝜆 𝑣 ≔ 𝑣 を 𝑉1に含めるか
と定義し、min max ~ の形で書くと
84
min
𝜆∈ 0,1 𝑉
max
𝑓
෍
𝑢𝑣∈𝐸1
𝜆 𝑣 𝑓𝑢𝑣 + ෍
𝑢𝑣∈𝐸2
(1 − 𝜆 𝑣)𝑓𝑢𝑣
𝑓: 𝐺1, 𝐺2のマッチング
𝜆 𝑣 = 0なら𝑢𝑣を使っても意味なし
例題: Homework (ICPC Asia 2017)
85
min
𝜆∈ 0,1 𝑉
max
𝑓
෍
𝑒∈𝐸2
𝑓𝑒 + ෍
𝑣
𝜆 𝑣 ෍
𝑢∈𝑈1
𝑓𝑢𝑣 − ෍
𝑢∈𝑈2
𝑓𝑢𝑣
𝑓: 𝐺1, 𝐺2のマッチング
max
𝑓
σ 𝑒∈𝐸2
𝑓𝑒
𝑓: 𝐺1, 𝐺2のマッチング
σ 𝑢∈𝑈1
𝑓𝑢𝑣 − σ 𝑢∈𝑈2
𝑓𝑢𝑣 = 0 ∀𝑣 ∈ 𝑉
≥
𝜆 ∈ 0,1 𝑉となる最適解があれば等号成立
例題: Homework (ICPC Asia 2017)
𝐺1で𝑣を使うなら𝐺2でも𝑣を使うような最大マッチングを
求める、最大流の基礎的な応用問題 (Dining@POJ
3281 と同じ問題)
 最大流の双対解=最小カットは0,1の値を取るので
等号成立
 他にも色々な方法で同じ解法に至れる(マトロイド交
差の双対など)
86
max
𝑓
σ 𝑒∈𝐸2
𝑓𝑒
𝑓: 𝐺1, 𝐺2のマッチング
σ 𝑢∈𝑈1
𝑓𝑢𝑣 − σ 𝑢∈𝑈2
𝑓𝑢𝑣 = 0 ∀𝑣 ∈ 𝑉
例題: Homework (ICPC Asia 2017)
87
a b c
1 4 6
2 3 5
A B C
2 3 5
1 4 6
𝑈1
𝑉
𝑉
𝑈2
𝑠
𝑡
まとめ
min max ~ 最適化
⇒ ラグランジュ双対とみなして元に戻してみよう
 双対LPが最適整数解を持つなら、ラグランジュ乗
数も最適整数解を持つ
88
max
𝑥∈𝑃
𝑓(𝑥) s.t. 𝑔 𝑥 = 0
min
𝜆
max
𝑥∈𝑃
𝑓(𝑥) − 𝜆𝑔 𝑥
≤ LPでは等号成立
解ける問題+邪魔な制約
⇒ ラグランジュ双対をとって𝑔 𝑥 の符号で
二分探索しよう
出来るだけ良い
上界を得たい
全体のまとめ
 LP双対
 制約式の線形和で出来るだけ良い上界(下界)を作る
 最短路・負閉路
 目的関数・制約が「二変数の差」
 最小費用流
 「二変数の差に関する下に凸な折れ線」の和の最小化
 minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
 ラグランジュ双対
 LP双対の途中段階とみなせる
 邪魔な制約の除去
 min max ~ 型最適化
89

双対性

  • 1.
  • 2.
    2 自己紹介  東大情報科学科→情報理工(2016年3月博士卒)  国立情報学研究所助教  離散アルゴリズムの研究をしている 世界 1 位 (2010) 世界 2 位 (2011) 世界 3 位 (2009)3回優勝 (2013,2015,2016) 競プロ: wata Twitter: @wata_orz ICFPC
  • 3.
  • 4.
  • 5.
  • 6.
    判定問題 Yes の場合には簡単に検証可能な「証明」が存在 (𝑥を実際に与えれば良い) ⇒ NP(Non-deterministic Polynomial time)と言う 6 min 𝑥∈𝑃 𝑓(𝑥) ≤ 𝑘? 𝑓 𝑥 ≤ 𝑘 となる 𝑥 ∈ 𝑃 があるか s t 2本は可能? はい。この2本を取 り除けば良いです。
  • 7.
    補問題 No の場合に簡単に検証可能な「証明」は存在? ⇒ 存在するような問題はco-NP と言う 7 min 𝑥∈𝑃 𝑓(𝑥) ≤ 𝑘? 𝑓 𝑥 ≤ 𝑘 となる 𝑥 ∈ 𝑃 があるか s t 1本は不可能? 多分出来ないと思う けど・・・
  • 8.
    P ⊆ NP∩ co-NP Noを示すもっと簡単な証明はないだろうか? 8 P NP co-NP s t 1本は不可能? 最小値を計算したら 2だったので無理です 多項式時間で解ける(P)ならば アルゴリズムの実行自体が効率 的に検証可能な証明といえる。
  • 9.
    最大流=最小カット 最大𝑠-𝑡フロー問題 最大何個の辺を共有しない𝑠-𝑡パスを選べるか? 任意の 𝑠-𝑡フロー 𝐹= {𝑃1, … , 𝑃𝑓} と 𝑠-𝑡 カット 𝐶 に対し、 |𝐹| ≤ |𝐶| が成り立つ。(∵ 𝐸 𝑃𝑖 ∩ 𝐶 ≠ ∅) 実は、max |𝐹| = min |𝐶| が成り立つ。 9 s t 1本は不可能? この2本のパスがあ るので無理です。
  • 10.
    双対問題 min 𝑥∈𝑃 𝑓 𝑥 =max 𝑦∈𝑄 𝑔(𝑦) となるように 𝑄, 𝑔 を設計出来れば、𝑦を与えることでNo が証明可能! 10 min 𝑥∈𝑃 𝑓(𝑥) 𝑃の範囲で𝑓(𝑥)を最小化せよ max 𝑦∈𝑄 𝑔(𝑦) 𝑄の範囲で𝑔(𝑦)を最大化せよ 一致 𝑓(𝑥)の範囲 𝑔(𝑦)の範囲
  • 11.
    よくあるパターン 1. 𝑓 𝑥≥ 𝑔(𝑦) (∀𝑥 ∈ 𝑃, ∀𝑦 ∈ 𝑄) が簡単に示せる 2. アルゴリズムの停止時に 𝑓 𝑥 = 𝑔(𝑦) となる 𝑥 ∈ 𝑃 と 𝑦 ∈ 𝑄 が得られることが示せる → 強双対定理とアルゴリズムの正当性が導かれる 11 (強)双対定理 min 𝑥∈𝑃 𝑓(𝑥) = max 𝑦∈𝑄 𝑔(𝑦)
  • 12.
    扱う内容 1. 双対LP 2. 最短路・負閉路 3.最小費用流 4. ラグランジュ双対  最小費用流などのアルゴリズムの解説はしない  双対を考えることでどんな問題が解けるようになる のかの解説がメイン 12
  • 13.
    更に勉強したい人向け参考書  ネットワークフロー入門(JOI 2014-2015春合宿)  保坂和宏、http://hos.ac/slides/20150319_flow.pdf • 最大流・最小費用流の入門に  プログラミングコンテストチャレンジブック  秋葉拓哉、岩田陽一、北川宜稔 • 競プロ向け最大流・最小費用流の基礎と応用例  離散凸解析と最適化アルゴリズム  室田一雄、塩浦昭義 • 最適化アルゴリズムを離散凸という観点から一般化  Graphs, Networks and Algorithms  D. Jungnickel • フローの色々なアルゴリズムが載ってる  Combinatorial Optimization  A. Schrijver • 3部からなる超大作(オススメ) 13
  • 14.
  • 15.
    線形計画問題(LP: Linear Programming) 目的関数と制約が全て一次式な連続最適化問題  整数性条件は無し  多項式時間で解ける maximize 𝑥1 + 2𝑥2 subject to 𝑥1 + 𝑥2 ≤ 4 −2𝑥1 + 𝑥2 ≤ 2 𝑥1 ≤ 3 𝑥1, 𝑥2 ≥ 0 15 Max = 22 3 𝒙 = 2 3 , 10 3 本当に最大?
  • 16.
    解の上界を示す maximize 𝑥1 +2𝑥2 subject to 𝑥1 + 𝑥2 ≤ 4 (1) −2𝑥1 + 𝑥2 ≤ 2 (2) 𝑥1 ≤ 3 (3) 𝑥1, 𝑥2 ≥ 0 (1) + (2) + 2(3): 𝑥1 + 2𝑥2 ≤ 12 2 1 : 𝑥1 + 2𝑥2 ≤ 2𝑥1 + 2𝑥2 ≤ 8 5 3 1 + 1 3 (2): 𝑥1 + 2𝑥2 ≤ 22 3 16 22 3 より大は無理
  • 17.
    解の上界を示す maximize 𝑥1 +2𝑥2 subject to 𝑥1 + 𝑥2 ≤ 4 (1) −2𝑥1 + 𝑥2 ≤ 2 (2) 𝑥1 ≤ 3 (3) 𝑥1, 𝑥2 ≥ 0 より一般に、(1)を𝑦1倍、(2)を𝑦2倍、(3)を𝑦3倍して足すと、 𝑦1 − 2𝑦2 + 𝑦3 𝑥1 + 𝑦1 + 𝑦2 𝑥2 ≤ 4𝑦1 + 2𝑦2 + 3𝑦3 17
  • 18.
    解の上界を示す maximize 𝑥1 +2𝑥2 subject to 𝑥1 + 𝑥2 ≤ 4 (1) −2𝑥1 + 𝑥2 ≤ 2 (2) 𝑥1 ≤ 3 (3) 𝑥1, 𝑥2 ≥ 0 より一般に、(1)を𝑦1倍、(2)を𝑦2倍、(3)を𝑦3倍して足すと、 𝑦1 − 2𝑦2 + 𝑦3 𝑥1 + 𝑦1 + 𝑦2 𝑥2 ≤ 4𝑦1 + 2𝑦2 + 3𝑦3 目的関数: 1𝑥1 + 2𝑥2 18 ≥ ≥ 2つの ≥ が成り立てば、 右辺が最大値の上界
  • 19.
    双対LP 出来るだけ良い上界を示す問題もLPとなる。 19 maximize 𝑥1 +2𝑥2 subject to 𝑥1 + 𝑥2 ≤ 4 (× 𝑦1) −2𝑥1 + 𝑥2 ≤ 2 (× 𝑦2) 𝑥1 ≤ 3 (× 𝑦3) 𝑥1, 𝑥2 ≥ 0 minimize 4𝑦1 + 2𝑦2 + 3𝑦3 subject to 𝑦1 − 2𝑦2 + 𝑦3 ≥ 1 𝑦1 + 𝑦2 ≥ 2 𝑦1, 𝑦2, 𝑦3 ≥ 0 双対 主問題 双対問題
  • 20.
    双対LP 出来るだけ良い上界を示す問題もLPとなる。 もう一回双対を取ると元に戻る。 20 maximize 𝑥1 +2𝑥2 subject to 𝑥1 + 𝑥2 ≤ 4 (× 𝑦1) −2𝑥1 + 𝑥2 ≤ 2 (× 𝑦2) 𝑥1 ≤ 3 (× 𝑦3) 𝑥1, 𝑥2 ≥ 0 minimize 4𝑦1 + 2𝑦2 + 3𝑦3 subject to 𝑦1 − 2𝑦2 + 𝑦3 ≥ 1 (× 𝑥1) 𝑦1 + 𝑦2 ≥ 2 (× 𝑥2) 𝑦1, 𝑦2, 𝑦3 ≥ 0 双対 双対 主問題 双対問題
  • 21.
    強双対性 21 maximize 𝒄𝒙 subject to𝐴𝒙 ≤ 𝒃 𝒙 ≥ 𝟎 minimize 𝒃𝒚 subject to 𝐴T 𝒚 ≥ 𝒄 𝒚 ≥ 𝟎 =  双対LPの意味(制約の線形和で出来るだけ良い上 界・下界を示す)さえ理解すれば簡単に双対が取れ るので標準形を暗記する必要はない。  双対LPの作り方から ≤ は明らかだが、実は常に等号 が成立する (強双対性)  もしくは (∞, 解なし)、(解なし、 − ∞)  ただし、等号が成立する整数解があるとは限らない 標準形
  • 22.
    他の標準形 (標準形を暗記するより意味を理解しよう) →: 等号なので、負の係数をかけて足しても良い  𝒂𝒙≤ 𝑏 を −1 倍したら −𝒂𝒙 ≥ −𝑏 で不等号が逆に ←: 非負制約がないので、係数は一致させないとダメ  𝒚 ≥ 𝟎 ならば、𝒃′ ≤ 𝒃 から 𝒃′ 𝒚 ≤ 𝒃𝒚 が言える 22 maximize 𝒄𝒙 subject to 𝐴𝒙 = 𝒃 𝒙 ≥ 𝟎 minimize 𝒃𝒚 subject to 𝐴T 𝒚 ≥ 𝒄 𝒚 ≥ 𝟎 =
  • 23.
  • 24.
    例題: Min-Max (出典:POJ Monthly) 𝑛 (≤ 50000)次元の非負実数ベクトル (𝜇1, … , 𝜇 𝑛) が あり、 σ𝑖 𝜇𝑖 = 1 を満たしている。2つのベクトル 𝑝, 𝑞 と 実数𝐶が与えられる。σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 であるとき、σ𝑞𝑖 𝜇𝑖 の 取りうる値の最小値・最大値を求めよ。 24 http://poj.org/problem?id=2595
  • 25.
    例題: Min-Max (出典:POJ Monthly) 最小値を求める問題をLPで書くと、 min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖 σ𝑖 𝜇𝑖 = 1 σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 𝜇𝑖 ≥ 0 双対LPを作ってみると、 25
  • 26.
    例題: Min-Max (出典:POJ Monthly) 最小値を求める問題をLPで書くと、 min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖 σ𝑖 𝜇𝑖 = 1 σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 𝜇𝑖 ≥ 0 双対LPを作ってみると、 max 𝑥,𝑦 𝑥 + 𝐶𝑦 𝑥 + 𝑝𝑖 𝑦 ≤ 𝑞𝑖 (× 𝜇𝑖) 26 × 𝑥 (× 𝑦)
  • 27.
    例題: Min-Max (出典:POJ Monthly) max 𝑥,𝑦 𝑥 + 𝐶𝑦 𝑥 + 𝑝𝑖 𝑦 ≤ 𝑞𝑖 これは、二次元の多角形内部で、(1, 𝐶)方向に一番遠 い点を求める問題。多角形を𝑂(𝑛 log 𝑛)で構築して端 点を全て調べれば良い。 27 実は定数次元のLPは線形時間で 解けることが知られている。 (Seidel’s LP algorithm など)
  • 28.
    まとめ  双対LPを構築出来るようになろう  制約式の線形和で出来るだけ良い上界(下界)を 作る、ということだけ覚えておけば自然に作れる LPでは強双対性が成り立ち、双対LPを解くことで元の LPも解ける  ただし、整数解で成り立つとは限らないので注意  LPで書ける問題は、そのままだと解き方が分からなく ても、双対を取ってみると知ってる問題になるかも 28
  • 29.
  • 30.
    𝒔-𝒕最短路問題をLPで書いてみる 辺 𝑒 を通る回数を表す変数𝑓𝑒 𝑤𝑒 ≔ 辺𝑒の長さ 𝛿+ 𝑣 ≔ 𝑣から出る辺集合、𝛿− 𝑣 ≔ 𝑣へ入る辺集合 𝑓 𝐹 ≔ σ 𝑒∈𝐹 𝑓𝑒 minimize σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒 subject to 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = ൞ −1 (𝑣 = 𝑠) 1 (𝑣 = 𝑡) 0 (otherwise) 𝑓𝑒 ≥ 0 (∀𝑒 ∈ 𝐸) (注意:負の閉路があると最小値は − ∞になる) 30 𝑣 𝛿− (𝑣) 𝛿+(𝑣)
  • 31.
    双対LP minimize 𝑓 σ𝑒∈𝐸 𝑤𝑒 𝑓𝑒 s.t. 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = ൞ −1 𝑣 = 𝑠 (× 𝑝𝑠) 1 𝑣 = 𝑡 (× 𝑝𝑡) 0 otherwise (× 𝑝 𝑣) 𝑓𝑒 ≥ 0 maximize 𝑝 𝑝𝑡 − 𝑝𝑠 s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 (× 𝑓𝑢𝑣) 31 = ただし、整数解で一致するとは まだ言っていない 目的関数・制約ともに「二変数の差」の形 二変数の差が現れたら双対ゲーを疑おう!
  • 32.
    距離関数 𝑠から𝑣への最短距離を𝑝 𝑣とすると、 1. 𝑝𝑡− 𝑝𝑠 = 𝑠−𝑡最短路の長さ 2. ∀𝑢𝑣 ∈ 𝐸に対して、𝑝 𝑣 ≤ 𝑝 𝑢 + 𝑤 𝑢𝑣 が成り立つので、𝑝は双対LPの最適解である。つまり、  最短路アルゴリズムで双対LPが解ける。  𝑤が整数なら整数解が求まる。 ただし、負閉路がある場合に注意 32 maximize 𝑝 𝑝𝑡 − 𝑝𝑠 s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
  • 33.
  • 34.
    解ける問題  目的関数が 𝑝𝑡− 𝑝𝑠 の形  𝑠 から 𝑡 への最短距離を求める  制約が全て 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 の形  𝑢 から 𝑣 へ長さ 𝑤 𝑢𝑣 の辺を張る  𝑤 𝑢𝑣 ≤ 𝑝 𝑣 − 𝑝 𝑢 の形も 𝑝 𝑢 − 𝑝 𝑣 ≤ −𝑤 𝑢𝑣 と書けるので 𝑣 か ら 𝑢 へ長さ −𝑤 𝑢𝑣 の辺を張れば良い Bellman-Fordの更新式を思い出せばグラフは自然に作れる 𝑑 𝑣 ← min(𝑑 𝑣, 𝑑 𝑢 + 𝑤 𝑢𝑣) だから停止時に 𝑑 𝑣 ≤ 𝑑 𝑢 + 𝑤 𝑢𝑣 が成立 34 maximize 𝑝 𝑝𝑡 − 𝑝𝑠 s.t. 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 for ∀𝑢𝑣 ∈ 𝐸
  • 35.
    「二変数の差」を作る頻出テク 1. 絶対値上限制約: 𝑝𝑢 − 𝑝 𝑣 ≤ 𝑤 𝑢𝑣  −𝑤 𝑢𝑣 ≤ 𝑝 𝑢 − 𝑝 𝑣 ≤ 𝑤 𝑢𝑣 2. 一変数制約: 𝑝𝑖 ≤ 𝑤𝑖  新しい変数 𝑝0 を導入し、全ての変数𝑝𝑗を𝑝𝑗 − 𝑝0 で置き換えると、𝑝𝑖 − 𝑝0 ≤ 𝑤𝑖 となる  既存の二変数制約 𝑝𝑗 − 𝑝𝑖 ≤ 𝑤𝑖𝑗 は変化しない 3. 二部グラフ  𝑥𝑖 + 𝑦𝑗 型のときは、全ての𝑦の符号を反転させる ことで、𝑥𝑖 − 𝑦𝑗型になる  グリッドグラフとかで頻出 35
  • 36.
    「二変数の差」を作る頻出テク 4. 区間の和: 𝑥𝑖+ 𝑥𝑖+1 + ⋯ + 𝑥𝑗 ≤ 𝑤𝑖𝑗  𝑝𝑖 − 𝑝0 ≔ 𝑥1 + ⋯ + 𝑥𝑖 とおくと、𝑝𝑗 − 𝑝𝑖−1 ≤ 𝑤𝑖𝑗 5. 円形区間和: 𝑥𝑖 + 𝑥𝑖+1 + ⋯ + 𝑥 𝑛 + 𝑥1 + ⋯ + 𝑥𝑗  総和 𝑆 ≔ 𝑥1 + ⋯ + 𝑥 𝑛 を全通り試す・二分探索 などにより固定し、制約 𝑥1 + ⋯ + 𝑥 𝑛 = 𝑆 を追加  𝑆 − (𝑥𝑗+1 + ⋯ + 𝑥𝑖−1) と通常の区間和になる (𝑆は変数でなく定数なことに注意) 36 = −
  • 37.
    例題: Asteroids2 (出典:UTPC 2013) https://utpc2013.contest.atcoder.jp/tasks/utpc2013_08 𝑁次元ベクトル𝑝, 𝑞と 𝑁 × 𝑁行列𝐴, 𝐵 が与えられるので 0 ≤ 𝑢𝑖 ≤ 𝑝𝑖 𝑖 ∈ 𝑁 0 ≤ 𝑣𝑗 ≤ 𝑞 𝑗 (𝑗 ∈ [𝑁]) 𝐴𝑖𝑗 ≤ 𝑢𝑖 + 𝑣𝑗 ≤ 𝐵𝑖𝑗 𝑖, 𝑗 ∈ N を満たす整数ベクトル 𝑢, 𝑣 が存在するか判定せよ。 37 ∞ −∞ 3 2 1 1 7 5 3 1 2 4 No
  • 38.
    例題: Asteroids2 (出典:UTPC 2013) 新たに変数𝑠を導入し、𝑢𝑖 → 𝑢𝑖 − 𝑠, 𝑣𝑖 → 𝑠 − 𝑣𝑖 と置き 直すと、 0 ≤ 𝑢𝑖 − 𝑠 ≤ 𝑝𝑖 𝑖 ∈ 𝑁 0 ≤ 𝑠 − 𝑣𝑗 ≤ 𝑞 𝑗 (𝑗 ∈ [𝑁]) 𝐴𝑖𝑗 ≤ 𝑢𝑖 − 𝑣𝑗 ≤ 𝐵𝑖𝑗 𝑖, 𝑗 ∈ N 全て差の形になったので負閉路検出して終了 38
  • 39.
    例題: Cashier Employment(出典: Tehran 2000) http://poj.org/problem?id=1275 24時間営業のスーパーが店員を募集している。𝑖 時か ら 𝑖 + 8 時までの8時間働く(日を跨ぐ可能性あり)こと を希望する応募者が𝑐𝑖人居る。𝑖 時から 𝑖 + 1 時の間は 少なくとも 𝑟𝑖 人の店員が必要である。最小何人の店員 を雇えばよいか? 𝑖 時から 𝑖 + 8 時希望の応募者から 𝑥𝑖 人を雇うとすると、 σ 𝑗=0 7 𝑥(𝑖−𝑗) mod 24 ≥ 𝑟𝑖 が満たされる必要がある。  円形区間和 39
  • 40.
    例題: Cashier Employment(出典: Tehran 2000) 雇う人数の最小値を二分探索で求めよう。 𝑝𝑖 − 𝑝0 ≔ 𝑥0 + ⋯ + 𝑥𝑖−1 とすると、𝑘 人で可能かは以 下のLPで判定できる。 𝑝24 − 𝑝0 = 𝑘 0 ≤ 𝑝𝑖+1 − 𝑝𝑖 ≤ 𝑐𝑖 (𝑖 = 0, … , 23) 𝑝𝑖+1 − 𝑝𝑖−7 ≥ 𝑟𝑖 (𝑖 = 7, … , 23) 𝑘 − 𝑝17+𝑖 − 𝑝𝑖+1 ≥ 𝑟𝑖 𝑖 = 0, … , 6 全て差の形になったので負閉路検出して終了 40 類題: YamanoteLine (SRM553Hard) 円形区間和の上限・下限制約で総和の取りうる値の総数を求める
  • 41.
    まとめ  目的関数・制約が全て「二変数の差」 (𝑥− 𝑦) の形 ⇒ 最短路・負閉路検出の双対  辺の向きに迷ったらBellmanFordの更新式を思い出そう  「二変数の差」を作る頻出テクを覚えておこう 41
  • 42.
  • 43.
    フロー 各辺𝑒に容量𝑐 𝑒(≥ 0)のある有向グラフと供給需要関数 𝑏:𝑉 → ℝ に対して、以下を満たす𝑓: 𝐸 → ℝ≥0 を「許容 フロー」という。 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣 0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 ∀𝑒 ∈ 𝐸 43 𝑣 𝛿− (𝑣) 𝛿+(𝑣) 𝑏 𝑣 > 0な点では 𝑏 𝑣湧き出る 𝑏 𝑣 = 0な点では 入る量=出る量 𝑒を通して最大𝑐 𝑒 まで流せる 𝑏 𝑣 < 0な点では −𝑏 𝑣消費する
  • 44.
    最小費用流問題 最小重みの許容フローを求める問題  最短路(𝑏𝑠 =1, 𝑏𝑡 = −1, 𝑏 𝑣 = 0)の自然な拡張 minimize 𝑓 σ 𝑒∈𝐸 𝑤𝑒 𝑓𝑒 subject to 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣 0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 (∀𝑒 ∈ 𝐸) 多項式時間で解ける  アルゴリズムの解説は省略  他の資料で勉強してね 44
  • 45.
    双対LP minimize 𝑓 σ𝑒∈𝐸 𝑤𝑒 𝑓𝑒 s.t. 𝑓 𝛿− 𝑣 − 𝑓 𝛿+ 𝑣 = −𝑏 𝑣 (× 𝑝 𝑣) 0 ≤ 𝑓𝑒 ≤ 𝑐 𝑒 (× 𝑧 𝑒) maximize 𝑝,𝑧 − σ 𝑣 𝑏 𝑣 𝑝 𝑣 − σ 𝑒 𝑐 𝑒 𝑧 𝑒 s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣 (× 𝑓𝑢𝑣) 𝑧 𝑒 ≥ 0 𝑤が整数なら、𝑝も整数最適解が存在  最短路反復法で使うポテンシャル𝑝が実は双対最適解 45 =
  • 46.
    もう少し整理 maximize 𝑝,𝑧 −σ 𝑣 𝑏 𝑣 𝑝 𝑣 − σ 𝑒 𝑐 𝑒 𝑧 𝑒 s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣 𝑧 𝑒 ≥ 0 minimize 𝑝,𝑧 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑒 𝑐 𝑒 𝑧 𝑒 s.t. 𝑝 𝑣 − 𝑝 𝑢 − 𝑧 𝑢𝑣 ≤ 𝑤 𝑢𝑣 𝑧 𝑒 ≥ 0 minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣) 46 −1倍 = 𝑧 𝑢𝑣 の値は 𝑝 𝑢, 𝑝 𝑣 から定まる
  • 47.
    解ける問題 47 minimize 𝑝 σ𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)  線形関数とmax(0, 二変数の差 − 定数)の和 𝑝 𝑣 − 𝑝 𝑢 0 𝑤 𝑢𝑣 傾き = 𝑐 𝑢𝑣 > 0
  • 48.
    解ける問題 実は任意の下に凸な折れ線が表現可能  傾き負と正に分け、傾きの変化を係数とすれば良い −1 +max 0, −𝑥 + max 0, 𝑥 − 1 + 2 max(0, 𝑥 − 3) 48 𝑥 = 𝑝 𝑣 − 𝑝 𝑢 0 −1 傾き3 −1 1 1 3 傾き1 傾き0 傾き−1
  • 49.
    解ける問題 49 minimize 𝑝 σ𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣) 「二変数の差に関する下に凸な折れ線」の和 の最小化は最小費用流で解ける。  折れ線を分解して上の形にしてからグラフを構築すれば 良い  σ 𝑣 𝑏 𝑣 = 0 なことを考えると、σ 𝑣 𝑏 𝑣 𝑝 𝑣の部分もこの形  最短路のときの「二変数の差」を作る頻出テクがこっちで も役に立つ  途中で−1倍したので、最小値 = −最小費用流なことに 注意
  • 50.
    例題: How toCreate a Good Game (出典: JAG Summer 2010) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2230 𝑁(≤ 100)点𝑀(≤ 1000)辺のDAGが与えられる。点0か ら点𝑁 − 1へのLongest Pathの長さを変えないように、 出来るだけ辺の重みを増やしたい。増やす重みの和の 最大値を求めよ。 Longest Pathの長さを𝐷、辺𝑒の重みを𝑤𝑒、増やす量を 𝑎 𝑒とすると、 max 𝑎≥0 σ 𝑒 𝑎 𝑒 s.t. Longest Pathの長さが𝐷 50
  • 51.
    例題: How toCreate a Good Game (出典: JAG Summer 2010) 最短路の双対から、Longest Pathの長さが𝐷以下 ⇔ 以下を満たす𝑝が存在。 𝑝 𝑁−1 − 𝑝0 ≤ 𝐷 𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣 よって、解きたい問題は max 𝑎,𝑝 σ 𝑒 𝑎 𝑒 𝑝 𝑁−1 − 𝑝0 ≤ 𝐷 𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣 𝑎 𝑒 ≥ 0 51
  • 52.
    例題: How toCreate a Good Game (出典: JAG Summer 2010) 52 min 𝑎,𝑝 σ −𝑎 𝑒 𝑝 𝑁−1 − 𝑝0 ≤ 𝐷 𝑝 𝑣 − 𝑝 𝑢 ≥ 𝑤 𝑢𝑣 + 𝑎 𝑢𝑣 𝑎 𝑒 ≥ 0 𝑝 𝑣 − 𝑝 𝑢 0 𝑤 𝑢𝑣 傾き−1 ∞ −𝑎 𝑢𝑣 下に凸なので分解して最小費用流で終了 −1倍して = ∞ max 0, 𝑝 𝑢 − 𝑝 𝑣 + 𝑤 𝑢𝑣 + 𝑝 𝑢 − 𝑝 𝑣 + 𝑤 𝑢𝑣
  • 53.
    例題: じょうしょうツリー (出典:UTPC 2012) https://utpc2012.contest.atcoder.jp/tasks/utpc2012_12 各頂点𝑣が値𝑐𝑖を持つ𝑁(≤ 105)点の根付き木が与えら れる。コストを1払うことで一つの頂点の値を±1変更で きる。各点𝑢とその子供𝑣について、𝑐 𝑢 > 𝑐 𝑣が成り立つ ように変更する最小コストを求めよ。 53 コスト8
  • 54.
    例題: じょうしょうツリー (出典:UTPC 2012) 簡単な変形で、 𝑐 𝑢 > 𝑐 𝑣ではなく 𝑐 𝑢 ≥ 𝑐 𝑣 を目指す問題に出来る。 𝑝 𝑣 ≔ 変更後の𝑣の値、とすると min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑐 𝑣| s.t. 𝑝 𝑢 ≥ 𝑝 𝑣 |𝑝 𝑣 − 𝑐 𝑣|が一変数なので𝑝 𝑣 → 𝑝 𝑣 − 𝑝0と置き直すと min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣| s.t. 𝑝 𝑢 ≥ 𝑝 𝑣 54 𝑝 𝑣 − 𝑝0 0 𝑐 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣| 下に凸なので分解して最小費用流で終了 …と言いたいところだが𝑁が大きいのでTLE
  • 55.
    例題: じょうしょうツリー (出典:UTPC 2012) min 𝑝 σ 𝑣 |𝑝 𝑣 − 𝑝0 − 𝑐 𝑣| s.t. 𝑝 𝑢 ≥ 𝑝 𝑣 分解すると、 min 𝑝 σ 𝑣 max(0, 𝑝 𝑣 − 𝑝0 − 𝑐 𝑣) 0から𝑣へ容量1重み𝑐 𝑣 + σ 𝑣 max(0, 𝑝0 − 𝑝 𝑣 + 𝑐 𝑣) 𝑣から0へ容量1重み−𝑐 𝑣 + σ 𝑢𝑣 ∞max(0, 𝑝 𝑣 − 𝑝 𝑢) 𝑢から𝑣へ容量∞重み0 55 𝑣 𝑢 0 0 𝑐 𝑢 −𝑐 𝑢 𝑐 𝑣 −𝑐 𝑣
  • 56.
    例題: じょうしょうツリー (出典:UTPC 2012) 需要供給無しなので、負閉路を詰め込む問題。 グラフの形から全ての負閉路は0 → 𝑢 → 子供 → ⋯ → 𝑣 → 0という形をして おり、葉から根に向かって以下の貪欲法で解ける。 𝑢 … 𝑣0というパスでまだ使えるものの長さをヒープで管理する。 𝑢を以下のようにして処理する 1. 子供のヒープを全てマージ 2. ヒープにパス𝑢0の長さ−𝑐 𝑢を突っ込む 3. 𝑐 𝑢 + ヒープの最小値 < 0 ならばヒープからpopして貪欲に使う データ構造をマージする一般的テクで𝑂(𝑛 log2 𝑛) マージ可能ヒープを用いると𝑂(𝑛 log 𝑛) 56 𝑣 𝑢 0 0 𝑐 𝑢 −𝑐 𝑢 𝑐 𝑣 −𝑐 𝑣
  • 57.
    例題: じょうしょうツリー (出典:UTPC 2012) 𝑢 … 𝑣0というパスでまだ使えるものの長さをヒープで管理する。 𝑢を以下のようにして処理する 1. 子供のヒープを全てマージ 2. ヒープにパス𝑢0の長さ−𝑐 𝑢を突っ込む 3. 𝑐 𝑢 + ヒープの最小値 < 0 ならばヒープからpopして貪欲に使う 57 6 2 10 3 5 8 9 5 −9 −5 −3 −5 −9, −8, −5 → −8, −5 −5, −3, −2 → −3, −2 −10, −8, −5 −10, −8, −5, −3, −2 答え: 9 − 8 + 5 − 2 + 10 − 6 = 8
  • 58.
    例題: じょうしょうツリー (出典:UTPC 2012) 貪欲の証明: 𝐷 𝑢 ≔ 𝑢以下の頂点集合(𝑢を含む)とすると、𝑢を処理し終えた段 階で𝐺[ 0 ∪ 𝐷 𝑢]の最小費用流が求まっていることを示す。 𝐺[ 0 ∪ 𝐷 𝑢 ∖ 𝑢 ]の最小費用流は、グラフの形から各子供𝑣につ いて𝐺[ 0 ∪ 𝐷𝑣]の最小費用流の和と等しい。 𝑢を追加したことで生じる新たな閉路は0𝑢 … 𝑣0という形のものだ けであり、0𝑢の容量が1であることから、この中で最小のものを1 つ選べば最小費用流になる。 58 類題: 花火 (第二回ドワンゴからの挑戦状予選) Farm Village (JAG Asia 2017) 特殊なグラフの最小費用流
  • 59.
    まとめ  「二変数の差に関する下に凸な折れ線」の和の最小化 ⇒ 最小費用流の双対 下に凸な折れ線を分解して下の形にすればよい  𝑏 𝑣 ≔ 供給 − 需要  𝑢 → 𝑣 へ重み𝑤 𝑢𝑣、容量𝑐 𝑢𝑣の辺  𝑤 𝑢𝑣は負になる場合あり  特殊なグラフのフローは速く解ける可能性あり 59 minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)
  • 60.
  • 61.
    ラグランジュ緩和 61 𝑔 𝑥 =0 の制約がなければ 解けるんだけど・・・ max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔 𝑥 = 0
  • 62.
    ラグランジュ緩和 邪魔な制約を「ペナルティ」として目的関数に移動させ よう。(この操作をラグランジュ緩和という) 任意の 𝜆 (ラグランジュ乗数という)に対して次の不等式 が成り立つ。 62 max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔 𝑥 = 0 max 𝑥∈𝑃 𝑓(𝑥) − 𝜆𝑔 𝑥 ≤ これなら 解ける!max 𝑥∈𝑃 𝑓(𝑥) − 𝜆𝑔 𝑥 s.t. 𝑔 𝑥 = 0 = ∵ 𝑔 𝑥 = 0 なら 𝜆𝑔 𝑥 = 0 ∵ 制約が減った
  • 63.
    ラグランジュ双対 出来るだけ良い上界を求める問題を考えよう。 (この問題をラグランジュ双対という) 𝐿 𝜆 ≔max 𝑥∈𝑃 𝑓 𝑥 − 𝜆𝑔(𝑥) とすると、𝐿(𝜆)は下に凸となるので、 (三分探索などで)最小化出来る。 𝐿 𝛼𝜆1 + 1 − 𝛼 𝜆2 = 𝑓 𝑥∗ − 𝛼𝜆1 + 1 − 𝛼 𝜆2 𝑔(𝑥∗) = 𝛼 𝑓 𝑥∗ − 𝜆1 𝑔 𝑥∗ + 1 − 𝛼 𝑓 𝑥∗ − 𝜆2 𝑔 𝑥∗ ≤ 𝛼𝐿 𝜆1 + 1 − 𝛼 𝐿(𝜆2) 63 max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔 𝑥 = 0 min 𝜆 max 𝑥∈𝑃 𝑓(𝑥) − 𝜆𝑔 𝑥≤
  • 64.
    強双対性 𝑓 𝑥 −𝜆𝑔(𝑥) を最大化する𝑥の集合を𝑋(𝜆)と定義する。もし、 𝑥 ∈ 𝑋(𝜆)であって、𝑔 𝑥 = 0 となるものが存在すれば、等号が 成立する。𝜆 を小さくすれば𝑔(𝑥)は大きくなり、大きくすれば𝑔(𝑥) は小さくなるので、二分探索すればちょうど0になるものが見つか り元の問題が解けるのでは?  等号が成立しても全ての 𝑥 ∈ 𝑋(𝜆) で𝑔 𝑥 = 0 となるとは限らないの で、実際に𝑥を構築する方法は少し考えないといけない  最適値を求めるだけなら二分探索して終了 64 max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔 𝑥 = 0 min 𝜆 max 𝑥∈𝑃 𝑓(𝑥) − 𝜆𝑔 𝑥 = ? 一般には成り立たない が、LPでは成り立つ
  • 65.
    強双対性(LPの場合) 𝐴𝒙 ≤ 𝒃の多面体中で、(𝒄 − 𝜆𝒅)方向に一番遠い点を 求める問題。 𝜆 を動かすと、𝑋(𝜆)の範囲も連続的に動くので、ちょう ど𝒅𝒙 = 𝑘 となる点が存在する。 65 max 𝒙 𝒄𝒙 s.t. 𝐴𝒙 ≤ 𝒃 𝒅𝒙 = 𝑘 min 𝜆 max 𝒙 𝒄𝒙 − 𝜆(𝒅𝒙 − 𝑘) s.t. 𝐴𝒙 ≤ 𝒃 = 𝐴𝒙 ≤ 𝒃 𝒄 − 𝜆𝒅 𝒅𝒙 = 𝑘 𝑋(𝜆) 整数解に限定したら飛び越すかも
  • 66.
    𝒈 𝒙 ≤𝟎 の場合 LPの場合は等号成立 66 max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔 𝑥 ≤ 0 min 𝜆≥0 max 𝑥∈𝑃 𝑓(𝑥) − 𝜆𝑔 𝑥 ≤ ∵ 𝑔 𝑥 ≤ 0, 𝜆 ≥ 0 なら −𝜆𝑔 𝑥 ≥ 0
  • 67.
    複数個邪魔な場合 LPの場合は等号成立 67 max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔𝑖𝑥 = 0 (𝑖 ∈ [𝑛]) min 𝜆1,…,𝜆 𝑛 max 𝑥∈𝑃 𝑓(𝑥) − σ𝑖 𝜆𝑖 𝑔𝑖(𝑥) ≤
  • 68.
    双対LPとの関係 全部の制約をラグランジュ緩和すれば双対LPになる。 𝑥𝑖の係数は 𝑐𝑖 −𝐴∗𝑖 𝒚 (𝐴∗𝑖 ≔ 𝐴の𝑖列ベクトル) もし、ある 𝑖 で 𝑐𝑖 − 𝐴∗𝑖 𝒚 > 0 なら、max 𝒙 ⋯ = ∞ 逆に、全ての 𝑖 で 𝑐𝑖 − 𝐴∗𝑖 𝒚 ≤ 0 なら、max 𝒙 ⋯ = 𝒃𝒚 68 max 𝒙 𝒄𝒙 s.t. 𝐴𝒙 ≤ 𝒃, 𝒙 ≥ 0 min 𝒚≥0 max 𝒙 𝒄𝒙 − 𝒚T(𝐴𝒙 − 𝒃) s.t. 𝒙 ≥ 0 = min 𝒚 𝒃𝒚 s.t. 𝐴T 𝒚 ≥ 𝒄, 𝒚 ≥ 0 =
  • 69.
    双対LPとの関係 LPのラグランジュ双対は「双対LPを作る途中段階」だと 思うと、双対変数とラグランジュ乗数が同じものである ことがわかる。  𝒂𝒙 ≤𝑏 に対応する双対変数が最適双対解で取る 値と 𝒂𝒙 ≤ 𝑏を消すラグランジュ双対の最適解でラ グランジュ乗数が取る値は同じ  特に、双対LPが整数解を持つLPに対してラグラン ジュ双対を作れば、ラグランジュ乗数の最適値も 整数になる 69
  • 70.
    ラグランジュゲーの解き方 タイプ1: 解ける問題+邪魔な制約 ⇒ ラグランジュ緩和で制約を消し、二分探索などで双 対問題を解く タイプ2:min max ~ という形の最適化問題(ゲームとか) ⇒ ラグランジュ双対問題だとみなして元の max ~ の 形に戻して解く  等号が成り立つことを確認しよう(特に整数解が必 要な場合) 70
  • 71.
    例題: Min-Max (出典:POJ Monthly) の別解 𝑛 (≤ 50000)次元の非負実数ベクトル (𝜇1, … , 𝜇 𝑛) が あり、 σ𝑖 𝜇𝑖 = 1 を満たしている。2つのベクトル 𝑝, 𝑞 と 実数𝐶が与えられる。σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 であるとき、σ𝑞𝑖 𝜇𝑖 の 取りうる値の最小値・最大値を求めよ。 71 http://poj.org/problem?id=2595 min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖 σ𝑖 𝜇𝑖 = 1 σ𝑖 𝑝𝑖 𝜇𝑖 = 𝐶 𝜇𝑖 ≥ 0 ←この制約がなければ非常に簡単 (一番小さい𝑞𝑖に対して𝜇𝑖 = 1とすればよい)
  • 72.
    例題: Min-Max (出典:POJ Monthly) の別解 ラグランジュ双対を取ると、 max 𝜆 min 𝜇 σ𝑖 𝑞𝑖 𝜇𝑖 + 𝜆(σ𝑖 𝑝𝑖 𝜇𝑖 − 𝐶) σ𝑖 𝜇𝑖 = 1 𝜇𝑖 ≥ 0  (𝑞𝑖 + 𝜆𝑝𝑖) が一番小さい 𝑖 に対して、𝜇𝑖 = 1 とすれば 内側の最小化可能。  𝑝𝑖 − 𝐶 の符号で二分探索すれば外側の最大化が出 来る。 双対LPで幾何の問題にするより、かなり簡単! 72
  • 73.
    例題: Skyland (出典:JAG Spring 2012) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2396 𝑛 (≤ 100)個の浮遊島がある。各島の高度は0以上の 任意の実数値に設定できる。𝑖 番目の島を高度ℎにする にはコストが𝑑𝑖ℎかかる。島𝑖と島𝑗の高度差が𝑥あるとコ ストが𝑐𝑖𝑗 𝑥かかる。高度の合計を𝐻以上にする最小コス トを求めよ。(本来はそのようなℎを求める問題) 73 min ℎ σ𝑖 𝑑𝑖ℎ𝑖 + σ𝑖𝑗 𝑐𝑖𝑗|ℎ𝑖 − ℎ𝑗| σ𝑖 ℎ𝑖 ≥ 𝐻 ℎ𝑖 ≥ 0 ←この制約がなければ 双対最小費用流の形
  • 74.
    例題: Skyland (出典:JAG Spring 2012) ラグランジュ双対を取ると、  双対最小費用流で内側の最小化が可能  よく眺めると全ての重みが0なので、供給需要を満 たすフローがあるか判定問題→最大流  許容フローがあるかどうかで二分探索すれば外側の 最大化が可能  解の構築はこの方針だともう少し考察が必要 74 max 𝜆≥0 min ℎ σ𝑖 𝑑𝑖ℎ𝑖 + σ𝑖𝑗 𝑐𝑖𝑗|ℎ𝑖 − ℎ𝑗| −𝜆(σ𝑖 ℎ𝑖 − 𝐻) ℎ𝑖 ≥ 0
  • 75.
    解の構築方法(プロ向け補足) 解の構築がしたい場合は? 重み0の最小費用流の双対なので、単純にはℎ = 0が 解として求まってしまい、σ𝑖ℎ𝑖 = 𝐻 とならないので、別 の最適解を構築する必要がある。 ℎ𝑖 → ℎ𝑖 − ℎ0 と置き換えてグラフを作ってみると、 75 0 𝑖 𝑗 𝑐𝑖𝑗 ∞ ∞ 𝑏0 = 𝜆𝑛 − σ𝑖 𝑑𝑖 𝑏𝑖 = 𝑑𝑖 − 𝜆 𝑏𝑗 = 𝑑𝑗 − 𝜆
  • 76.
    解の構築方法(プロ向け補足) 最適な𝜆における許容フロー𝑓を固定する。相補性定理 から、ℎが最適解 ⇔ 𝑓の残余グラフにおける全ての容 量正の辺𝑢𝑣でℎ 𝑣 ≤ ℎ 𝑢。もし0から全ての点が到達可能 なら、𝜆を𝜖増やしても許容フローが存在するので矛盾。 到達出来ない点集合𝑆に対して𝑣 ∈ 𝑆 で ℎ 𝑣 = 𝐻/|𝑆| と すれば良い。(このような最適解が存在することに先に 気づけば二分探索+最小カットで直接解ける) 76 0 𝑖 𝑗 𝑐𝑖𝑗 ∞ ∞ 𝑏0 = 𝜆𝑛 − σ𝑖 𝑑𝑖 𝑏𝑖 = 𝑑𝑖 − 𝜆 𝑏𝑗 = 𝑑𝑗 − 𝜆
  • 77.
    例題: Longest ShortestPath (出典: JAG Asia 2015) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2736 𝑁(≤ 200)点𝑀(≤ 2000)辺の重み付き有向グラフが与 えられる。各辺𝑒について、コスト𝑥 ⋅ 𝑐 𝑒(非負実数)支払う ことで重みを𝑤𝑒から𝑤𝑒 + 𝑥に増加させることが出来る。 予算𝑃の範囲内で𝑠-𝑡最短路の長さを最大化せよ。 77 max 𝑥 (重み𝑤 + 𝑥での𝑠−𝑡距離) σ 𝑒 𝑐 𝑒 𝑥 𝑒 ≤ 𝑃 𝑥 𝑒 ≥ 0
  • 78.
    例題: Longest ShortestPath (出典: JAG Asia 2015) ラグランジュ双対を取ると、  双対最小費用流で内側の最大化が可能  σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃の符号で二分探索すれば外側の最小化 が可能 78 min 𝜆≥0 max 𝑥 (𝑤 + 𝑥での𝑠−𝑡距離) − 𝜆 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃 𝑥 𝑒 ≥ 0 min 𝜆≥0 max 𝑥,𝑝 𝑝𝑡 − 𝑝𝑠 − 𝜆 σ 𝑒 𝑐 𝑒 𝑥 𝑒 − 𝑃 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 + 𝑥 𝑢𝑣 𝑥 𝑒 ≥ 0 = 𝑠-𝑡最短路の双対
  • 79.
    例題: Longest ShortestPath (出典: JAG Asia 2015) 入力が小さいのでこのままでも解けるが、もう少し高速 化が可能。𝜆 → 1/𝐹 と置き換えると、 これは(流量𝐹の最小費用流 + 𝑃)/𝐹 を最小化する問題 ⇒ 𝐹 を1ずつ増やしていくことで解ける 79 min 𝐹>0 max 𝑥,𝑝 (𝐹𝑝𝑡 − 𝐹𝑝𝑠 − σ 𝑒 𝑐 𝑒 𝑥 𝑒 + 𝑃)/𝐹 𝑝 𝑣 − 𝑝 𝑢 ≤ 𝑤 𝑢𝑣 + 𝑥 𝑢𝑣 𝑥 𝑒 ≥ 0
  • 80.
    例題: きたまさの逆襲 (出典:UTPC 2012) https://utpc2012.contest.atcoder.jp/tasks/utpc2012_10 重み付き二部グラフ𝐺 = (𝑈, 𝑉)がある。秋葉さんは大きさ|𝑉|の マッチングで出来るだけ重みの小さいものが欲しい。きたまささ んは重みを操作することで秋葉さんの妨害をしたい。𝑈の分割 𝑈 = 𝑈1 ∪ ⋯ ∪ 𝑈 𝑑があり、コスト𝑏𝑖を支払うことで𝑈𝑖に接続する全 ての辺の重みを1増えせる(複数回増やして良い)。(秋葉さんの マッチングの重み)−(きたまささんのコスト)を最大化せよ。 80 max 𝜆1,…,𝜆 𝑑≥0 min 𝑓 σ𝑖 σ 𝑢∈𝑈 𝑖 σ 𝑣(𝑤 𝑢𝑣 + 𝜆𝑖) 𝑓𝑢𝑣 − σ𝑖 𝑏𝑖 𝜆𝑖 𝑓: 大きさ|𝑉|のマッチング
  • 81.
    例題: きたまさの逆襲 (出典:UTPC 2012) ラグランジュ双対をとった形だと思うと、 81 max 𝜆1,…,𝜆 𝑑≥0 min 𝑓 σ 𝑒 𝑤𝑒 𝑓𝑒 + σ𝑖(σ 𝑢∈𝑈 𝑖 σ 𝑣 𝑓𝑢𝑣 − 𝑏𝑖)𝜆𝑖 𝑓: 大きさ|𝑉|のマッチング =min 𝑓 σ 𝑒 𝑤𝑒 𝑓𝑒 𝑓: 大きさ|𝑉|のマッチング σ 𝑢∈𝑈 𝑖 σ 𝑣 𝑓𝑢𝑣 ≤ 𝑏𝑖
  • 82.
    例題: きたまさの逆襲 (出典:UTPC 2012) これは(双対でなく普通の)最小費用流 82 min 𝑓 σ 𝑒 𝑤𝑒 𝑓𝑒 𝑓: 大きさ|𝑉|のマッチング σ 𝑢∈𝑈 𝑖 σ 𝑣 𝑓𝑢𝑣 ≤ 𝑏𝑖 𝑠 𝑈𝑖 𝑢 𝑣 𝑡 重み 容量 0 0 𝑤 𝑢𝑣 0 𝑏𝑖 1 1 1 この容量制約の双対変数が𝜆𝑖 よって整数解が存在 𝑈𝑖から出る流量 の和が𝑏𝑖以下
  • 83.
    例題: Homework (ICPCAsia 2017) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1385 (意訳) 2つの二部グラフ𝐺1 = (𝑈1 ∪ 𝑉, 𝐸1)と𝐺2 = (𝑈2 ∪ 𝑉, 𝐸2)が与えられる。𝑉 = 𝑉1 ∪ 𝑉2と分割し、(𝑈1, 𝑉1)と (𝑈2, 𝑉2)の最大マッチングの和を最小化せよ。 83 a b c 1 4 6 2 3 5 A B C 2 3 5 1 4 6 𝑈1 𝑉 𝑉 𝑈2 1 + 1 = 2
  • 84.
    例題: Homework (ICPCAsia 2017) 𝑓𝑒 ≔ 𝑒をマッチングに含めるか 𝜆 𝑣 ≔ 𝑣 を 𝑉1に含めるか と定義し、min max ~ の形で書くと 84 min 𝜆∈ 0,1 𝑉 max 𝑓 ෍ 𝑢𝑣∈𝐸1 𝜆 𝑣 𝑓𝑢𝑣 + ෍ 𝑢𝑣∈𝐸2 (1 − 𝜆 𝑣)𝑓𝑢𝑣 𝑓: 𝐺1, 𝐺2のマッチング 𝜆 𝑣 = 0なら𝑢𝑣を使っても意味なし
  • 85.
    例題: Homework (ICPCAsia 2017) 85 min 𝜆∈ 0,1 𝑉 max 𝑓 ෍ 𝑒∈𝐸2 𝑓𝑒 + ෍ 𝑣 𝜆 𝑣 ෍ 𝑢∈𝑈1 𝑓𝑢𝑣 − ෍ 𝑢∈𝑈2 𝑓𝑢𝑣 𝑓: 𝐺1, 𝐺2のマッチング max 𝑓 σ 𝑒∈𝐸2 𝑓𝑒 𝑓: 𝐺1, 𝐺2のマッチング σ 𝑢∈𝑈1 𝑓𝑢𝑣 − σ 𝑢∈𝑈2 𝑓𝑢𝑣 = 0 ∀𝑣 ∈ 𝑉 ≥ 𝜆 ∈ 0,1 𝑉となる最適解があれば等号成立
  • 86.
    例題: Homework (ICPCAsia 2017) 𝐺1で𝑣を使うなら𝐺2でも𝑣を使うような最大マッチングを 求める、最大流の基礎的な応用問題 (Dining@POJ 3281 と同じ問題)  最大流の双対解=最小カットは0,1の値を取るので 等号成立  他にも色々な方法で同じ解法に至れる(マトロイド交 差の双対など) 86 max 𝑓 σ 𝑒∈𝐸2 𝑓𝑒 𝑓: 𝐺1, 𝐺2のマッチング σ 𝑢∈𝑈1 𝑓𝑢𝑣 − σ 𝑢∈𝑈2 𝑓𝑢𝑣 = 0 ∀𝑣 ∈ 𝑉
  • 87.
    例題: Homework (ICPCAsia 2017) 87 a b c 1 4 6 2 3 5 A B C 2 3 5 1 4 6 𝑈1 𝑉 𝑉 𝑈2 𝑠 𝑡
  • 88.
    まとめ min max ~最適化 ⇒ ラグランジュ双対とみなして元に戻してみよう  双対LPが最適整数解を持つなら、ラグランジュ乗 数も最適整数解を持つ 88 max 𝑥∈𝑃 𝑓(𝑥) s.t. 𝑔 𝑥 = 0 min 𝜆 max 𝑥∈𝑃 𝑓(𝑥) − 𝜆𝑔 𝑥 ≤ LPでは等号成立 解ける問題+邪魔な制約 ⇒ ラグランジュ双対をとって𝑔 𝑥 の符号で 二分探索しよう 出来るだけ良い 上界を得たい
  • 89.
    全体のまとめ  LP双対  制約式の線形和で出来るだけ良い上界(下界)を作る 最短路・負閉路  目的関数・制約が「二変数の差」  最小費用流  「二変数の差に関する下に凸な折れ線」の和の最小化  minimize 𝑝 σ 𝑣 𝑏 𝑣 𝑝 𝑣 + σ 𝑢𝑣 𝑐 𝑢𝑣max(0, 𝑝 𝑣 − 𝑝 𝑢 − 𝑤 𝑢𝑣)  ラグランジュ双対  LP双対の途中段階とみなせる  邪魔な制約の除去  min max ~ 型最適化 89