Document

組合せ最適化問題と厳密解法
• 最小木、ナップサック問題、ビンパッキング、
巡回セールスマン問題
• LPによる上界・下界
• 分枝限定法
• 帰着とNP完全性
組合せ最適化
• 決定すべき変数が、組合せ的(集合の部分集合)であるような
数理計画問題を組合せ最適化という
E: 集合、
X : 実行可能な E の部分集合
F: 変数、E の部分集合、 f: 部分集合上で定義された目的関数
最小化
f(F)
制約条件 F ∈ X
(ただし、 X ⊆ 2E )
応用:広い
• NP-hard。100変数ぐらいから解けなくなる
• 誤差が多少あってよいなら、それなりに速く解ける
組合せ最適化:たとえば
• マッチング問題、割当て問題、配送計画、ビンパッキン
グ、巡回セールスマン問題、施設配置問題、スケ
ジューリング、時間割作成問題、勤務表作成問題、
ナップサック問題、安定集合問題、分割問題、ネット
ワークデザイン問題、集合被覆問題、など
• だいたい、NP-hard 問題
• 個々の問題に、個別の解法が研究されている
10000変数くらいのものが解ける問題から、
50くらいでアップアップのものまで様々
01整数計画として定式化
• 部分集合を決定する、という定式化では、一般の数理計画の上
に乗せずらい
• そこで、通常の数理計画のテイストで定式化してみる
+ E = {1,…,n }
+ F  (x1, x2,…,xn) で表す。
つまり、 F に i が入っているとき、xi = 1
最小化
f(x1, x2,…,xn)
制約条件 g(x1, x2,…,xn) ≦ b
x1, x2,…,xn ∈ { 0,1 }
• 多くの場合、f, g は線形の式で記述できる
基礎的な問題
• 数学的にきれいな構造がある
 基本的な解法がある
• 直接的な応用はあまりない
 単純化した場面を想定して用いられる
• 他の問題を解くとき、子問題として現れる
 他の問題の特殊ケースになっている
最小全張木問題
• グラフ G=(V,E) と 枝のコスト w が与えられる
• 家と家を電話線で結び、ネットワークを作る
• どういう結び方にすると、コスト最小になるだろうか
5
6
3
8
4
7
2
01整数計画で定式化
• グラフ G=(V,E) 枝のコスト w が与えられる
• 選ぶものは枝なので、枝に変数を割り当てる
• サイクルを作ってはいけないので、各サイクル(長さk)
に対して、その中の k-1 本以上は使ってはいけない、
という制約を入れる
最小化 Σwixi
制約 Σi∈C xi ≦ |C|-1
(全てのサイクル C について)
3
Σ xi = |V|-1
xi ∈ { 0,1 }
• 制約式が指数本ある
5
6
8
4
7
2
クラスカル法
• クラスカル法という方法を使うと、簡単に解ける
• コストの小さい枝から採用していく
• 無駄な枝(サイクルができる枝)は採用しない
5
6
3
8
4
7
2
クラスカル法の正当性
• クラスカル法で最小木でないもの(偽者)が求まった!
• 「最小木に含まれない偽者の枝」の中で、最も早く加えられたも
のを e とする
 e より先に加えられた枝は最小木と偽者で等しい
• 最小木に e を加えるとサイクル C ができる
• C には e より重い枝がある  入替ればもっと軽くなる
e
クラスカル法の計算時間
• コストの小さい枝から採用していく
 枝をコストでソート
O( |E| log |E| )
• サイクルができるかどうかのチェック
- 2分木を使って
O( log |V| )
- 最大 |E| 回
5
• 合計 O( |E| log |E| ) 時間
6
3
8
4
7
2
プリム法
• ある頂点を選ぶ
• 頂点(集合)から出て行く枝で、コスト最小枝を採用
• 新たにつながった頂点を集合に入れる
5
6
3
8
4
7
2
プリム法の正当性
• プリム法で最小木でないもの(偽者)が求まった!
• 「最小木に含まれない偽者の枝」の中で、最も早く加えられたも
のを e とする
 e より先に加えられた枝は最小木と偽者で等しい
• 最小木に e を加えて、出来るサイクルに、e より重い枝がある
 入替ればもっと軽くなる
e
プリム法の計算時間
• ある頂点を選ぶ
定数時間
• 頂点(集合)から出て行く枝で、コスト最小枝を採用
- 出て行く枝をヒープに入れる。1本あたり O( log |E| )
- 内部同士を結ぶようになった枝は消す
1本あたり O( log |E| )
- 消された枝は、2度とヒープに入らない
5
 合計 O( |E| log |E| ) 時間
6
3
8
4
7
2
難しい問題
• 最小全張木問題は、組合せ最適化の中でも比較的簡単に
(多項式時間で)解ける問題
• 他にも、最大マッチング、最小費用流、最短路などが、楽に
解ける(多項式時間で)問題
• しかし、こういった簡単な問題はごくわずか
• ほとんどは、NP完全(NP-complete)、あるいは NP困難(NPcomplete)とよばれる難しい問題のクラスに属する
• (多項式時間のアルゴリズムが存在しないだろうと言われて
いる)
問題の帰着
• 問題 A と問題 B があり、問題 B を変換すると、問題 A になる、あ
るいは、問題 A を解くと、+αの時間で問題 B が解けるとする
• n 個の数の中から、k 番目に大きな要素を見つける問題
 ソートすると、O(n) 時間で見つかる
 この問題は、ソートをつかって解ける
• こういった、問題 B を問題 A に変換すること、あるいは問題 A を
解くことで解く方法を、「問題 B を問題 A に帰着する」という
• このとき、問題 B のほうが、+α以上の時間がかかる限り、問題 A
より易しい
• 入出力に必ず O(n) 時間かかるので、上の例だと、ソートのほうが
難しい
充足可能性問題がNP困難
• 多項式時間、指数時間かかりそうな問題の中で、他の問題が多
項式時間で帰着できる、最も難しい問題がNP困難問題
• 充足可能性問題は、変数 x1,…,xn からなる論理式を満たす解が
あるかどうかを判定する問題
 変形して、連言標準形にしてあると思ってよい
• コンピュータの回路を論理式で記述できるので、ということ
• 非決定性チューリングマシンといって、指数個の可能性を平行し
て調べられるコンピュータの動作を論理式でシミュレートできる
• 組合せ的な難しい問題が、このマシンなら多項式時間で解ける
• その問題たちの中で、充足可能性問題は一番難しいことになる
(通常のコンピュータなら、指数時間かかりそう)
難しさの証拠
• 充足可能性問題は、難しい問題のランドマーク
 この問題より難しければ、難しそう
• 充足可能性問題より難しい問題を、NP困難問題とよぶ
• 非決定性チューリングマシンで、多項式時間で解ける問題をNP
問題とよぶ
• NPの問題で、 NP困難問題であるものをNP完全問題とよぶ
• NP問題の中で、最も難しい問題の部分がNP完全問題
近似解法
• NP完全問題は、ある意味、総当たりの解法を使わないと最
適解が求められない
• そこで、時間をかけて最適解を求めるのではなく、短時間で
それなりに良い解を見つける、という解法が近似解法
• 精度保障があるもの: 近似解法
(得られる解が、必ず、最適解の2倍以内、など)
• 精度保証がないもの: 発見的解法(メタ・ヒューリスティック)
(精度保証はないが、実験的に良い解が得られることがわ
かっているもの、あるいはそう思われるもの)
• 問題固有の性質を使うので、解法が細分化されている
(スケジューリング用、配送計画用、など)
組合せ最適化の近似解法
• 様々な手法がある
最もよく使われる方法:
1. 整数条件を線形緩和する
xi ∈ { 0,1 }  0 ≦ xi ≦ 1
(解集合が広くなるので、最適解は悪くはならない)
2. 得られた問題の最適解を見つける
(一般に小数解。整数解なら元問題の最適解)
3. 得られた最適解を、何かしらのルールで整数に丸める
(実行不能にならないように丸める)
最大独立集合問題
• グラフ G=(V,E) の独立集合(または安定集合):
G の頂点集合で、全ての頂点の組が枝で結ばれていないもの
• G の最大独立集合: G の独立集合で、頂点数が最大のもの
• 最大独立集合を求める問題は NP-hard
• 各頂点に変数を割り当て、独立集合に含まれるとき1になる、と
して整数計画で定式化すると、枝の両端点が独立集合に含ま
れない、という制約から、以下の問題が得られる
max. ∑ xi
s.t. xi + xj ≦ 1
xi ∈ {0,1}
for ∀(i,j) ∈ E
最大独立集合のLPによる近似
• 最大独立集合問題の整数計画の、整数条件を緩和する
max. ∑ xi
s.t. xi + xj ≦ 1
0 ≦ xi ≦ 1
for ∀(i,j) ∈ E
• 全ての変数に1/2 を割当てたものが実行可能解
 それほど精度は良くないが、一応、上限は得られる
• 各枝の片方だけが1になるように最適解を丸めると、独立集合
が得られる
• 2部グラフの場合は最適解になる
工夫の仕方
そのままではうまく精度保証ができないことが多い
各問題の構造に大きく影響されるので、
個別に上手に解法を設計する必要がある
1. 緩和問題を作る
緩和の仕方を工夫して(余計な制約を入れて)
なるべく元問題に近い(または性質の良い)緩和問題を作る
2. 得られた問題の最適解を見つける
整数条件を残し、線形計画以外の方法を使うこともある
3. 得られた最適解を、何かしらのルールで整数に丸める
精度を保証するため、いろいろなテクニックを使う
最大独立集合のLP近似の改良
• G の部分グラフで、任意の頂点の組が枝で結ばれているものを
クリークとよぶ  独立集合の補グラフ
• クリークの中からは、独立集合の頂点は1つしか選べない
 制約式が作れる
max. ∑ xi
s.t. ∑xi∈S xi ≦ 1
0 ≦ xi ≦ 1
for ∀クリーク S
• 全てのクリークを求めると指数個あるので、適当なところだけを
選んで、制約式にする
最大独立集合のLP近似の改良 (2)
• LPの解を丸めるときに、次数の小さい頂点から優先的に選ぶよ
うにすると、効率が良くなる
 星型のグラフが最悪(最良)のケース
• 解の精度がもう少し良くなる
分枝限定法
• 列挙問題を(変数を1つずつ固定して)いくつかに分割し、それぞ
れの最適解を求め、元の問題の最適解を求めるアルゴリズム
• 基本的にどんな組合せ最適化
問題にも使える
• 通常、指数時間か
かるが、厳密に
最適解を求める
ことができる
v1
v1, v2
v1
v1, v2
v1, v2
v1, v2
上界と下界による限定操作
• 分子限定法は、計算を速くするために枝刈りを行う
(これ以上進んでも最適解がある見込みのないところは省略する)
• 最小化問題を考える
• これから解こうとしてい
る部分問題の解の下界
が、今までに見つけた
v1, v2
解(暫定解)よりも
大きかったら、
見込みなし
v1
v1
v1, v2
v1, v2
v1, v2
巡回セールスマン問題
• セールスマンがお客のいる都市を回って帰ってくる
• どういうルートで回ると、移動距離が最短になるだろうか
問題の難度と解法
• NP-hard 問題である
• 厳密解法: 分枝限定法、分枝切除法など
• 近似解法はNP-Hard
• 発見的解法: 2-opt、挿入
距離が三角不等式を満たすと、いろいろなことが言える
• 近似解法: 3/2近似アルゴリズム、ε近似アルゴリズム
(FPTAS)
• 発見的解法: リン・カーニハン近傍探索
01整数計画として定式化
• 決めるのは、都市の順番
 順番を決めるように定式化するのは困難
• ルートに入る枝を選ぶ問題、として定式化
 都市 i の次に都市 j に行くとき、xij = 1 とする
最小化 Σwijxij
制約 Σi xij = 1 、 Σj xij = 1 (入る枝&出る枝 = 1)
Σi∈X, j∈V\X xij ≧ 2 ( X が島にならない)
xij ∈ { 0,1 }
• またまた制約式が指数本ある
ハミルトンサイクルが解ける
• 近似解法はNP-Hard: 巡回セールスマン問題の近似解
法でハミルトンサイクル問題が解ける
ハミルトンサイクル問題: 与えられたグラフに、全ての頂点
を通る(単純な)サイクルは存在するか?
問題の変換
移動時間をこのように設定しましょう
• 頂点の間に辺がある 1
• 頂点の間に辺がない +∞
ハミルトンサイクル‥ ‥ ‥ ‥ ‥ ‥
ハミルトンサイクルではない‥ ‥ ‥
有限の長さ
長さ無限大
問題の変換 (2)
• 頂点の間に枝がある
• 頂点の間に枝がない
1
+∞
経路がハミルトンサイクル
 枝だけ通る
 有限の長さ
経路がハミルトンサイクルではない
 枝ではない所を通る
 長さ無限大
近似解から元問題の解を得る
• 近似アルゴリズムがあるとする
近似解の長さは
有限だよ
 有限の長さのサイクルがある  ハミルトンサイクルがある
近似解の長さは
無限だよ
 最適解の長さは + ∞/n 以上
 ハミルトンサイクルはない
NP-hard問題が解ける  NP-hard問題より同じか難しい
難しさの比較
• 巡回セールスマン問題の近似アルゴリズムがあれば、ハミ
ルトンサイクル問題が解ける
 巡回セールスマン問題のほうが難しい
• ハミルトンサイクル問題はNP-complete
 巡回セールスマン問題もNP-complete
まとめ
• 基本的な組合せ最適化問題の紹介
• NP完全問題と帰着の解説
• 最小木問題のクラスカル法とプリム法の解説
• 巡回セールスマン問題が、近似ですら NP-complete 問題
である証明
• 巡回セールスマン問題の2近似アルゴリズム
• 巡回セールスマン問題のセービング法