将棋の知識は悪魔の囁き

無明君の評価関数構築には時間が掛かるので一寸別の事を書きます。

(注)これは初めて将棋ソフトを書く我用の覚え書き・自戒みたいなものです。当然的外れ、勘違い等...多々有るでしょうが、その時は笑ってやって下さい。その後にご指摘を頂ければ大感謝です。

将棋ソフトは対局のためゲームのルールを理解・順守するのは当然ですが(アタリマエ~)、強くなる為=勝つ為にはどの程度将棋を「理解」する必要があるのでしょうか?

もっともっと単純なゲーム...例えば「まるばつ」(ウィキィ曰く、「三目並べ」)の場合は全組み合わせを書き出すことは簡単なのでそれを覚えてしまえば完全攻略完了となります。

チェスの場合は周知の通り最強のソフトと互角に勝負できるのは全世界でほんの数人~数十人程度。この時点で完全攻略とはいきませんが 人間-対-チェスソフト は事実上「終戦」です。

もちろん将棋はもっと複雑なゲームなので「完全攻略」はまず無理とかんがえらていますし、我も同感です。人間の「名人」以上に強く成れるかは時間・資金だけの問題とおもわれます。

チェス・将棋のソフトの開発者の大多数は平均以下、もしくは素人レベルの将棋指しと相場が決まっています。(例外は有ります...最強と謳われるRybkaの開発者はInternation Master)

将棋を熟知しない開発者が初めて将棋ソフトを組むときは必然的に「客観的に計れる・計算できる」項目のみに的を絞ってプログラムを構築します...そしてその結果は「それでもそこそこ勝てる」程度の強さを達成できるでしょう。現在の無明君の成長状況から察するにあと3ヶ月位で達成可能と推定します。(ウソばっか)

...

...さて、「それでもそこそこ勝てる」から「ガンガン勝てる」に卒業・進化するための強化法は如何なるアプローチを採るべきでしょうか???

前置きが長かったですがこの更なる強化への壁が本題の「将棋の知識は悪魔の囁き」に繋がる訳でして...

① 「客観的に計れない・計算できない」項目を無理やり計算する

② 将棋そのものを学ぶにしたがって「格言」・「ワンポイント・アドバイス」の類は腐るほど目にします...これを思考に取り入れる

...等が誰でも(我も含めて)考えつく範囲でしょうか?なぜかと言うと(A)手軽に実装でき、(B)いままで書いたコードの変更が最小で済み、(C)効果が直ぐ見えるから...ですね。

我の確信できる結論を先に書くと...上記のテクは開発中における「悪魔の囁き」であり、これに手を染めると「それでもそこそこ勝てる」ソフトは「そこそこ勝てる」程度に強くなれますがそこで打ち止めになります。それから先はそれ以上強く成れません...(と我は信じる)

① 「客観的に計れない・計算できない」項目を無理やり計算する

厳密に言うなら現在のところ「駒の価値」すら正確なところは解らないのですが、それでも

 歩 < 香・桂 < 銀・金 < 角 < 飛

...の順はそれなりに確立してるし、その点振りは個人差あれど似たような物です。

「客観的に計れない・計算できない」項目として我が疑問に思ったのが「終盤・中盤の判断の仕方」についてです。なぜこの判断が必要(と思われる)な理由は「終盤は駒得よりスピード」の格言に影響されていると想像します。

(例) 持ち駒がXX枚以上あり、自分の駒がXX枚以上敵陣に侵入し(逆も同様)...の条件を満たした時点で「終盤」と判断する。但し、XX手以下の局面の場合は例外とする。

我が思うに(多分間違いでしょうが)「終盤・中盤の判断」は人間用の便宜的な分類ではないのか?...と思う次第であります。先日の竜王戦挑決第二局では駒はほとんど敵陣に突入することなく上部からの圧殺で終局となりました。

数値化できない現象を無理やり数値化することにより作者が想定する限られたテストケースへの対処は出来るようになりますが、その半面において誤認識に通ずる局面はいくらでもあるので結局のところ「穴を塞いだつもりで別の穴を作る」結果になるのではないか?...と思っている今日この頃なのでした。

② 将棋そのものを学ぶにしたがって「格言」・「ワンポイント・アドバイス」の類は腐るほど目にします...これを思考に取り入れる

将棋の格言
http://ja.wikipedia.org/wiki/%E5%B0%86%E6%A3%8B%E3%81%AE%E6%A0%BC%E8%A8%...

...とまあ色々有ります。

「チェス・将棋のソフトの開発者の大多数は平均以下、もしくは素人レベルの将棋指しと相場が決まっています」...なのでソフト強化の一環として「手筋」に相当する行動を評価に取り入れようとするのは自然な方向でしょう。

例えば、「金底の歩岩よりも固し」を取り入れようとします。金底に歩を打つためには...

1. 二歩は反則なので先ずチェック
2. 持ち駒に歩が有り
3. 敵の駒が自玉に迫っていて
4. 自玉の受けている側に金があり
5. その金が2段目に存在する

...と、なかなか合致条件を満たすのは面倒です。仮に判別が簡単に出来るとしても評価関数に取り入れるにも問題が生じます。

1. 他の手より優先したいので、不当に高い評価値を付ける - ミニ・マックスは互いの最善手を消す方向に検索するので高い評価値の手は弾かれます。更に「不当に高い評価値」が付いたためアルファ・ベータの枝切りが起きて他の(真の)候補手が切り捨てられてしまう可能性があります。

2. 底歩が打てる状況は別扱いする。つまり、普通に検索した結果と底歩を打った局面を比べてよさげな方をとる...「普通に検索した結果」は「底歩を打った局面」を含む未来の展開からの評価ですね。それと一手読みの底歩打ちと比較するのは無理・無謀でしょう。

3. 評価関数そのものをいじくり底歩を打てるようにパラメターを調整する。これで「底歩を打てるように」なる反面他の盤面評価に想定外の副作用が出る。

将棋の格言は局所的なアドバイスであり全体の調和・バランスを無視しての実装は結局のところ強化に繋がらない...であろうと思いました。

投稿者: 紫外線 投稿日時: 火, 09/15/2009 - 05:57 categories [ ]