SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
第5回 集合知プログラミング




          5章最適化 前半戦


                      1
@gepuro
自己紹介
●   所属:電気通信大学 システム工学科4年
●   氏名:早川 敦士
●   Twitter: @gepuro
●   専攻:信頼性工学
●   興味:データ同化, 確率過程, テキストマイニ
    ング,などなど
●   言語:python, R, awk, bash
最近、pythonのマイクロフレームワークFlaskで遊ん
でます。                            2
5章の概要
●   確率論的最適化について紹介されている
●   多数の変数があり、様々な組み合わせが考え
    られる問題に対して、最適解を探すときに利
    用される手法
    5.1 グループ旅行
    5.2 解の表現
    5.3 コスト関数
    5.4 ランダムサーチ(無作
    為探索)
    5.5 ヒルクライム
    5.6 模擬アニーリング
    5.7 遺伝アルゴリズム
           今日のコードは、
                                                3
           https://github.com/gepuro/tokyoci5
           にあります。
グループ旅行
            CAK
ORD
                          BOS
                                さまざまな土地から同じ目的地
                                でグループ旅行を行い、レンタ
                  LGA           カーを借りて、帰宅するまでの
                                スケジュールのコストを最適化
                                する。
                                考慮するコストの例
      OMA
                                ● 運賃

                                ● 飛行時間

                                ● 待ち時間

                                ● 発時間

      DAL                       ● レンタカーの貸出期間


                    MIA


                                             4
コスト関数
 コスト= 出立便のチケット代*6人分 +
     帰宅便のチケット代*6人 +
     全員が到着するまでの待ち時間 +
     全員が帰宅便に乗るまでの待ち時間
 +
     レンタカーの追加料金

コストが最小化するようなスケジュールを求
める。
  備考:
  24時間以内にレンタカーを返却しないと、50ドルか
  かる。                         5
出力

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 $239
cost is 5583


  書籍と結果が違うような・・・。
  このプログラムが正しいものとして、進めていき
  ます。
                                                       6
ランダムサーチ(無作為探索)
●   スケジュールを乱数で作成し、それぞれのコ
    ストを求めて、最良の推測を返す。
●   今回は、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
ヒルクライムの結果
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 $136
cost is 3802
                       問題点

           局所最小                        ヒルクライムでは、局所最
                                       小を求めてしまう。


                       局所最小                           9

                     大域最小を求めた
擬似アニーニング
●   ヒルクライムのパワーアップ版
●   近傍のコストが現在のコストよりも大きくな
    る場合でも、ある確率で現在解とする。
●   プロセスが進むにつれて、悪い解を受け入れ
    る確率を下げていく   図:高コストが100,低コスト90の場合の
                        p


高コストの解が受け入れる確率
p = e^(-(高コスト – 低コスト)/温度)




                                   10
擬似アニーニングの結果
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 $171
cost is 3456




                                                       11
遺伝(的)アルゴリズム
  遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個体数を
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/遺伝的アルゴリズム より引用
遺伝(的)アルゴリズム
 遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個
体数を N, 最大世代数を G と置く。
1. あらかじめ N 個の個体が入る集合を二つ用意する。以下、この二つの集合
を「現世代」、「次世代」と呼ぶことにする。




     現世代:N              次世代:N
     個                  個




                                         13
遺伝(的)アルゴリズム
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/遺伝的アルゴリズム より引用
遺伝(的)アルゴリズム
 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/遺伝的アルゴリズム より引用
遺伝(的)アルゴリズム
 4. ある確率で次の3つの動作のどれかを行い、その結果を次
世代に保存する。
 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行
  う。
 2. 個体を一つ選択して突然変異(後述)を行う。
 3. 個体を一つ選択してそのままコピーする。




                                                   16
     http://ja.wikipedia.org/wiki/遺伝的アルゴリズム より引用
遺伝(的)アルゴリズム
 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
遺伝(的)アルゴリズム
 4. ある確率で次の3つの動作のどれかを行い、その結果を次
世代に保存する。
 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行
         選択
  う。
      選択方法
  •   ルーレット選択
      • p_i = f_i / Σf の確率で選択する方法
  •   ランキング選択
      • 順位毎に選択確率を定めていく方法
  •   トーナメント選択
      • 個体群からのランダムサンプリングして、その中で
        の適応度が高いものを選択する方法
  •   エリート主義
      • 適応度が高いものを一定数、次世代に残す方法


        集合知プログラミングでは、簡易のためなのかエリート主
        義を用いられている。                   18
遺伝(的)アルゴリズム
 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
遺伝(的)アルゴリズム
 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
遺伝(的)アルゴリズム
 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
遺伝(的)アルゴリズム
5.   次世代の個体数が N 個になるまで上記の動作を繰り返す。




      現世代:N          次世代:N
      個              個




                                22
遺伝(的)アルゴリズム
 6. 次世代の個体数が N 個になったら次世代の内容を全て現世
代に移す。




     次世代:N          現世代:N
     個              個




                               23
遺伝(的)アルゴリズム
 7. 3. 以降の動作を最大世代数 G 回まで繰り返し、最終的に
「現世代」の中で最も適応度の高い個体を「解」として出力す
る。

   第一世代:N           第ニ世代:N
   個                個




    第三世代:N
                     第G世代:N個
    個
                      最適解の個体



                                    24
遺伝的アルゴリズムの結果
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 $136
cost is 2624




                                                       25
最適化に向かない問題




    探しにく
    い

             26
ご清聴ありがと
うございまし
た!    27

Más contenido relacionado

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

[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-EncoderDeep Learning JP
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装MITSUNARI Shigeo
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Takeshi Arabiki
 
AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21Yuki Higuchi
 

Similar a 集合知プログラミング5章前半 (6)

[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
[DL輪読会]Temporal DifferenceVariationalAuto-Encoder
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
RNASkim
RNASkimRNASkim
RNASkim
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21
 

Más de Atsushi Hayakawa

Zepp play soccerで測ってみた
Zepp play soccerで測ってみたZepp play soccerで測ってみた
Zepp play soccerで測ってみたAtsushi Hayakawa
 
dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?Atsushi Hayakawa
 
トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018Atsushi Hayakawa
 
バンクーバー旅行記
バンクーバー旅行記バンクーバー旅行記
バンクーバー旅行記Atsushi Hayakawa
 
Analyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.RAnalyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.RAtsushi Hayakawa
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使うAtsushi Hayakawa
 
トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017Atsushi Hayakawa
 
simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65Atsushi Hayakawa
 
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstallRstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstallAtsushi Hayakawa
 
統計的学習の基礎 4.4~
統計的学習の基礎 4.4~統計的学習の基礎 4.4~
統計的学習の基礎 4.4~Atsushi Hayakawa
 
Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝Atsushi Hayakawa
 
最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情Atsushi Hayakawa
 
nginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するnginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するAtsushi Hayakawa
 
implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化Atsushi Hayakawa
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくるAtsushi Hayakawa
 

Más de Atsushi Hayakawa (20)

tidyverse.orgの翻訳
tidyverse.orgの翻訳tidyverse.orgの翻訳
tidyverse.orgの翻訳
 
Zepp play soccerで測ってみた
Zepp play soccerで測ってみたZepp play soccerで測ってみた
Zepp play soccerで測ってみた
 
dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?dataclassとtypehintを使ってますか?
dataclassとtypehintを使ってますか?
 
トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018トライアスロンとgepuro task views V2.0 Japan.R 2018
トライアスロンとgepuro task views V2.0 Japan.R 2018
 
バンクーバー旅行記
バンクーバー旅行記バンクーバー旅行記
バンクーバー旅行記
 
Analyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.RAnalyze The Community Of Tokyo.R
Analyze The Community Of Tokyo.R
 
Visual Studio CodeでRを使う
Visual Studio CodeでRを使うVisual Studio CodeでRを使う
Visual Studio CodeでRを使う
 
トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017トライアスロンと僕 - Japan.R 2017
トライアスロンと僕 - Japan.R 2017
 
simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65simputatoinで欠損値補完 - Tokyo.R #65
simputatoinで欠損値補完 - Tokyo.R #65
 
useR!2017 in Brussels
useR!2017 in BrusselsuseR!2017 in Brussels
useR!2017 in Brussels
 
Japan.R 2016の運営
Japan.R 2016の運営Japan.R 2016の運営
Japan.R 2016の運営
 
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstallRstudio上でのパッケージインストールを便利にするaddin4githubinstall
Rstudio上でのパッケージインストールを便利にするaddin4githubinstall
 
統計的学習の基礎 4.4~
統計的学習の基礎 4.4~統計的学習の基礎 4.4~
統計的学習の基礎 4.4~
 
Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝Splatoon界での壮絶な戦い&Japan.Rの宣伝
Splatoon界での壮絶な戦い&Japan.Rの宣伝
 
最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情最近のクラウドストレージの事情と私情
最近のクラウドストレージの事情と私情
 
gepuro task views
gepuro task viewsgepuro task views
gepuro task views
 
nginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積するnginxのログを非スケーラブルに省メモリな方法で蓄積する
nginxのログを非スケーラブルに省メモリな方法で蓄積する
 
implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化implyを用いたアクセスログの可視化
implyを用いたアクセスログの可視化
 
イケてる分析基盤をつくる
イケてる分析基盤をつくるイケてる分析基盤をつくる
イケてる分析基盤をつくる
 
らずぱいラジコン
らずぱいラジコンらずぱいラジコン
らずぱいラジコン
 

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

  • 1. 第5回 集合知プログラミング 5章最適化 前半戦 1 @gepuro
  • 2. 自己紹介 ● 所属:電気通信大学 システム工学科4年 ● 氏名:早川 敦士 ● Twitter: @gepuro ● 専攻:信頼性工学 ● 興味:データ同化, 確率過程, テキストマイニ ング,などなど ● 言語:python, R, awk, bash 最近、pythonのマイクロフレームワークFlaskで遊ん でます。 2
  • 3. 5章の概要 ● 確率論的最適化について紹介されている ● 多数の変数があり、様々な組み合わせが考え られる問題に対して、最適解を探すときに利 用される手法 5.1 グループ旅行 5.2 解の表現 5.3 コスト関数 5.4 ランダムサーチ(無作 為探索) 5.5 ヒルクライム 5.6 模擬アニーリング 5.7 遺伝アルゴリズム 今日のコードは、 3 https://github.com/gepuro/tokyoci5 にあります。
  • 4. グループ旅行 CAK ORD BOS さまざまな土地から同じ目的地 でグループ旅行を行い、レンタ LGA カーを借りて、帰宅するまでの スケジュールのコストを最適化 する。 考慮するコストの例 OMA ● 運賃 ● 飛行時間 ● 待ち時間 ● 発時間 DAL ● レンタカーの貸出期間 MIA 4
  • 5. コスト関数 コスト= 出立便のチケット代*6人分 + 帰宅便のチケット代*6人 + 全員が到着するまでの待ち時間 + 全員が帰宅便に乗るまでの待ち時間 + レンタカーの追加料金 コストが最小化するようなスケジュールを求 める。 備考: 24時間以内にレンタカーを返却しないと、50ドルか かる。 5
  • 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 $239 cost is 5583 書籍と結果が違うような・・・。 このプログラムが正しいものとして、進めていき ます。 6
  • 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
  • 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 $136 cost is 3802 問題点 局所最小 ヒルクライムでは、局所最 小を求めてしまう。 局所最小 9 大域最小を求めた
  • 10. 擬似アニーニング ● ヒルクライムのパワーアップ版 ● 近傍のコストが現在のコストよりも大きくな る場合でも、ある確率で現在解とする。 ● プロセスが進むにつれて、悪い解を受け入れ る確率を下げていく 図:高コストが100,低コスト90の場合の p 高コストの解が受け入れる確率 p = e^(-(高コスト – 低コスト)/温度) 10
  • 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 $171 cost is 3456 11
  • 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. 遺伝(的)アルゴリズム 遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個 体数を N, 最大世代数を G と置く。 1. あらかじめ N 個の個体が入る集合を二つ用意する。以下、この二つの集合 を「現世代」、「次世代」と呼ぶことにする。 現世代:N 次世代:N 個 個 13
  • 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. 遺伝(的)アルゴリズム 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. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次 世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行 う。 2. 個体を一つ選択して突然変異(後述)を行う。 3. 個体を一つ選択してそのままコピーする。 16 http://ja.wikipedia.org/wiki/遺伝的アルゴリズム より引用
  • 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. 遺伝(的)アルゴリズム 4. ある確率で次の3つの動作のどれかを行い、その結果を次 世代に保存する。 1. 個体を二つ選択(選択方法は後述)して交叉(後述)を行 選択 う。 選択方法 • ルーレット選択 • p_i = f_i / Σf の確率で選択する方法 • ランキング選択 • 順位毎に選択確率を定めていく方法 • トーナメント選択 • 個体群からのランダムサンプリングして、その中で の適応度が高いものを選択する方法 • エリート主義 • 適応度が高いものを一定数、次世代に残す方法 集合知プログラミングでは、簡易のためなのかエリート主 義を用いられている。 18
  • 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. 遺伝(的)アルゴリズム 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. 遺伝(的)アルゴリズム 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. 遺伝(的)アルゴリズム 5. 次世代の個体数が N 個になるまで上記の動作を繰り返す。 現世代:N 次世代:N 個 個 22
  • 23. 遺伝(的)アルゴリズム 6. 次世代の個体数が N 個になったら次世代の内容を全て現世 代に移す。 次世代:N 現世代:N 個 個 23
  • 24. 遺伝(的)アルゴリズム 7. 3. 以降の動作を最大世代数 G 回まで繰り返し、最終的に 「現世代」の中で最も適応度の高い個体を「解」として出力す る。 第一世代:N 第ニ世代:N 個 個 第三世代:N 第G世代:N個 個 最適解の個体 24
  • 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 $136 cost is 2624 25
  • 26. 最適化に向かない問題 探しにく い 26