ブラウザ象棋(象棋小巫师)の思考を解析してみた

2018/04/20象棋(シャンチー)のアプリ

昨日、設置した象棋ソフト。Javascriptで書かれていてサイズも小さいにも関わらず、私に取っては驚異的な強さに思えます(私が弱いだけだと思いますが)。

短い時間のときでも、それほど多くの手を読んでいないにも関わらず強く感じるのが不思議です。少し調べてみました。

プログラムについて

前回紹介したように、プログラムは XiangQi Wizard Light です。序盤の定跡を除くとプログラムは2000行余り。極めて短いプログラムです。

序盤定跡は12000万行あります。時間があるときに、これの中身も調べてみたい。

探索部分

将棋やチェスのプログラムによくある αΒ探索を使っています。探索部分は447行しかなく、非常にコンパクトです (search.js)。

置換表、静止探索、キラー手、ヒストリーによる手の並べ替えが使われています。ネガスカウトやヌルムーブなど基本的な枝刈りは使っていますが、stockfishにみられるような細かい枝刈りは使われていません。

基本に忠実に作られた良いプログラムだと思います。ボードゲームプログラム入門にも良いかもしれない。

位置テーブル

将棋やチェスの多くのプログラムでは、評価値は駒そのものの価値と位置による値で計算されていますが、本プログラムでは単純化して駒の位置だけで点数を与えています。

位置テーブルの重みは駒によって違っていて、大雑把に 仕・象:20点、馬:100点、車:200点、炮:100点、卒:7点、渡った卒:30点程度の重みがついています。駒価値の差は思ったよりも大差です。車の価値が非常に高い。

位置による差も見てみましょう。

例えば将の点数は下記の通り(下3段のみ抜き出しています)。初期位置にいるのが点が高く、次いでその左右。上に移動すると弱くなるように点数が付いています。

0,0,0, 1, 1, 1,0,0,0
0,0,0, 2, 2, 2,0,0,0
0,0,0,11,15,11,0,0,0


馬の点数。中央付近に居るのが点が高いようです。敵象の初期位置の1つ手前がやや点が高いのも目につきます(強調してある位置)。以前、強者から習ったように※1、この位置に馬を移動するのは好手なのですね。

※1 序盤は馬・車の使い方が大事らしい

90, 90, 90, 96, 90, 96, 90, 90, 90
90, 96,103, 97, 94, 97,103, 96, 90
92, 98, 99,103, 99,103, 99, 98, 92
93,108,100,107,100,107,100,108, 93
90,100, 99,103,104,103, 99,100, 90
90, 98,101,102,103,102,101, 98, 90
92, 94, 98, 95, 98, 95, 98, 94, 92
93, 92, 94, 95, 92, 95, 94, 92, 93
85, 90, 92, 93, 78, 93, 92, 90, 85
88, 85, 90, 88, 90, 88, 90, 85, 88


その他、炮は河の前後と4-6筋、車は5筋か敵陣隅が好位置のようです。色々と考えさせられます。

なぜ強いのか

プログラム自体は非常に単純です。ですが、単純なだけに高速に取り合いを読んでいます。私が負けるのは駒の取り合いを読めずに(あるいはうっかりして)駒損するからでしょう。

逆に言えば、単純な駒損を避けることが上達への近道なのかもしれません。考えてみれば将棋でもチェスでも、初心者を脱するのは単純な駒損をしなくなってからですね。まずはそこから練習しなきゃ……