データ構造とアルゴリズム
第十五回
(2015年1月16日)
近似アルゴリズム
http://www.sw.it.aoyama.ac.jp/2014/DA/lecture15.html
Martin J. Dürst
© 2010-14 Martin
J. Dürst 青山学院大学
目次
- 前回のまとめ・復習
- NP 問題への対策
- 近似アルゴリズム
- これからの予定
- 授業改善のための学生アンケート
前回のまとめ
- 多項式時間で (いまだに) 解けない問題が存在
- その多くは NP 完全 (又は NP 困難) 問題
- 難しい問題を早めに見分けるのが大事
- NP 完全の問題より解きにくい問題もある
NP 問題への対応
- NP 完全問題や NP 困難の問題は多い
- 実用的な問題が多い
- 効率的なアルゴリズムは知られてない
- 実用的な対策が必要
NP 問題への対策
- 問題の変更・限定
- 実用的なデータへの対応
- 近似アルゴリズムの設計・使用
一般的な方法もあるが、それぞれの問題に特化したものが多い
NP 問題の変更
具体例: 巡回セールスマン問題
- コストが平面上の直線の距離
- コストが三角不等式 (AB + BC ≤ AC) を満たすなど
(最適解の 1.5
倍以内の多項式時間のアルゴリズムが存在)
実用的なデータへの対応
具体例: 3-SAT
- 変数の数に比べ式が長い
→ 解が存在しないことを見せるのは簡単
(例:
(xa∨xb∨xc)
∧
(xa'∨xb'∨xc)
∧
(xa'∨xb∨xc')
∧...)
- 変数の数に比べ式が短い
→ 解を見つけることが簡単
- 変数の数に比べ式が中間の長さ
→ 本当に難しい
細かい調整などで現実的な使用が可能
大会: http://www.satcompetition.org
近似アルゴリズム
- 完璧な解がなくてもそれに近いものが欲しい
- 多くの近似アルゴリズムでは
「最適解の何倍以内」が保証可能
- 問題に特化した近似アルゴリズム
- 一般的な近似方法
- 山登り法
- シミュレーテッドアニーリング
- 遺伝的アルゴリズム
- など
問題に特化した近似アルゴリズム
具体例: ロード・バランシング
複数の ti
の時間がかかる仕事をm
個の機械でできるだけ早く終わらせる
- アルゴリズム 1:
- 仕事を順番に
一番まだ仕事が少ない機械に配置
- 合計時間は最適解の二倍以内
- アルゴリズム 2:
- 仕事を大きい順に
一番まだ仕事が少ない機械に配置
- 合計時間は最適解の 1.5倍以内
山登り法
(hill climbing)
- ある解から出発
- 現在の解の近くの解を算出、
その中から一番いいものを選出
- 改善ができなくなるまでに繰返す
- 問題点: 局所的な最適解からの脱出が不可能
シミュレーテッドアニーリング
(simulated annealing, 焼き鈍し法)
- 名前の由来:
温度を少しずつ下げながら結晶を創出
- ある解から出発
- 乱数を使って解を変更し、新しい解の候補を作成
- 変更を少しずつ小さくする (温度を下げる)
- 現在より最適な解を保持
- 悪化した解も一部保持
- 一定時間後や解の改善が見られなくなった時点で終了
- 保存された一番良い解を出力
- 問題点:
- 問題に合わせた調整が必要
(温度を下げる早さなど)
- 解の組み合わせが不可能
遺伝的アルゴリズム
(genetic algorithm)
- 解を遺伝的情報に例える
- 乱数で作った複数の解から出発
- 次世代の解の作成:
- 二つ (以上) の解からの情報の組み合わせ
(有性生殖に相当)
- 解内の情報の交換 (交叉 (組み替え) に相当)
- 乱数による解の変換 (突然変異に相当)
- 各世代で新解を多数作成、
一部乱数を交えて削減 (自然淘汰に相当)
- 一定時間後や解の改善が見られなくなった時点で終了
- 残った一番良い解を出力
- 問題点: 問題に合わせた調整が必要
まとめ
完璧に解けない「手におえない」問題で有効:
- 問題の変更・制限
- 実際のデータへの注目
- 近似解の算出
- 問題に特化した方法
- 山登り法
- シミュレーテッドアニーリング
- 遺伝的アルゴリズム、など
これからの予定
- 三年前期: 言語理論とコンパイラ
- 四年: 卒業研究
- 1月31日(金) 9:30~10:55: 期末試験
授業改善のための学生アンケート
お願い:
できるだけ自由記述を使って、具体的に書いてください
(悪い例: 発音が分かりにくい; 良い例:
さ行が濁っているかどうか分かりにくい)