part 1では
の確認をしていきます。強化学習は現在非常にホットな分野ですがこの部分のtutorialはあまり翻訳や解説がされていないようです。
コネクトフォー(四目並べ)のゲームAIを構築するためのオンラインコースの紹介文です。コースの概要、各レッスンの内容、そして学習することでどのようなAIエージェントが作れるようになるのかを説明しています。
流れ
1 開発環境の準備、ゲームルールの実装、簡単な思考ルーチンを持つAIの作成
2 ミニマックス法のような探索アルゴリズムを理解し、実装する
3 強化学習の基本的な概念(報酬、状態、行動など)を理解し、Q学習などのアルゴリズムを実装する
解説
kaggle_environmentライブラリで基本的なゲームを楽しむことはできます。視覚的にわかりやすいことが重要ですが、game AIは単に合法なランダムな手を打つことが最初の目標です。このあと、AIの性能を上げていきます
def agent_random(obs, config):
valid_moves = [col for col in range(config.columns) if obs.board[col] == 0]
return random.choice(valid_moves)
空いている列の中から、完全にランダムに次の手を決定します。特に戦略はないです。
def agent_middle(obs, config):
return config.columns//2
中央の列が戦略的に有利な位置であることが多いため、常にそこを狙う戦略。
def agent_leftmost(obs, config):
valid_moves = [col for col in range(config.columns) if obs.board[col] == 0]
return valid_moves[0]
左から埋めていくという戦略。とりあえずランダムよりマシな合法の手を出すだけです。
-
obs
AIエージェントは、この obs オブジェクトを通じて、ゲームの状況を認識し、次の手を決定します。 obs に含まれる情報は、エージェントが「今、盤面がどうなっているのか?」「自分はどちらのプレイヤーなのか?」を理解するために使用されます -
obs.board
コネクトフォーの盤面は通常、縦横にマスが並んだ2次元のグリッドですが、obs.board ではこれを1次元のリストとして表現しています。リストの要素は、盤面の上から下へ、そして左から右へと順番に並んでいます。実態はPythonリストです。
このあと、100ゲーム、1000ゲームと、より多くのゲームをプレイすることで、運による影響が小さくなり、エージェントの実力差がより明確に現れてきます。例えば、100ゲーム行った結果、エージェントAが70勝、エージェントBが30勝した場合、エージェントAの方がより高い勝率を示し、より強いエージェントである可能性が高いと判断できます。(将棋の例が分かりやすそうです)
ここでも、AIの性能の指標として、勝率を算出していきます。
get_win_percentages(agent1=hoge, agent2=fuga)
今回、3つのAI(?)を用意したので、性能を確認すると、agent_leftmostがかちます。なお、私がやってもagent_leftmostより少し強い程度ですので、次回以降私が4目ならべをする際にはagent_leftmostと同じ戦略を取ることにしました。考えずに手が出せそうですね。
ここまで、AIとは呼べないレベルのものを作りましたが、次回以降の部分で性能が急激に上昇していきます。