Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
集合知プログラミング勉強会 第11回第11章進化する知性 後半@gepuro
11.6 交叉(Crossover)● プログラムを変更する方法– 突然変異– 交叉– 交配● 交配– 2つのツリーを入力、両者を横断して下る– ランダムに、一番目のツリーを二番目のツリーの枝で置き換える– 置き換えた後、そのツリーを返す
11.7 環境を作り上げる● プログラムが進化する流れ– プログラムの集合をランダムにつくり上げる– 複製や変更をするためによいものたちを選択– 停止条件に達するまで繰り返す● プログラムをベストからワーストの順にランク付け(エリート主義)– ...
1.7.1 多様性の大事さ● ランク付けされたプログラムのうち上位の数個を使う– 集団が均一なもにになる– 交叉による変化が小さい● 局所最大に達する● もっともよい解決法たちと多くのほどよい解決法から、よりよい結果を生み出す
11.8 シンプルなゲーム● Grid WarというゲームのAIを作る。– 交互に格子の上を動く二人のプレイヤーが存在– それぞれのプレイヤーは、4つの方向のうち一つに向かって移動出来る– ボードには限りがあり、はみ出た場所へ移動するとそのター...
11.8.1 ラウンドロビントーナメント● プログラム同士を戦わせる– 負けたら、2点– 引き分け、一点● 点数の低いプログラムが優秀● プログラムの進化の過程で、負けの数ははっきりと減っていくものではない。● ベストなプレイヤーが次世代に● ...
11.8.2 実際の人間とプレイしてみる● 進化したプログラムと人間が戦う– ボードを画面に表示し、どこに移動するか尋ねるようにする● プログラムがどの程度うまく進化したかによって、勝つのが難しかったり、簡単だったりする
11.9 さらなる可能性● シンプルな問題だけでなく、複雑な問題にも拡張できる● 集団中のプログラムの数は、数千〜数万になるのが一般的● プログラムの実行は、数時間から数日かかることも● 工夫次第で、さまざまなアプリケーションのための拡張をする...
11.9.1 数学的な関数を増やす● sin、cos、tanのような三角関数● 累乗、平方根、絶対など● ガウス分布のような統計的分布● ユークリッド距離、Tanimoto距離のような尺度● 3つの変数を受け取り、最初の引数が2番目と3番目の引...
11.9.2 メモリ● 本章でのプログラムは、反応的– 結果は完全に入力を基にして出力– 直前の移動を次へ渡す● 二度同じ方向に動かないように学習● これは単に、プログラムの出力、設定したものではない● 長期的な戦力を持ったプログラムを開発– ...
11.9.3 さまざまなデータタイプ● 本章では、整数を受け取り、整数を返す● 浮動少数点● Strings– Concatenate,split,インデクシング、サブストリング● Lists– これらはstringsと同じような演算を持ってい...
ご清聴ありがとうございました
集合知プログラミング勉強会 第11回 後半 ~進化する知性~
Upcoming SlideShare
Loading in …5
×

集合知プログラミング勉強会 第11回 後半 ~進化する知性~

1,855 views

Published on

  • Be the first to comment

集合知プログラミング勉強会 第11回 後半 ~進化する知性~

  1. 1. 集合知プログラミング勉強会 第11回第11章進化する知性 後半@gepuro
  2. 2. 11.6 交叉(Crossover)● プログラムを変更する方法– 突然変異– 交叉– 交配● 交配– 2つのツリーを入力、両者を横断して下る– ランダムに、一番目のツリーを二番目のツリーの枝で置き換える– 置き換えた後、そのツリーを返す
  3. 3. 11.7 環境を作り上げる● プログラムが進化する流れ– プログラムの集合をランダムにつくり上げる– 複製や変更をするためによいものたちを選択– 停止条件に達するまで繰り返す● プログラムをベストからワーストの順にランク付け(エリート主義)– もっともよいプログラムは自動的に次の世代へ– ランキングの上位のプログラムをランダムに選び、交配や突然変異を行う● これを繰り返して、プログラムの集団を作る● 構築されたプログラムは複雑なりがち。
  4. 4. 1.7.1 多様性の大事さ● ランク付けされたプログラムのうち上位の数個を使う– 集団が均一なもにになる– 交叉による変化が小さい● 局所最大に達する● もっともよい解決法たちと多くのほどよい解決法から、よりよい結果を生み出す
  5. 5. 11.8 シンプルなゲーム● Grid WarというゲームのAIを作る。– 交互に格子の上を動く二人のプレイヤーが存在– それぞれのプレイヤーは、4つの方向のうち一つに向かって移動出来る– ボードには限りがあり、はみ出た場所へ移動するとそのターンは没収– あなたのターンの時に、相手プレイヤーと同じ升目に移動して、相手を補足したら勝ち– 制限事項● 行の同じ方向に二度進むと負け
  6. 6. 11.8.1 ラウンドロビントーナメント● プログラム同士を戦わせる– 負けたら、2点– 引き分け、一点● 点数の低いプログラムが優秀● プログラムの進化の過程で、負けの数ははっきりと減っていくものではない。● ベストなプレイヤーが次世代に● 次の世代では、前世代のプログラムは非常に悪いプログラムになることもある。
  7. 7. 11.8.2 実際の人間とプレイしてみる● 進化したプログラムと人間が戦う– ボードを画面に表示し、どこに移動するか尋ねるようにする● プログラムがどの程度うまく進化したかによって、勝つのが難しかったり、簡単だったりする
  8. 8. 11.9 さらなる可能性● シンプルな問題だけでなく、複雑な問題にも拡張できる● 集団中のプログラムの数は、数千〜数万になるのが一般的● プログラムの実行は、数時間から数日かかることも● 工夫次第で、さまざまなアプリケーションのための拡張をすることが可能
  9. 9. 11.9.1 数学的な関数を増やす● sin、cos、tanのような三角関数● 累乗、平方根、絶対など● ガウス分布のような統計的分布● ユークリッド距離、Tanimoto距離のような尺度● 3つの変数を受け取り、最初の引数が2番目と3番目の引数の間の値であれば1を返すような関数● などなど
  10. 10. 11.9.2 メモリ● 本章でのプログラムは、反応的– 結果は完全に入力を基にして出力– 直前の移動を次へ渡す● 二度同じ方向に動かないように学習● これは単に、プログラムの出力、設定したものではない● 長期的な戦力を持ったプログラムを開発– 次のラウンドで利用するための情報を保存● 事前に定義したスロットに値を保存● 値を引き出したりできる新しいノードを作る– 保存ノードは、一つの子とメモリスロットのインデックスを持つ– 再現ノードは、子を持たず、単に適切なスロットの中の値を返す● 他のプログラムと共有出来るメモリを持つ
  11. 11. 11.9.3 さまざまなデータタイプ● 本章では、整数を受け取り、整数を返す● 浮動少数点● Strings– Concatenate,split,インデクシング、サブストリング● Lists– これらはstringsと同じような演算を持っている● Dictionaries– これらは痴漢や追加のような演算を持つ● Objects– どのようなカスタムオブジェクトでも、ノード関数がオブジェクトに対してのメソッドコールでありさえすれば、ツリーの入力として利用できる
  12. 12. ご清聴ありがとうございました

×