AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

カードゲームを作ろう(14)

f:id:yasu9780:20161102082516p:plain

4人ともAIにして、一晩かけて自己対戦させたけど、2000戦ぐらいだとまだ勝率25%にならないですね。
モブ子とAliciaは12枚スタート。Unitychanと手前は13枚スタートなんでそのへんの差も出るかと思ったけど。

AI自己対戦を使うと、思考ルーチンを改良して、勝率で評価したりできるかも。
でももっと早くしないと時間がかかりすぎるか。
強化学習できるといいんだけど、初めの手札の良し悪しも大きいし、できるのかなあ?
論文でも検索してみるかな。

The challenge of poker

http://www.aaai.org/Papers/AAAI/1999/AAAI99-099.pdf

日本語論文あった

札譜データの学習を用いた大貧民モンテカルロプレイヤの強化
https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_action_common_download&item_id=146675&item_no=1&attribute_id=1&file_no=1&page_id=13&block_id=8

モンテカルロ法シミュレーションの手法ですね。以前、単純なモンテカルロ法による囲碁は作ったことがあります。

プレイアウトの確度を十分に得られないことがある.
この原因の 1 つは,実際のゲームにおいては選択されないような
弱い手を選択してしまうためである.

詰碁やモンテカルロ法で将棋をやった場合の問題点と同じですね。
1プレイアウトを高速に正確に偏りなく実装することが大事と。
(この前、プロに勝ったGoogleのAlphaGoもモンテカルロ法で、評価関数に深層学習の結果を用いていた)

本研究では,出す手役の優先度を求める評価関
数(提出手役評価関数)を機械学習を用いて作成
する.提出手役評価関数は,場と手札の状態,評
価値を計算する手を入力として与えることで,そ
の手を選択するべきかどうかを評価値として出力
する.

ここが肝ですね。
何を教師にしてるのかがいまいちよくわからないな。

学習対象のプレイヤが出した手役を正解,
学習対象のプレイヤが出さなかった合法手を不正解とする


すでにあるモンテカルロ法を使った思考ルーチンの手を教師にして学習ってこと?
モンテカルロシミュレーションした結果を、一発で判断できる評価関数を学習ってことかな。
将棋でいうと10手先を読んだ手を5手探索で発見できる評価関数みたいな感じで。