学校で生徒と対戦するジャンケンゲームを
作成するという課題が出たので製作中です!
MS-DOSを使った5000回のprintfによる
文字でのジャンケン対決…
そこで相手の出方によってこちらの出す手を
変化させていくような遺伝的アルゴリズムをやってみようかと
チャレンジしているのですが…
こんなもんわかるかボケェ!
といわんばかりに難しいです^^;
せいぜい今の自分にできるのは
相手の出した手を変数に保存、
自分の出した手と相手の出した手を比較させて
一番勝ってる手にしてやるとか
一番相手が多く出している手に強い手を出すようにするとか
なんかそれくらいのことしかできましぇん。
適応性を判断する関数だとか
突然変異だとか、交叉だとかわかるわけがないw
やはりまだまだ自分には遠かったか…
ちなみに乱数は使えません。
乱数封じを使われる危険性があるからです^^;
もうすこし考えてみるかぁ…GA…
ジェネリック・アルゴリズム
Re: ジェネリック・アルゴリズム
おぉ、なんか興味深い話題がw
私も一昨年ぐらいに知能工学かなんかのテストで
『じゃんけんに勝つAIを作るならどのように作ればいいと思いますか?』
みたいな問題が出ておぼろげな記憶を必死で呼び出して
ニューラルかなんかで解答した記憶があります。
AIと言えばマッチ箱の脳ですよね!
http://www.1101.com/morikawa/index_AI.html
とか適当に言ってみたり。
アドバイスになるかわかりませんがちょっと考えてみました。
(私のGAに対する認識が間違っている可能性もあります^^;)
AIの行動指針として
A.自分の出した手と相手の出した手を比較させて一番勝ってる手にする
B.一番相手が多く出している手に強い手を出す
C.……etc
等いくつかの方法を作っておきます。
で、それぞれの方法について
○%の確率でこの方法を使う
とAIを定義します。(A.60%,B.10%,C.30%)のように。
それぞれ値の違う物を10個体用意します。
それぞれ10戦ずつ相手と戦います。
100戦(10個体×10試合)終わったら適応度を調べます。
(例えば勝率を使ってみることにしましょう)
勝率の低い2個体を殺します。
上位2個体から子を2つ作ります。
(そのうち似たような物ばかりになるので突然変異とかを設定しておきましょう)
全部で5000戦なので50世代弱進むことになりますね。
個体数とか評価までの試合数は適当なのであしからず。
(10戦ずつ戦うとかはせずに、とりあえず適当な個体に戦わせておいて
裏で毎試合『自分だったらこれを出していて、勝敗はどうなるか』を
計算させて、何試合かごとに評価⇒子作りさせ、その時点で一番勝率の
高い個体に戦わせておくという方法もありますね)
私も一昨年ぐらいに知能工学かなんかのテストで
『じゃんけんに勝つAIを作るならどのように作ればいいと思いますか?』
みたいな問題が出ておぼろげな記憶を必死で呼び出して
ニューラルかなんかで解答した記憶があります。
AIと言えばマッチ箱の脳ですよね!
http://www.1101.com/morikawa/index_AI.html
とか適当に言ってみたり。
アドバイスになるかわかりませんがちょっと考えてみました。
(私のGAに対する認識が間違っている可能性もあります^^;)
AIの行動指針として
A.自分の出した手と相手の出した手を比較させて一番勝ってる手にする
B.一番相手が多く出している手に強い手を出す
C.……etc
等いくつかの方法を作っておきます。
で、それぞれの方法について
○%の確率でこの方法を使う
とAIを定義します。(A.60%,B.10%,C.30%)のように。
それぞれ値の違う物を10個体用意します。
それぞれ10戦ずつ相手と戦います。
100戦(10個体×10試合)終わったら適応度を調べます。
(例えば勝率を使ってみることにしましょう)
勝率の低い2個体を殺します。
上位2個体から子を2つ作ります。
(そのうち似たような物ばかりになるので突然変異とかを設定しておきましょう)
全部で5000戦なので50世代弱進むことになりますね。
個体数とか評価までの試合数は適当なのであしからず。
(10戦ずつ戦うとかはせずに、とりあえず適当な個体に戦わせておいて
裏で毎試合『自分だったらこれを出していて、勝敗はどうなるか』を
計算させて、何試合かごとに評価⇒子作りさせ、その時点で一番勝率の
高い個体に戦わせておくという方法もありますね)