データ構造とアルゴリズム
第十三回 (2010年1月
15日)
近似アルゴリズム
http://www.sw.it.aoyama.ac.jp/2009/DA/lecture13.html
Martin J. Dürst
duerst@it.aoyama.ac.jp
© 2009-10 Martin
J. Dürst 青山学院大学
目次
- 前回の残り
- NP 問題への対策
- 近似アルゴリズム
- これからの予定
NP 問題への対応
- NP 完全問題や NP 困難の問題は多い
- 実用的な問題が多い
- 効率的なアルゴリズムは知られてない
- 実用的な対策が必要
NP 問題への対策
- 問題の変更・限定
- 実用的なデータへの対応
- 近似アルゴリズムの設計・使用
一般的な方法もあるが、ある問題に特化したものが多い
NP 問題の変更
具体例: 巡回セールスマン問題
- コストが平面上の直線の距離
- コストが三角不等式を満たす
など
実用的なデータへの対応
具体例: 3SAT
- 変数の数に比べて式が長い
→ 解が存在しないことを見せるのは簡単
- 変数の数に比べて式が短い
→ 解を見つけることが簡単
- 変数の数に比べて式が中間の長さ
→ 本当に難しい
近似アルゴリズム
- 完璧な解がなくてもそれに近いものが欲しい
- 多くの近似アルゴリズムでは
「最適解より何倍以内離れている」
ということが保証できる
- 問題に特化した近似アルゴリズム
- 一般的な近似方法
- シミュレーテッドアニーリング
- 遺伝的アルゴリズム
- 等
問題に特化した近似アルゴリズム
具体例: ロード・バランシング
複数の ti
の時間がかかる仕事をm
個の機械でできるだけ早く終わらせる
- アルゴリズム 1:
- 仕事を順番に一番まだ仕事が少ない機械に配置
- 合計時間は最適解の二倍以内
- アルゴリズム 2:
- 仕事を大きい順に一番まだ仕事が少ない機械に配置
- 合計時間は最適解の 1.5倍以内
シミュレーテッドアニーリング
(simulated annealing, 焼き鈍し法)
- 名前の由来: 温度を少しずつ下げながら結晶を創出
- ある解から出発
- 乱数を使って解を変更し、新しい解の候補を作成
- 変更を少しずつ小さくする (温度を下げる)
- 現在より最適な解を保持
- 一部悪化した解も保持
遺伝的アルゴリズム
(genetic algorithm)
- 解を遺伝的情報に例える
- 最初は複数の乱数で作った解から出発
- 各世代において交叉 (組み替え)
と突然変異で新しい解を作成
- いい方の解を乱数を交えて生き残す
期末試験
- 日付:
- 2009年 1月22日 (金曜日)
- 時間:
- 09:30-10:55 (85分間)
- 試験範囲:
- 授業・プリント・プログラムの全ての内容
- プログラムそのものは書く必要がないが、理解する必要はある
- 問題の種類:
- 情報数学 I や計算機実習 I と類似
- 2008年の問題:
- 閲覧には Opera を推奨
図と解答例の一部は欠落
解答例は「表示」→「スタイル」→「solutions」で表示可能
- 注意点:
- 問題をよく読む (計算、証明、説明などの区別)
- 概念の定義を自分の言葉でおさえる
- 綺麗な字で書く