技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Q学習で三目並べの評価値テーブルを作らせてみた

機械学習と深層学習 Pythonによるシミュレーション

機械学習と深層学習 Pythonによるシミュレーション

この本で Q 学習のコードまで書いた後、「あー静的な評価値生成に使えるなー」という事で、やってみたのが下記。

StudyDocs/tic_tac_toe.py at master · Sunao-Yoshii/StudyDocs · GitHub

なんで三目並べなのかというと

  • 手数が少なく、試行回数を増やしやすい(というか手数が少ないので、その学習内容が正しいのかどうか評価しやすい)
  • 目が少ないのでランダムでもそれなりに結果が出しやすい
  • 覚えたてのアルゴリズムを試したい

というだけのもの。

現実に対人を想定した評価値となると、相手の手に対して評価をしなければならない事もあるので、単純な Q 学習(静的評価値学習)だけでは判断ができないと思う。
が、三目並べなら参考値位出てきそうかなと思ったのが成り立ち。

そもそも評価値って単純な学習じゃねーよという事に後から気付いて、作り直し。
盤面の状態と、それに対する手、相手の手を踏まえて、Q値の伝播を行った。

やってみたら分かるのだが、正直 5000 回位はランダムとそんな変わらない。
8000 回位強化学習させると、有意差が少しづつ出てくるような感じ。

大体 20,000 回強化学習させれば、ランダムさんに 7 割かた勝てるようになる…ってそんなアホみたいに戦う位なら、人の方がもっと強いわと www

とはいえ、すべての状況に対して次の手、評価…って計算してるから、かなりの無駄は当然あり得るわけで…もう少し考えたいところ。