集合知プログラミング勉強会 第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,309

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,309
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

集合知プログラミング勉強会 第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. ご清聴ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×