週間将棋2003年8月6日に掲載された拙文

実は、週間将棋に寄稿するにあたっては、長い文バージョンと短い文バージョンを作りました。 というのは、長い文バージョンだと、ちょっと掲載するのに大変なことになりそうだったからです。 で、短い文バージョンが掲載されたのですが、せっかくなので、ここでは長い文バージョンを ちょっと改変して公開します。

『将棋ソフトを作ると将棋が強くなるか?〜将棋ソフトの仕組み〜』

「うさぴょん」は、もともと「初段」を目標に開発を始めました。 そして、この「初段」と言うのは、実はうさぴょんのプログラマの私の、将棋のプレイヤーとしての目標でもあります。

現在、「うさぴょん」の方は、将棋倶楽部24で、R1450程度(最高R1554=初段)となり、ほぼ目標を達成しました。 ただし、この成績は、コンピュータ将棋選手権に参加するために、ボーナスを全部はたいて買った、かなり高速なマシンで実行した場合なので、多分あなたのおうちにいる「うさぴょん」はこんなに強くないんじゃないかと思います。

さて、一方、私の方は、将棋倶楽部24で最高R445(=12級)現在のRは350前後と、初段はメチャクチャに遠いです。どれぐらい遠いかと言うと、もしも自分と同じRの人間と対戦し続けるとしたら、70〜80連勝しないと初段になりません。

初段になるために、初段の「うさぴょん」に将棋を教えて欲しいくらいです。

しかし、今のところ、とてもそれはかないそうもありません。

というのは、「うさぴょん」は「私と考え方が全然違う」からなのです。

将棋が強い方々が実際にどのように考えているのか、私には窺い知ることも出来ないのですが、私が考える時には、まず「目標」を見つけます。「目標」は、終盤なら玉を詰める事であったり、序盤であれば、固く囲うことであったり、攻めの形を作ることであったり、中盤であれば、サバキであったり駒得であったりします。こういった、沢山ある目標を実現するために、短期的な計画を立てて、それを実行することを考えます。また、当然相手も相手の「目標」を持ってそれに沿った計画を立て、こちらの計画を邪魔しようとしてくるわけですから、ここで互いの計画を邪魔しあうことで戦いになっていきます。私は、「読み」という行為は、立てた計画が、相手の妨害に負けずに計画通りに進められるかどうか、そして相手の計画をうまく妨害できるかどうか、の検証を行う作業だと考えています。また、「読み」の中で使われる、「手筋」と言うのは、計画をさらに小さい計画に分割して実現可能かどうか検証しやすくるための知識だと思います。

さて、ここまでは「目標」だとか「計画」という言葉を意識して使ってきましたが、最上位の「目標」を将棋用語で良く使われる言葉で置き換えると「構想」という言葉になるでしょうか。

私は、人に将棋を教わる時には、この「構想」とか「手筋」といった、考え方を教えて欲しいと思っています。この局面ではサバキを狙っていけばいいんだよ、とか。

さて、「うさぴょん」の将棋の考え方なんですが、「構想」や上記の意味での「手筋」なんて全くありません。そこにあるのは、「読み」だけです。 (実際には、もっと効率的になるように、いろいろな工夫があるのですが)ここでは大雑把にうさぴょんの中身を説明します。 うさぴょんは、今の局面でどんな手を指すことが出来るか、全部洗い出します。人間なら、目標に関係ないようなムダな手は考えないのでしょうが、うさぴょんには目標なんてものは理解できませんから、ほんとに全部洗い出します。例えば、初手で1八香とかも考えます。そして、今の局面でその手を指したらどういう局面になるのか、これまた全部洗い出します。さらに、それらの局面で、可能な手を洗い出し、その局面でその手を指したらどうなるのか洗い出し…と最後に、7手先くらいまで進めたところで、その局面の有利不利を数値化します。有利ならプラス何点、不利ならマイナス何点、というように、点数を付けるわけです。(この点数を付けるところが「評価関数」と呼ばれる部分で、将棋プログラムの最も大切な部分の一つになります。)さて、こうして局面を点数化し、「自分の手番では自分にとって一番良くなる手を選ぶ」「相手の手番では自分にとって一番悪くなる手を選ぶ」ようにすると、「こういう手順で進めて、何手か読んだ先では何点になる」ということをコンピュータが理解?することができます。 ここには、「構想」も「手筋」もありません。ただ、「有利になるような手順」と「その手順で進んだ時の点数」があるだけです。こんなのを教えて貰っても、私にはとてもマネすることができません。「読み」の方法だって、そんな風にしらみつぶしに「読む」ことなんて、人間ができるとも思えません。

なので、私は「うさぴょん」に将棋を教えてもらえないのです。

また、うさぴょんを強くするために、私のやっていることは、

なんですが、評価関数の調整の方は自分の将棋にもいくらか役に立つ気がしますが、不要な「読み」の省略の方は、「そもそも人間は、そんな目標と関係ないような変な手を指すことは考えません」という感じです。結局、「うさぴょん」を強くすることも、私自身の将棋の上達にはほとんど役に立ちません。

かくして、私は今日も12級のまま、なのに「うさぴょん」はちょっとずつ強くなっているのです。

…なんか悔しい。

将棋ソフトの実力がプロ棋士に並ぶ日は、そう遠くない将来(と言っても5年や10年はかかるのですが)に来ると私は確信しています。ですが、将棋ソフトが「構想」や「手筋」を人間に教えてくれる日というのは、それよりもずいぶん遅れそうな、そんな気がします。


補足?

コンピュータの考え方には、目標も何もない単なる数え上げだって上で述べてますけど、僕は実はそれでいいと思ってます。

というのは、人間は、目標を中心にすると、目標と関係ないことの省略が実にうまいのですが、 コンピュータにそれを真似させるのはとても大変だからなのです。つまり、省略をうまくさせられなければ、 結局今と同じように、全部数え上げるような方法しかない、ってことですね。

この様な問題は、一般化すると、フレーム問題として知られています。

ただ、将棋の救い?は、現実の問題と違って、考えなきゃならないことが数え上げられないこともない、ということですね。 もしかすると、うまく数え上げて、目標と関係ある・ないをそれぞれ判断できるようなアルゴリズム(ってすごく複雑そうですけど)を 作って、目標志向のプログラムを作成することも、将棋ならできるかもしれません。


うさぴょんのトップページへ
Any comment to