見出し画像

強いゲームAIの作り方?

ボードゲームでソロプレイとしてAI対戦が行われることがありますが、強いAIってどうやって作ればいいのでしょうかね。
思い当たるものを整理してみようと思いました。

なお、この記事は「強いAIの作り方」の記事ではないのでちういです。:-P
(強いAIの作り方を模索している情報をまとめた記事です)

基本は機械学習

もう今更ですが、どのような方法で実装するにしろ、基本的には機械学習でAIの思考を構築していくことになると思います。強いAIを作るためにはゲームを繰り返すことで自動的に性能が向上されていく仕組みが必須になるでしょう。
なお、とりあえずソロモードを作るためとか、テストを行うためとかなどでは、条件分岐を駆使したアルゴリズムでもよいかもしれないですが。
(でも、機械学習はめんどくさいので、初期に実装したアルゴリズムタイプのAIをそのまま使い続けるかもしれません。特にソロモードのために実装した場合などは、私ならそうします。だれだってそーするかも?:-P)

教師あり学習と強化学習

ボードゲーム的にいえば、毎回の盤面で適切な手が分かっており、こうするといいんだよーってAIに教えることができるのが教師あり学習です。一方、毎回の盤面で最適手がどれなのかは分かっておらず(つまり教えることができない)、最終的な勝敗だけAIに教えることができるのが強化学習となりますかね。
具体的な例がないと分かりにくいので、ここでは石取りゲームを例に挙げてみます。

学習の例1:石取りゲーム

ルールは以下です。
・2人で行うゲームです。
・最初に場に石がいくつかおかれます。(一般にはランダムに20個前後)
・お互い手番を交互に行い、手番ごとに場の石を1~3個の任意の数だけ取ります。
・最後の石を取ったら勝ちです。

画像1

このゲームはニムゲーム(あるいは単にニムと呼ばれる)の一種であり、既知の必勝法が存在します。それは「残っている石が4の倍数になるようにとっていった方が勝つ」というものです。
つまり、最初の石が21個や22個、23個の場合、先手が残っている石を4の倍数である20個に減らすことができるので先手必勝となり、逆に最初の石が20個や24個の場合は最初から4の倍数なので後手必勝となります。

アルゴリズム的なAIを作る場合、残る石の数が4の倍数となるように石を取るようにすればよいです。例えば、「4で割った余りが0個ならば、1個取る。そうでないならば余りの個数だけ取る。」です。(これはニムゲームが簡単なゲームであるため、アルゴリズムを考えるのも簡単だからできる手法であり、通常のボードゲームの最適アルゴリズムを見つけるのは一般には難しいです。)

教師あり学習の場合、各盤面で正解をAIにフィードバックしていくことになります。例えば、「4で割った余りが0個ならば、1個取るのが正解。そうでないならば余りの個数だけ取るのが正解。」といった具合です。これを繰り返すことで各盤面における適切な選択肢を学習していき、最終的には必勝法を身に着けた強いAIが出来上がります。

強化学習の場合、ゲームが終わるまで教師は口を出しません!
最後の石がとられたところで、あなたは勝ちましたとか、あなたは負けましたとか、AIにフィードバックできます。途中の盤面においては、どちらが有利か不利かさえ、AIに教えることができない学習方法です。
これに関する学習方法としてQ学習とかあるようですが、著者はまだよくわかっていません。:-(
この記事では強化学習とは何かを定義するところまでに留まります。

上記の機械学習について、ボードゲームでは強化学習を行うのが最も都合がよさそうです。途中の盤面について、有利不利を判断するのはそれなりにゲームになれている人にとっても難しい判断でしょうし。

まとめ

まとめると、強いAIを作るには(現状では)強化学習するのが必須となるのではないでしょうかね(遺伝的アルゴリズムを使用するにしろ、ニューラルネットワークを使用するにしろ)。
またなにか新しい技術が出てくればパラダイムシフトするかもしれないですが。

あと、実のところ強化学習に関する具体的な手法をあまり知らないので、強化学習に関する論文等、ご存じの方いましたら教えてください。m(_ _)m

Twitterの場合はこちらまで→@take20015005

参考文献?

[ニム(ニムゲーム)]
https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A0

[強化学習]
https://ja.wikipedia.org/wiki/%E5%BC%B7%E5%8C%96%E5%AD%A6%E7%BF%92

[Q学習]
https://ja.wikipedia.org/wiki/Q%E5%AD%A6%E7%BF%92


この記事が気に入ったらサポートをしてみませんか?