強化学習Q-Learningで最強のゲームAIの開発

ゲームの説明

1から順に交互に数字を言って10を言えた方が勝ちのゲームです

1ターンで数字は1つか2つ言えます。

プレイヤーは2人です。

このゲームは勝ちパターンがあるゲームです。勝ちパターンさえ把握していれば先行は必ず勝つことができます。

 

やること

3種類のAIを実装します。総当たりで戦わせ、最強のゲームAIを決定します。

 

ランダムプレイヤーの説明 

ランダムに行動を行います。

ランダムに1つ言うか2つ言うか選びます。

 

モンテカルロプレイヤーの説明

モンテカルロ法で行動を決定します。

モンテカルロ法とは、ある状態における行動を評価する方法です。自分がその行動をとったとして、そのまま最後までランダムプレイヤー同士にゲームを進めさせ、勝ったか負けたか記録します。これを何回も行い、勝率を計算して、その行動の良し悪しを評価するということです。

 今回は100回ランダム対戦させて行動評価します

 
Q-Learningプレイヤーの説明

強化学習の一種であるQ-Learningで学習し、行動を決定します。

Q-LearningではQ関数を学習します。

Q関数は、ある状態における、ある行動の評価値の配列で表現されます。今回は、状態が0から9の10種類、行動は1,2の2種類なので、Q関数は2*10の2次元配列です。

更新式は、Q(s,a)←(1-α)*Q(s,a)+α*(r+γ*maxQ(s',a'))です。sは状態、aは行動です。s'、a'は、sでaをして得られる状態s'と、そこでの行動a'です。詳しくは、以下のリンクを見てください。

qiita.com

 

対戦結果

100回対戦した結果は以下です。数値は後攻に対する先行の勝率です。

このゲームは、勝ちパターンさえ把握していれば先行が必ず勝てるゲームです。

Q-Learningは先行の時、全ての相手に対して勝率100%です。勝ちパターンをしっかり学習できています。

                                     表1 先行の勝率(%)

   後攻
先行
ランダム モンテカルロ Q-Learning
ランダム 48 19 11
モンテカルロ 80 71 64
Q-Learning 100 100 100

 

コード 

作成したコードは全てgithubに全て上げてあります。

github.com

 

感想 

ランダム、モンテカルロ、Q-Learningを実装しました。

簡単なゲーム設定ではありましたが、良い結果が得られたのでうれしいです。