ゲームの説明
1から順に交互に数字を言って10を言えた方が勝ちのゲームです
1ターンで数字は1つか2つ言えます。
プレイヤーは2人です。
このゲームは勝ちパターンがあるゲームです。勝ちパターンさえ把握していれば先行は必ず勝つことができます。
やること
3種類のAIを実装します。総当たりで戦わせ、最強のゲームAIを決定します。
- ランダムプレイヤー
- モンテカルロプレイヤー
- Q-learningプレイヤー
ランダムプレイヤーの説明
ランダムに行動を行います。
ランダムに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'です。詳しくは、以下のリンクを見てください。
対戦結果
100回対戦した結果は以下です。数値は後攻に対する先行の勝率です。
このゲームは、勝ちパターンさえ把握していれば先行が必ず勝てるゲームです。
Q-Learningは先行の時、全ての相手に対して勝率100%です。勝ちパターンをしっかり学習できています。
表1 先行の勝率(%)
後攻 先行 |
ランダム | モンテカルロ | Q-Learning |
ランダム | 48 | 19 | 11 |
モンテカルロ | 80 | 71 | 64 |
Q-Learning | 100 | 100 | 100 |
コード
作成したコードは全てgithubに全て上げてあります。
感想
ランダム、モンテカルロ、Q-Learningを実装しました。
簡単なゲーム設定ではありましたが、良い結果が得られたのでうれしいです。