マンカラも将棋も二人零和有限確定完全情報ゲーム

     「マンカラ ナッツ」の評価関数はアプリの説明ページにも書いていますが、先手の貯蔵所に溜まった豆の数 - 後手の貯蔵所に溜まった豆の数を返すようになっています。これは局面の形勢判断をするというよりズバリどっちが勝ちかを判断するための単純な評価関数で、将棋で言えば詰将棋専用の評価関数1のようなものです。将棋でよく駒得とか駒の働きとかの局面の特徴を捉えて形勢判断をしますが、マンカラの形勢判断をどうすればいいのか、いいアイデアが浮かばなかったので単純な豆の数の差だけを評価する評価関数を使っています。
     マンカラは将棋ほど変化が膨大ではなく、ゲーム終了までの手数も短いので、いきなり初手から詰み(勝ち)を読みに行くような評価関数を使ってるわけですが、今のところこれで良いかな?と思ってます2

    マンカラの棋譜?

     マンカラは棋譜の記述方法が決まっていない?と思うので、指し手の位置を示すために以下の表を使います。

    0
    後手のストア
    13 12 11 10  9  8 7
    先手のストア
     1  2  3  4  5  6


     0が後手のストア、7が先手のストア、1〜6で先手のポケット、8〜13で後手のポケットを示します。

    詰めマンカラ(詰めカラハ)

    問題1

     まずは簡単な問題から。
     下の図で先手(下側)は何番のポケットを選ぶのが最善でしょうか?

    ※クリックで拡大

    詰み07

     マンカラに慣れている人だと45の豆は動かさずに済ませられるならと思い、123がいいんじゃないかと見当が付くのではないでしょうか?順に見ていきます。

    1を選んでみると

     AIは13->ピッタリ->12と進めて以下の局面になります。

    詰めマンカラ

     こうなると次に先手(下側)は2を選んでも3を選んでも、いずれ豆を溜め込んでいる45のポケットを選ばざるを得なくなり、勝負が紛れます。というより逆転して後手が有利になります。この後、2を選べばAIは113を選んでもAIは11(横取り2つ)で形勢逆転です。

    2を選んでみると

     AIは13->ピッタリ->12->横取り(2つ)となって以下の局面になります。

    詰めマンカラ

     この場合も次に先手(下側)は3を選んでも6を選んでも、パスは出来ないので豆を溜め込んでいる45のポケットを選ばざるを得なくなり後手が有利になります。

    3を選んでみると

     AIは13->ピッタリ->12->横取り(2つ)となって以下の局面になります。

    詰めマンカラ

     こうなれば次に先手(下側)が2を選べば、相手の11のポケットの豆を横取りしてゲーム終了。先手の勝ちになります。
     先手が3を選んだ後、もしAIが13を選ばずに1211を選んだとしても、先手は45のポケットを選ばずに13のポケットを選ぶだけで後手は自陣の豆が無くなっていきゲーム終了、先手の勝ちになります。
     念のため確認すると
     AIが13でなく11を選んだ場合

    詰めマンカラ

     先手は1を選んでも2を選んでも後手はピッタリ(連続して着手出来る)が仇となり、自陣の豆が無くなります。
     AIが13でなく12を選んだ場合

    詰めマンカラ

     先手が2を選べば11の豆を横取りして、次にAIは自陣の豆が無くなります。
     ということで問題1の正解は3です

    長手数問題

    詰めマンカラ01

     上の画面から先手が3->ピッタリ->6->ピッタリ->1と進むと以下の局面になります。

    詰めマンカラ02

     この段階でAIの形勢Emojiが:tired_face:になりました。AIは負けを覚悟したようです。負けを覚悟しながらもAIは13を選びました。
     13->ピッタリ->12と進んだ局面が以下です。

    問題2

    詰めマンカラ03

     この局面で何番のポケットが先手の最善手でしょう?

    1を選んでみると

    AI勝ち01

     上図のようになりAIの形勢Emojiが:frowning:に変わりました。これは詰みを逃したことを意味します。
     2のポケットが5個になり、次にピッタリを狙って一見得しそうですが、AIが次に  13->ピッタリ->10と進めて以下の局面になって、ピッタリが防がれてしまいます。

    AI勝ち02

     この後はどう変化しても45のポケットに溜め込んでいる豆を吐き出すことになり、逆転してAIが有利になります。

    2を選んでみると

    詰み04

     上図のようになりAIの形勢Emojiも:tired_face:のままです。AIが次に  13->ピッタリ->10と進めて以下の局面になりますが、

    詰み07

     この後は先手(下側)が3のポケットを選べば、1の豆は取られてしまいますが、先手が勝ちます。
     気付いた人がいるかも知れませんが、この局面は問題1の局面と同じです。

    3を選んでみると

    詰み05

     上図のようになりAIの形勢Emojiも:tired_face:のままです。AIが次に  13->ピッタリ->10と進めて以下の局面になりますが、

    詰み06

     先手(下側)は今度は1のポケットを選んで11の豆を横取り、
     後手が13->ピッタリ->12で以下の画面。

    詰み08

     この局面を新たな3手詰問題としてもいいかも知れません。相手陣に豆は一つしか残っていないのですが、間違えると勝負が紛れます。先手はどこを選んでも相手陣に豆が渡ってしまう状態になっています。こういう時、自分に勝ちがあることに気づかず着手する人が結構多いのでは無いでしょうか?また、少し慣れた人だと、「4を選べば相手の13の豆を横取り出来るぞ」なんて読んでしまう人がいるかも知れません。
     でも正解は相手陣に無駄に豆を供給しない手、一番豆の少ない2が好手です。

    詰み09

     こうなると先手の5の9個の豆は横取りされてしまうのですが、先手には3に一個残っている(一手パスするような手が残っている)のでAIが8を選んでも13を選んでも自陣に豆が無くなり先手の勝ちになります。
     ということで問題2の正解は32です
     正解が二つあるということで詰将棋で言えば余詰めがあるようなものなので、詰マンカラの例としては良くないのかも知れません。

     AIは問題2の局面の前から既にアプリの形勢Emojiが:tired_face:に変わっていて、詰みを読み切っていたわけです。人間が読み切るのは大変かもしれませんが、形勢Emojiが:tired_face:に変わったら詰み(勝ち)があるということなので、マンカラを詰将棋を解く気持ちで楽しんでみるのも面白いと思います。

    ボードゲームは必勝法追求より楽しんだ者勝ち

     アプリをリリースしてからは、テストも兼ねてgoogle play内のマンカラアプリをいろいろダウンロードして試しに遊んでみました。必ずしもダウンロード数が多いアプリが強いわけではなく、強さとユーザーの評価とはあまり関係ないようです。宣伝にどれだけ金かけているかの違いだと思いますが、強いソフトが商売として成功するとは限らない点は将棋アプリについても言えることでしょう。
     ただ、強いアプリはどれもだいたい似たような指し手になるようで、何度も対戦していると勝ちパターンも分かってきて楽しめなくなります。将棋ほど変化が多くないので仕方がないのかも知れません。そこで「マンカラ ナッツ」では、最強のやばいモード以外の強い弱いモードでは初手を評価値とは関係なく乱数で選ぶようにしています3。初手を乱数に変えるだけで全てのパターンに対応するのは難しく、勝ったり負けたりゲームを楽しめると思います。自分はやばいモードでは先手の時の勝ちパターンが分かってきたのですが、強いモードでは先手でも勝てない時が多いのでいつも強いモードで遊んでます。


    1. 詰将棋専用の評価関数と書きましたが、実際にそういう専用の評価関数が使われているソフトが存在するかは知りません。ただ全局面を完全に読み切れるのであれば本将棋でもこういう単純な評価関数で十分なわけです。将棋の場合完全には読み切れないので、形勢判断のためにいろいろな特徴量(駒得、玉の固さ等を数値化)を使って評価する必要が出てくるのですが、その形勢判断の精度が高い評価関数であれば、詰将棋用とか形勢判断用とか分けなくて済みます。 

    2. マンカラで形勢判断するとしたら、自陣にある種子(豆)の数とか、横取りされ易さ(対称の位置にある相手のポケットが空かどうか)とかを数値化するのでしょうか?よく分かりません。 

    3. 全てのモードで評価値が同じ場合は乱数で着手を選ぶようになっていますが、初手に関しては評価値が低い手を敢えて選ばせているという意味です。