弱いコンピュータ将棋「こまお」について。

 今日の日記は周回遅れの技術で作ったコンピュータ将棋の話です。

 先日、「こまお」移転先はこちら)というコンピュータ将棋を公開しました。こまおの特徴はとにかく弱いことです。攻めは遅く、受けはほとんどできず、筋は悪く、一手詰すら見つけられません。その上、平手から10枚落ち(玉と歩だけ)まであるので、10枚落ちを選べばほとんどの人が勝てるでしょう。アルゴリズム的にも数世代前のものを使っており、しかも、わざわざ駒損する筋を選んだりします。

 なぜ、そんなコンピュータ将棋を作ったのか。それが今日の日記の本題です。昨年末だったと思いますが、プロ棋士の遠山五段がニコニコ動画の生放送で、コンピュータ将棋について「人を育ててくれるようなコンピュータ」について言及していた憶えがあります(ちょっと記憶が曖昧なのですが)。そのときは、将棋の道場は人手不足でルールから教えなければならない人はさすがに教えていられないこともあるということがセットで語られていた気がします(ここ半年くらいでこのあたりはかなり変わってきた気もしますが)。これを聞いて当時の私は、「ルールならハム将棋で憶えることができるじゃないか」と思っていました。それから、そこから少しレベルアップした人には「金沢将棋」がすでにあると思っていました。そして、さらに強い人には「激指」もあります(私自身は金沢将棋も激指もプレイしたことはありませんが評判はよいです)。つまり、すでに人間を育てるソフトは充分に揃っていると思っていました。

 その考えが甘いと分かったのは、とある将棋初心者と盤をはさんで指したときでした。私もそれほど強くはないので、私が4枚(飛角香)落として指しました。その初心者の方は「金沢将棋のレベル1に負ける」と言っていました。序盤は問題なさそうに思えたのでいい勝負かと思った矢先、銀をタダで捨ててきました。狙いは特になさそうでした。そして、角と金を交換してきました。これも狙いはありませんでした。さらに飛車を捨てて銀と交換してきました。不思議な指し手だと思いつつも、指し続けました。終局して家に帰ってから、あの人はハム将棋の10枚落ちにも負けるだろうと思いました。

 将棋というのはやはりそこそこ強くないと面白くないもので、やはりある程度の強さがないと観戦すらできません。ある程度というのは私の感覚だと、ハム将棋の平手にまぐれで(あるいは攻略サイトを見ながら)一回勝つ程度です。で、そこまでたどりつくためには、何局も指す必要があります。そして、何局も指すためには、半分くらいは勝てないと続きません。将棋というのは勝てないと面白くないのです。そういうわけで、ハム将棋に勝てない人のための将棋が必要だと感じました。だから作りました。

 作る前に、指導対局をする側のプロ棋士にどういうことに気をつけているかといったことを聞いたりもしました。具体的に対局中にどういったアドバイスをするのかということです。いろいろと教えていただきましたが、相手の指し手についての感想を言うとのことだったので、私にできる範囲で人間の指し手について言語化しました。主に駒の価値に重点を置いた台詞になっています。指導対局では指導する側の指し手そのものにも意味があるものですが、そこまではとても実装できませんでした。また、指導を受ける側のアマチュアの方にも簡単に話を聞かせていただき参考にしました。

 実際に作ってみて、「勝てた!」という喜びの声も聞こえてきましたが、大きな反省点も二つありました。

 一つは、それでもやはり強すぎるらしいということです。10枚落ちに負ける友人もいました。また、開発過程をセミクローズドな空間で公開していたのですが、10枚落ちのランダム指しに苦戦する友人もいました。落とす枚数に応じて弱くするといった凝った設計にする必要もあったかもしれません。

 もう一つは、Firefoxを主たるテスト環境にしていたので気づかなかったのですが、IEだと重いということです。ウィンドウズのデフォルトブラウザがIEなのでそれを基準にテストするのが当然だったはずですが、思い至りませんでした。その後、軽くしようと努力しましたが(重いコードであるという自覚はあったのでいじれば軽くなるはずだと思っていました)、私の技術ではどうにもならず、結局最初の重いままの状態で公開しています。一つ言い訳を書くとすれば、JavaScriptを触るのは初めてであり、またGUIも初めてであり、そもそもコードを書くのは得意ではなかったのです。JavaScriptを憶えるのに購入したのは「JavaScript&jQueryレッスンブック」という本です。本自体は分かりやすかったですが、プログラミングが苦手なので途中で挫折しました。

 それから、反省点ではありませんが、やはり自然な指し手で弱くするのは難しかったです。弱いというのは要するに最善手から程遠いということですが、単純に悪い手を指そうとすると不自然になるのです。このあたり、学問的にも面白い研究課題だと思います。人間はなぜか自然な悪手を指すことができるのです。

 あと、「こまお」という名前をつけるにあたり知恵を貸してくださった方々ありがとうございました。どうでもいい話ですが、漢字で書くと「駒男」でもあり、「子猫(こ・まお)」でもあります。

 長くなりましたが、とにかくせっかく弱いコンピュータ将棋を作ったのでたくさんの初心者と戦って負けたいと思っています。