集合知プログラミング5章前半

2,697 views

Published on

集合知プログラミング5章前半

  1. 1. 第5回 集合知プログラミング 5章最適化 前半戦 1@gepuro
  2. 2. 自己紹介● 所属:電気通信大学 システム工学科4年● 氏名:早川 敦士● Twitter: @gepuro● 専攻:信頼性工学● 興味:データ同化, 確率過程, テキストマイニ ング,などなど● 言語:python, R, awk, bash最近、pythonのマイクロフレームワークFlaskで遊んでます。 2
  3. 3. 5章の概要● 確率論的最適化について紹介されている● 多数の変数があり、様々な組み合わせが考え られる問題に対して、最適解を探すときに利 用される手法 5.1 グループ旅行 5.2 解の表現 5.3 コスト関数 5.4 ランダムサーチ(無作 為探索) 5.5 ヒルクライム 5.6 模擬アニーリング 5.7 遺伝アルゴリズム 今日のコードは、 3 https://github.com/gepuro/tokyoci5 にあります。
  4. 4. グループ旅行 CAKORD BOS さまざまな土地から同じ目的地 でグループ旅行を行い、レンタ LGA カーを借りて、帰宅するまでの スケジュールのコストを最適化 する。 考慮するコストの例 OMA ● 運賃 ● 飛行時間 ● 待ち時間 ● 発時間 DAL ● レンタカーの貸出期間 MIA 4
  5. 5. コスト関数 コスト= 出立便のチケット代*6人分 + 帰宅便のチケット代*6人 + 全員が到着するまでの待ち時間 + 全員が帰宅便に乗るまでの待ち時間 + レンタカーの追加料金コストが最小化するようなスケジュールを求める。 備考: 24時間以内にレンタカーを返却しないと、50ドルか かる。 5
  6. 6. 出力gepuro@tokyoci ~/tokyoci5 $ python optimization.py Seymour BOS 12:34-15:02 $109 12:08-14:05 $142 Franny DAL 12:19-15:25 $342 9:49-13:51 $229 Zooey CAK 9:15-12:14 $247 15:50-18:45 $243 Walt MIA 15:34-18:11 $326 14:08-16:09 $232 Buddy ORD 14:22-16:32 $126 15:04-17:23 $189 Les OMA 15:03-16:42 $135 6:19- 8:13 $239cost is 5583 書籍と結果が違うような・・・。 このプログラムが正しいものとして、進めていき ます。 6
  7. 7. ランダムサーチ(無作為探索)● スケジュールを乱数で作成し、それぞれのコ ストを求めて、最良の推測を返す。● 今回は、1000回繰り返し行い、求めた。 gepuro@tokyoci ~/tokyoci5 $ python randomoptimize.py Seymour BOS 13:40-15:37 $138 6:39- 8:09 $ 86 Franny DAL 10:30-14:57 $290 9:49-13:51 $229 Zooey CAK 12:08-14:59 $149 8:19-11:16 $122 Walt MIA 12:05-15:30 $330 12:37-15:05 $170 Buddy ORD 12:44-14:17 $134 10:33-13:11 $132 Les OMA 11:08-13:07 $175 12:31-14:02 $234 cost is 3738 7
  8. 8. ヒルクライム● 無作為解から出発し、近傍解の中からより優 れたものを探す 低コス 高コス ト ト 8
  9. 9. ヒルクライムの結果gepuro@ivy ~/tokyoci5 $ python hillclimb.py Seymour BOS 13:40-15:37 $138 8:23-10:28 $149 Franny DAL 6:12-10:22 $230 17:14-20:59 $277 Zooey CAK 13:40-15:38 $137 8:19-11:16 $122 Walt MIA 11:28-14:40 $248 12:37-15:05 $170 Buddy ORD 9:42-11:32 $169 7:50-10:08 $164 Les OMA 9:15-12:03 $ 99 8:04-10:59 $136cost is 3802 問題点 局所最小 ヒルクライムでは、局所最 小を求めてしまう。 局所最小 9 大域最小を求めた
  10. 10. 擬似アニーニング● ヒルクライムのパワーアップ版● 近傍のコストが現在のコストよりも大きくな る場合でも、ある確率で現在解とする。● プロセスが進むにつれて、悪い解を受け入れ る確率を下げていく 図:高コストが100,低コスト90の場合の p高コストの解が受け入れる確率p = e^(-(高コスト – 低コスト)/温度) 10
  11. 11. 擬似アニーニングの結果gepuro@tokyoci ~/tokyoci5 $ python annealing.py Seymour BOS 13:40-15:37 $138 10:33-12:03 $ 74 Franny DAL 10:30-14:57 $290 10:51-14:16 $256 Zooey CAK 8:27-10:45 $139 13:37-15:33 $142 Walt MIA 9:15-12:29 $225 15:23-18:49 $150 Buddy ORD 9:42-11:32 $169 10:33-13:11 $132 Les OMA 13:37-15:08 $250 11:07-13:24 $171cost is 3456 11
  12. 12. 遺伝(的)アルゴリズム 遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個体数をN, 最大世代数を G と置く。1. あらかじめ N 個の個体が入る集合を二つ用意する。以下、この二つの集合を「現世代」、「次世代」と呼ぶことにする。2. 現世代に N 個の個体をランダムに生成する。3. 評価関数により、現世代の各個体の適応度をそれぞれ計算する。4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行う。 2. 個体を一つ選択して突然変異(後述)を行う。 3. 個体を一つ選択してそのままコピーする。5. 次世代の個体数が N 個になるまで上記の動作を繰り返す。6. 次世代の個体数が N 個になったら次世代の内容を全て現世代に移す。7. 3. 以降の動作を最大世代数 G 回まで繰り返し、最終的に「現世代」の中で最も適応度の高い個体を「解」として出力する。 12 http://ja.wikipedia.org/wiki/遺伝的アルゴリズム より引用
  13. 13. 遺伝(的)アルゴリズム 遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個体数を N, 最大世代数を G と置く。1. あらかじめ N 個の個体が入る集合を二つ用意する。以下、この二つの集合を「現世代」、「次世代」と呼ぶことにする。 現世代:N 次世代:N 個 個 13
  14. 14. 遺伝(的)アルゴリズム2. 現世代に N 個の個体をランダムに生成する 現世代:N 個 [7,5,2,3,1,6,1,6,7,1,0,3] [0,4,0,3,8,8,4,4,8,5,6,1] [7,2,2,2,3,3,2,3,5,2,0,8] [5,8,0,2,8,8,8,2,1,6,6,8] 14 http://ja.wikipedia.org/wiki/遺伝的アルゴリズム より引用
  15. 15. 遺伝(的)アルゴリズム 3. 評価関数により、現世代の各個体の適応度をそれぞれ計算する 現世代:N 個 cost:6270 [7,5,2,3,1,6,1,6,7,1,0,3] cost:6396 [0,4,0,3,8,8,4,4,8,5,6,1] cost:4905 [7,2,2,2,3,3,2,3,5,2,0,8] cost:6375 [5,8,0,2,8,8,8,2,1,6,6,8] 15 http://ja.wikipedia.org/wiki/遺伝的アルゴリズム より引用
  16. 16. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行 う。 2. 個体を一つ選択して突然変異(後述)を行う。 3. 個体を一つ選択してそのままコピーする。 16 http://ja.wikipedia.org/wiki/遺伝的アルゴリズム より引用
  17. 17. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行 選択 う。 現世代:N 個 cost:6270 [7,5,2,3,1,6,1,6,7,1,0,3] cost:6396 [0,4,0,3,8,8,4,4,8,5,6,1] cost:4905 [7,2,2,2,3,3,2,3,5,2,0,8] cost:6375 [5,8,0,2,8,8,8,2,1,6,6,8] 17
  18. 18. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行 選択 う。 選択方法 • ルーレット選択 • p_i = f_i / Σf の確率で選択する方法 • ランキング選択 • 順位毎に選択確率を定めていく方法 • トーナメント選択 • 個体群からのランダムサンプリングして、その中で の適応度が高いものを選択する方法 • エリート主義 • 適応度が高いものを一定数、次世代に残す方法 集合知プログラミングでは、簡易のためなのかエリート主 義を用いられている。 18
  19. 19. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行 選択 う。 一点交叉の場合 [7,5,2,3,1,6,1,6,7,1,0,3] 他には、 • ニ点交叉 [7,2,2,2,3,3,2,3,5,2,0,8] • 多点交叉 • 一様交叉 がある。 [7,5,2,3,1,6,1,6,7,2,0,8] 19
  20. 20. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 2. 個体を一つ選択して突然変異(後述)を行う。 低い確率で、遺伝子の情報を書き換える。(0.1%〜数%程度) [5,8,0,2,8,8,8,2,1,6,6,8] [5,8,0,2,8,8,8,2,1,5,6,8] 20
  21. 21. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。 3. 個体を一つ選択してそのままコピーする。 [0,4,0,3,8,8,4,4,8,5,6,1] [0,4,0,3,8,8,4,4,8,5,6,1] 21
  22. 22. 遺伝(的)アルゴリズム5. 次世代の個体数が N 個になるまで上記の動作を繰り返す。 現世代:N 次世代:N 個 個 22
  23. 23. 遺伝(的)アルゴリズム 6. 次世代の個体数が N 個になったら次世代の内容を全て現世代に移す。 次世代:N 現世代:N 個 個 23
  24. 24. 遺伝(的)アルゴリズム 7. 3. 以降の動作を最大世代数 G 回まで繰り返し、最終的に「現世代」の中で最も適応度の高い個体を「解」として出力する。 第一世代:N 第ニ世代:N 個 個 第三世代:N 第G世代:N個 個 最適解の個体 24
  25. 25. 遺伝的アルゴリズムの結果gepuro@tokyoci ~/tokyoci5 $ python ga.py Seymour BOS 12:34-15:02 $109 10:33-12:03 $ 74 Franny DAL 6:12-10:22 $230 9:49-13:51 $229 Zooey CAK 12:08-14:59 $149 8:19-11:16 $122 Walt MIA 11:28-14:40 $248 8:23-11:07 $143 Buddy ORD 12:44-14:17 $134 7:50-10:08 $164 Les OMA 12:18-14:56 $172 8:04-10:59 $136cost is 2624 25
  26. 26. 最適化に向かない問題 探しにく い 26
  27. 27. ご清聴ありがとうございました! 27

×