集合知プログラミング勉強会 第五章 最適化
TRANSCRIPT
この本、誤植が多いらしい
❖ 古い刷を持っている人は注意
(初版第6刷はだいたい治ってました)!
❖ 正誤表:https://
sites.google.com/site/prgclctintelligence/errata
最適化 (optimization) とは?
❖ 多くは最小化 (minimization)!
❖ 「えっ、でも最大化したいんだけど」 => 正負逆転させて最小化問題に持ち込む!
❖ 「最適化とは、コスト関数(目的関数)を定義し、それが最小になるような変数を決定することである」
最適化を使う場面❖ どのような関数で表現されるかが不明である!
❖ 変数が多すぎる!
❖ 虱潰しするには計算コストが膨大すぎる!
❖ 解析的に最小値が求められない
❖ 最適化が必要ない例:y = x
2 + 2x+ 2
5.1 グループ旅行
❖ 6人が各々飛行機でニューヨークへ集まる!
❖ どのフライトを使うか?!
❖ コストの例 => 飛行時間・待ち時間・運賃….etc.
LGA
BOS
DAL
MIA
CAK
ORD
MIA
5.2 解の表現
❖ 数字のリスト(ベクトル)!
❖ [1, 4, 3, 2, 7, 3, 6, 3, 2, 4, 5, 3] (12次元)!
❖ [ Saymourの行きの便, Saymourの帰りの便, Frannyの行きの便, …., Lesの帰りの便]
5.3 コスト関数
❖ “悪さ”の尺度。小さいほどよい。!
❖ コスト関数の設計が一番むずかしい。!
❖ 最適化 (optimization) ≈ 最小化 (minimization)
コスト = 行きの飛行機代×6人 + 帰りの飛行機代×6人 !
+ 全員集まるまでの待ち時間×6人! + 帰りの飛行機に乗るまでの待ち時間! + レンタカーの追加料金
5.5 ヒルクライム
❖ 山登り法、勾配法、最急降下法などいろんな別名!
❖ 周りを見て、コスト関数が下がる方向に進む!
❖ 現在地の勾配 (gradient) を計算し、その反対側へ降りていく、を繰り返す!
x
(k+1) = x
(k) � ↵rf(x(k))
5.6 擬似アニーリング
❖ 「良い方向への動きを常に取り入れつつも、初期には悪い解も一部取り入れる」=> 山を登れる
x
コスト
高コストに進む確率
一定確率でコストが大きくなる方に進む
Tは毎回小さくするpi = exp(� |f(xi+1)� f(xi)|
T)
5.7 遺伝アルゴリズム❖ genetic algorithm!❖ まず個体群を生成し、コスト関数の値でランク付け!
❖ エリート主義 (elitism)!
❖ 突然変異 (mutation)!
❖ 交叉 or 交配 (crossover)
いろいろ面白い❖ 遺伝アルゴリズムでマリオ!
❖ http://www.nicovideo.jp/watch/sm18721450!
❖ https://www.youtube.com/watch?v=yZJ1V-zv_gU!
!
❖ 遺伝的アルゴリズムを楽しく理解できるサイトをまとめてみた!
❖ http://d.hatena.ne.jp/download_takeshi/20100723/1279837904
❖ 学生10人を寮に割り振る(10^4通り)!
!
!
!
❖ 完全解がコスト0になるようにコスト関数を設計するとGOOD
5.9 嗜好の最適化
学生が第一希望に割り当てられた:コスト0!
学生が第二希望に割り当てられた:コスト1!
希望にないところに割り当てられた:コスト3!
A寮(2) B寮(2) C寮(2) D寮(2) E寮(2)
5.9 嗜好の最適化
❖ この問題は制約付き(各寮に二人)!
❖ 学生でループを回し、学寮のスロットに一人ずつ割り当てていくことで有効解が得られる!
!
❖ ここだとランダム最適化と遺伝的アルゴリズムを適用
最適化問題の種類❖ 線形計画問題!
❖ 整数計画問題2次計画問題!
❖ 凸計画問題!
❖ 半正定値計画問題非線形計画問題!
❖ 組み合わせ最適化
学問分野で言うと、線形プログラミング? オペレーションズ・リサーチ?
計算理論の問題のクラス❖ P:多項式時間(Polynomial time)で解ける問題の集合!
❖ NP:非決定性多項式時間(Non-deterministic Polynomial
time)で解ける問題の集合!
❖ P≠NP予想!
❖ NP困難、NP完全!
❖ 計算機工学(Computer engineering)の分野になってくる