マンカラも将棋も二人零和有限確定完全情報ゲーム
「マンカラ ナッツ」の評価関数はアプリの説明ページにも書いていますが、先手の貯蔵所に溜まった豆の数 - 後手の貯蔵所に溜まった豆の数
を返すようになっています。これは局面の形勢判断をするというよりズバリどっちが勝ちかを判断するための単純な評価関数で、将棋で言えば詰将棋専用の評価関数1のようなものです。将棋でよく駒得とか駒の働きとかの局面の特徴を捉えて形勢判断をしますが、マンカラの形勢判断をどうすればいいのか、いいアイデアが浮かばなかったので単純な豆の数の差だけを評価する評価関数を使っています。
マンカラは将棋ほど変化が膨大ではなく、ゲーム終了までの手数も短いので、いきなり初手から詰み(勝ち)を読みに行くような評価関数を使ってるわけですが、今のところこれで良いかな?と思ってます2。
マンカラの棋譜?
マンカラは棋譜の記述方法が決まっていない?と思うので、指し手の位置を示すために以下の表を使います。
0 後手のストア |
13 | 12 | 11 | 10 | 9 | 8 | 7 先手のストア |
1 | 2 | 3 | 4 | 5 | 6 |
0が後手のストア、7が先手のストア、1〜6で先手のポケット、8〜13で後手のポケットを示します。
詰めマンカラ(詰めカラハ)
問題1
まずは簡単な問題から。
下の図で先手(下側)は何番のポケットを選ぶのが最善でしょうか?
※クリックで拡大
マンカラに慣れている人だと4
と5
の豆は動かさずに済ませられるならと思い、1
か2
か3
がいいんじゃないかと見当が付くのではないでしょうか?順に見ていきます。
1
を選んでみると
AIは13
->ピッタリ->12
と進めて以下の局面になります。
こうなると次に先手(下側)は2
を選んでも3
を選んでも、いずれ豆を溜め込んでいる4
や5
のポケットを選ばざるを得なくなり、勝負が紛れます。というより逆転して後手が有利になります。この後、2
を選べばAIは11
、3
を選んでもAIは11
(横取り2つ)で形勢逆転です。
2
を選んでみると
AIは13
->ピッタリ->12
->横取り(2つ)となって以下の局面になります。
この場合も次に先手(下側)は3
を選んでも6
を選んでも、パスは出来ないので豆を溜め込んでいる4
や5
のポケットを選ばざるを得なくなり後手が有利になります。
3
を選んでみると
AIは13
->ピッタリ->12
->横取り(2つ)となって以下の局面になります。
こうなれば次に先手(下側)が2
を選べば、相手の11
のポケットの豆を横取りしてゲーム終了。先手の勝ちになります。
先手が3
を選んだ後、もしAIが13
を選ばずに12
や11
を選んだとしても、先手は4
や5
のポケットを選ばずに1
〜3
のポケットを選ぶだけで後手は自陣の豆が無くなっていきゲーム終了、先手の勝ちになります。
念のため確認すると
AIが13
でなく11
を選んだ場合
先手は1
を選んでも2
を選んでも後手はピッタリ(連続して着手出来る)が仇となり、自陣の豆が無くなります。
AIが13
でなく12
を選んだ場合
先手が2
を選べば11
の豆を横取りして、次にAIは自陣の豆が無くなります。
ということで問題1の正解は3
です。
長手数問題
上の画面から先手が3
->ピッタリ->6
->ピッタリ->1
と進むと以下の局面になります。
この段階でAIの形勢Emojiがになりました。AIは負けを覚悟したようです。負けを覚悟しながらもAIは13
を選びました。
13
->ピッタリ->12
と進んだ局面が以下です。
問題2
この局面で何番のポケットが先手の最善手でしょう?
1
を選んでみると
上図のようになりAIの形勢Emojiがに変わりました。これは詰みを逃したことを意味します。
2
のポケットが5個になり、次にピッタリを狙って一見得しそうですが、AIが次に
13
->ピッタリ->10
と進めて以下の局面になって、ピッタリが防がれてしまいます。
この後はどう変化しても4
と5
のポケットに溜め込んでいる豆を吐き出すことになり、逆転してAIが有利になります。
2
を選んでみると
上図のようになりAIの形勢Emojiものままです。AIが次に
13
->ピッタリ->10
と進めて以下の局面になりますが、
この後は先手(下側)が3
のポケットを選べば、1
の豆は取られてしまいますが、先手が勝ちます。
気付いた人がいるかも知れませんが、この局面は問題1の局面と同じです。
3
を選んでみると
上図のようになりAIの形勢Emojiものままです。AIが次に
13
->ピッタリ->10
と進めて以下の局面になりますが、
先手(下側)は今度は1
のポケットを選んで11
の豆を横取り、
後手が13
->ピッタリ->12
で以下の画面。
この局面を新たな3手詰問題としてもいいかも知れません。相手陣に豆は一つしか残っていないのですが、間違えると勝負が紛れます。先手はどこを選んでも相手陣に豆が渡ってしまう状態になっています。こういう時、自分に勝ちがあることに気づかず着手する人が結構多いのでは無いでしょうか?また、少し慣れた人だと、「4
を選べば相手の13
の豆を横取り出来るぞ」なんて読んでしまう人がいるかも知れません。
でも正解は相手陣に無駄に豆を供給しない手、一番豆の少ない2
が好手です。
こうなると先手の5
の9個の豆は横取りされてしまうのですが、先手には3
に一個残っている(一手パスするような手が残っている)のでAIが8
を選んでも13
を選んでも自陣に豆が無くなり先手の勝ちになります。
ということで問題2の正解は3
か2
です。
正解が二つあるということで詰将棋で言えば余詰めがあるようなものなので、詰マンカラの例としては良くないのかも知れません。
AIは問題2の局面の前から既にアプリの形勢Emojiがに変わっていて、詰みを読み切っていたわけです。人間が読み切るのは大変かもしれませんが、形勢Emojiがに変わったら詰み(勝ち)があるということなので、マンカラを詰将棋を解く気持ちで楽しんでみるのも面白いと思います。
ボードゲームは必勝法追求より楽しんだ者勝ち
アプリをリリースしてからは、テストも兼ねてgoogle play内のマンカラアプリをいろいろダウンロードして試しに遊んでみました。必ずしもダウンロード数が多いアプリが強いわけではなく、強さとユーザーの評価とはあまり関係ないようです。宣伝にどれだけ金かけているかの違いだと思いますが、強いソフトが商売として成功するとは限らない点は将棋アプリについても言えることでしょう。
ただ、強いアプリはどれもだいたい似たような指し手になるようで、何度も対戦していると勝ちパターンも分かってきて楽しめなくなります。将棋ほど変化が多くないので仕方がないのかも知れません。そこで「マンカラ ナッツ」では、最強のやばい
モード以外の強い
、弱い
モードでは初手を評価値とは関係なく乱数で選ぶようにしています3。初手を乱数に変えるだけで全てのパターンに対応するのは難しく、勝ったり負けたりゲームを楽しめると思います。自分はやばい
モードでは先手の時の勝ちパターンが分かってきたのですが、強い
モードでは先手でも勝てない時が多いのでいつも強い
モードで遊んでます。
-
詰将棋専用の評価関数と書きましたが、実際にそういう専用の評価関数が使われているソフトが存在するかは知りません。ただ全局面を完全に読み切れるのであれば本将棋でもこういう単純な評価関数で十分なわけです。将棋の場合完全には読み切れないので、形勢判断のためにいろいろな特徴量(駒得、玉の固さ等を数値化)を使って評価する必要が出てくるのですが、その形勢判断の精度が高い評価関数であれば、詰将棋用とか形勢判断用とか分けなくて済みます。 ↩
-
マンカラで形勢判断するとしたら、自陣にある種子(豆)の数とか、横取りされ易さ(対称の位置にある相手のポケットが空かどうか)とかを数値化するのでしょうか?よく分かりません。 ↩
-
全てのモードで評価値が同じ場合は乱数で着手を選ぶようになっていますが、初手に関しては評価値が低い手を敢えて選ばせているという意味です。 ↩