機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

iPadのNeural Engineで将棋AI part12 読み筋表示

独自のGUIを開発するため、レイアウトに自由度があります。ただ1行の読み筋を出すのではなく、複数の読み筋やその評価値を表示して、より面白い表示を試みました。

読み筋表示

動画だとこんな感じで動きます。

次のような事項を表示したいと思いました。

  • 自分の候補手だけでなく、相手の応手も複数候補表示する
  • 候補手それぞれの勝率だけでなく、その局面の複雑さを表示する
  • 探索が進むことで候補手が入れ替わる様子を表示する

これを実現する実装は次のようにしました。

  • 相手の応手の表示
    • 自分の候補手を上位3つ、それぞれに対し、相手の応手3つを表示するようにした
    • 十手以上先の候補まで表示するようなソフトも多いが、表示が頻繁に切り替わる状況では読み取れない割に場所を取るため、3手先までとした
  • 局面の複雑さの表示
    • 勝率の横(±の後ろ)に、その標準偏差を表示するようにし、これを複雑さの指標とした
    • MCTSでの探索中に、末端局面の勝率を親ノードにバックアップする。その際に勝率の合計だけでなく、勝率の二乗の合計を保存する変数を追加し、分散を計算する公式によって標準偏差を計算
    • 序盤は標準偏差が小さく、中盤は大きくなる傾向を読み取ることができる
  • 候補手の入れ替わり
    • MCTSにおける指し手の決定は、候補手ごとの探索回数が最大のものとなる(勝率最大とは限らない)
    • 探索回数を棒グラフで表示することで、2番目以降の候補手が伸びていって入れ替わるという視覚化ができるはず
    • 総探索回数が1000, 10000, 100000...に達するたびに横軸のスケールを変えて画面内に収まるようにした。スケールがわかるよう、グラフの色を青、緑、オレンジ、赤と変化させるようにした
    • 実装してみたものの、思考時間10秒程度ではわかりやすい入れ替わりは見られなかった

動かしてみた感触

  • 棒グラフにより、2番目以降の指し手がどの程度有望なのかが一目でわかる。
  • 候補の時系列変化については、思考時間10秒程度ではわかりづらかった。盤上に矢印等で指し手を表示すると、よりわかりやすいかもしれない。

どうにかiPad単独で動く将棋ソフトが実現できました。次回は記事になっていない小さなトピックをまとめた記事を書いて大会前の総括にしたいと思います。