ミニチェスアプリは盤面編集可能
前回記事の内容をミニチェスアプリでもテストしてみました。チェス入門のステイルメイトの問題集を6x6のミニチェス用にアレンジして解かせてみると、元々の問題の趣旨とは違った発見があります。
ミニチェスアプリはチェスアプリと違って盤面編集機能があるので、暇な方は試してみて下さい。もしソースコードを見るつもりの方はアンパッサンとかキャスリングの実装でかなり汚くなっているチェスアプリのコードよりもミニチェスアプリの方をお勧めします。
問題3
元々の問題は以下の局面です。
正解は白Qc8+
で、以下黒Qxc8
と進み、白がステイルメイトに持ち込むという問題です。
これを以下のように6x6に編集してみました。
ここからAI同士で対戦させると以下のように進みます。
6x6に編集した結果、詰みがある局面になってしまったので黒を詰ましてしまいましたが、当然こうなるべきでしょう。
今度は黒のキングを一路ずらして配置してみます。
ここからAI同士で対戦させると以下のように進みます。
白が劣勢ですが一旦Qc4+
と黒のキングにチェックを掛けて、その後はステイルメイトが最善と判断してQc6+
、Qxc6
とステイルメイトに持ち込みました、最善の応酬だと思います。下手に勝とうと思って白がQd5
(詰めろ)なんていう手を選ぶと、黒にQd1+
とチェックされてクィーンを交換後に戦力不足で白が負けてしまいます。
問題7
元々の問題は以下の局面です。
正解は白Qc4+
、Qxc4
で白がステイルメイトに持ち込むという問題です。
これを以下のように6x6に編集してみました。
ここからAI同士で対戦させると以下のように進みます。
元々の問題のようにステイルメイトを狙って白がQa4+
なんてやると、黒がQxa4
とクィーンで取ってくれれば良いのですが、以下のようにRxa4
とルークで白のクィーンを取られて
白はc3
しか指す手がなくなり黒Qb3#
とチェックメイトになります。結局この問題は白の負けが避けられないので、上記の変化は最善の応酬だったことが分かります。もちろん黒がルークで白のクィーンを取る(Rxa4
)ことも確認済みです。
=== intro07-2
--- problem -7-2
6|♜| | | | | |
5| |♛| | | |♟|
4|♕| | | | |♚|
3| | | | |♟| |
2| | |♙|♟|♙| |
1| | | |♔| | |
a b c d e f
✔ expects checkmate -7-2 (206ms)
♕
6| | | | | | |
5| |♛| | | |♟|
4|♜| | | | |♚|
3| | | | |♟| |
2| | |♙|♟|♙| |
1| | | |♔| | |
a b c d e f
チェスアプリもミニチェスアプリも多くのソースコードは同じなので問題がなくて当然なのですが、ミニチェスアプリに関してはmocha
とchai
のテストを省略していたので、あらためてテストスクリプトを書いて確認してみました。
ステイルメイトの評価値について
前回の記事で先手勝ちの評価値を50000
、後手勝ちの評価値を-50000
、ステイルメイトの局面に掛ける係数を-0.0009
にして様子を見ると書きましたが、-0.0009
という値があまりにも小さすぎて奇異に感じるので先手勝ちを500
、後手勝ちを-500
、係数を-0.09
にして試してみたのですが、今度は駒の重み
に使ってる値とバランスが取れず?に不都合が出てきたので止めました。もし値を変えるとしたら駒の重み
の数値も全面的に見直さないといけないんだろうなぁと思っていたところ、タイミング良く?X(Twitter)
でやねうら王
開発者のポストを見かけました。
やねうら王
では400
,-400
を最大・最小値として使用しているそうで、以前やねうら王
をインストールした時(「Ubuntuでやねうら王」)のソースをgrep
すると確かにそのようです(eval_limit
定数)。やねうら王
のソースを読んでみてもいいのですが、理解するのは大変でしょうし何かアイデアが浮かばない限り当面はこのままにしておくつもりです。
※不都合とは何か…自分のアプリの場合、単純に評価値の最大・最小値を小さな値にすると「相手キングを積極的に詰ましにいかなくなる」、「千日手になりやすくなる」という現象を確認してます。