Pythonで自作した将棋AIと対局してみた|学習前でも探索回数がかなり重要だった実装ログ

Pythonで自作した将棋AIと強化学習前に実際に対局し、探索回数で強さや指し回しがどれだけ変わるかを検証した実装ログ。評価関数、王手ボーナス、終盤の謎王手の理由もまとめました。

今回は「学習前のAI」と対局してみた

この記事は、「自前で将棋AIを作ろうプロジェクト」の第二弾です。

第一弾はこちらです。

前回は、将棋AI開発の土台としてGUIを先に作った、という話を書きました。

今回はその続きで、まだ強化学習を本格的に回す前の将棋AIと実際に対局してみたログです。

この段階のAIは、ニューラルネットワークで強くなったAIではありません。
中身はあくまで、手作り評価関数 + MCTS(モンテカルロ木探索) をベースにした「学習前の将棋AI」です。 MCTS は、候補手を試しながら有望そうな手を重点的に読む探索手法です。

やってみて一番はっきり分かったのは、同じ評価関数でも探索回数で強さがかなり変わる ということでした。

※ ここでいう探索回数は、探索AIが次の一手を決める前にどれだけ候補手を試しながら読むかの回数です。実装上の引数名では simulations に当たるものです。

この時点の将棋AIの中身

現時点の ML-shogi は、純粋な学習済みモデルではなく、まずは評価関数ベースで最低限戦えることを優先して作っています。

評価関数は、駒の損得が大きくズレないことを軸に、将棋らしい補正を少しずつ足した形です。基準値は次の通りです。

評価値評価値
100600
300成香450
350成桂500
550成銀550
600
8001200
10001300

玉は通常の駒価値には入れず、詰みや終局判定で別に扱っています。

補正は次の通りです。

  • 駒価値ベースの静的評価を軸にする
  • 持ち駒は盤上より少し高く見る
  • 王手した側には +200、王手されている側には -200 を入れる
  • 銀、桂馬、香車は自玉の近くにいないと少し下げる
  • 角と飛車は利きマス数と対玉プレッシャーで加点する
  • 馬は自玉近くの守備駒としても加点する

持ち駒ボーナスは固定加点で、飛車 +100、角 +80、金と銀 +50、桂 +40、香 +30 です。

銀・桂馬・香車には守備補正も入れています。
銀は自玉の近くにいないと -40、桂は -30、香は -25 です。
考え方は単純で、玉そばの銀・桂馬・香車の価値は高い というものです。

金はもともと守備駒として使う前提が強いので、位置補正は入れていません。

大駒は働きも見ています。
角は利き1マスごとに +8、相手玉と角のラインが通っていれば追加で +80、飛車は利き1マスごとに +7、相手玉への縦横の圧力が通っていれば +100 です。
馬は自玉の周囲2マス以内なら +100、3マス以内なら +40 を足して、攻守両用の駒として少し評価しています。

要するに、最初から複雑にしすぎず、探索を回した時に将棋として破綻しにくい評価 を優先しています。

実際に対局してみた印象

今回は、探索回数 32 / 500 / 1024 の3局を見ています。

先手 私 / 後手 AI(探索回数 32) の棋譜

いきなりパックマンを誘ってきたと思った。パックマンに乗ったらパックマンせえへんのかーい!

先手 AI(探索回数 500) / 後手 私 終盤の謎王手が出た棋譜

うっかり龍をただで取られているのは秘密です。
65手目からAIあるあるの終盤での謎王手が来ました。AIやってるって感じがして嬉しくなった。これの要因は、王手に評価ボーナスを入れていることです。

先手 私 / 後手 AI(探索回数 1024) の棋譜

学習前でも、合法手が壊れている感じはなく、飛車角交換や持ち駒の打ちもそれなりに将棋っぽく進みます。

一方で、読みが浅い設定では不自然な手もまだ残っていて、評価関数を使ってどれだけ先まで読むか の影響がかなり大きいと感じました。

学習前のAIでは探索回数がかなり重要

特に探索回数 32 あたりの低め設定では、

  • 交換の損得はそれっぽくても、その後が続かない
  • 受けない

という感じで、話にならないです。

逆に探索回数 1024 まで上げると、

  • 明らかな取り逃しが減る
  • 飛車や角の圧力を活かす手が増える

という変化が出ました。
評価関数そのものを変えていないのに対局感がかなり変わるので、少なくとも学習前のAIでは探索回数がかなり重要 だと分かりました。

開発ログとしての収穫

学習前でも人間相手に触れる段階まで持っていく価値は大きい です。
自己対局ログや損失だけでは見えにくい「変な指し回し」が、実際に対局するとすぐ分かります。

次に、自己対局の探索回数を 8 から 128 に上げたことで学習が進み始めたのも、かなり納得感がありました。
実際に人間が相手をすると、探索回数が少ないAIは教師データ生成にも不利そう だと体感できます。

  • 評価関数ベースでも一応対局は成立する
  • 探索回数で強さが大きく変わる
  • 学習前のボトルネックが、評価関数そのものだけでなく探索品質にもあると分かった

特に今回は、「強化学習を始める前に、まず評価関数 + 探索だけでどこまで戦えるかを見る」 という意味でかなり良い確認になりました。
学習に入る前の土台として、どこが弱くて、どこは意外と戦えているのかが少しずつ見えてきました。

次にやりたいこと

次は学習です。
少なくとも学習前のAIでは探索回数がかなり重要だと分かったので、この土台の上で自己対局と学習を回して、どこまで指し回しが変わるかを見ていきます。

まとめ

学習前の将棋AIでも、手作り評価関数 + MCTS だけである程度は対局になります。
ただし強さは「評価関数の出来」だけでは決まらず、探索回数でかなり別物になる というのが今回の一番大きな発見でした。

同じ評価関数でも、読む回数が少ないとかなり軽い手を指し、増やすと急にしぶとくなります。

次は、この土台の上で実際に学習を回していきます。

関連記事

この記事をシェアする

X (Twitter) Bluesky
Hugo で構築されています。
テーマ StackJimmy によって設計されています。