コンピュータ将棋といえば・・・

 学生時代友人とけんかした話が、友人曰く
「強い将棋指しがプログラム覚えて将棋ソフト作ればもっと強くなるだろう」
的な発言をするものだから、
「プログラムがうまいとか、将棋が強いってだけで強い将棋ソフトは作れないよ」
と反発してけんかになりました。


「別に、将棋が強い奴とか、プログラムうまいやつの方がより強い奴作れるっていっただけでなんで否定するんだよ」
と不平を言われました。
つまり、「単純な、あるいはいい加減な予測でしかない」わけだから、「ごく当然な方向性を述べているだけなのになぜ否定されなければならないのか」というようなニュアンスで、まあ相手からしたら「めんどくさい奴だ」的な扱いを受けるのが俺でした。
今でも一片も間違ったことは言ってないと思っていますし、むしろボナンザの登場で自分の予測とは違う方向でそれが証明された感じになっています。


 ここで拙い知識でコンピュータを擬人化させる方法を自分なりの解釈で書いてみます。
 でも馬鹿みたいに冗長な文章なのでお恥ずかしい限り。



 コンピュータに戦略的ゲームそのほかで人間の代わりをさせるには、その選択肢を評価させる「評価関数」を「人間が数値をいじって」試行錯誤する、というのが最初のフォローのし方になります。
 さしあたって手元にあるので例を挙げますが、カルドセプト2でコンピューターキャラクター作成時に何を重視するのかという数値を選べる、ああいうやつです。
 ファミリーコンピュータディスクシステムで発売した「ブリーダー」が自分が触った最初の奴かもしれません。
 積極性だの周回重視だの何だの重視など何段階かの数値で評価し、現れる状況でその評価関数を使って「最適」な選択肢を選ばせる、それによってコンピュータの挙動を調査して、現実的な修正を加えることで「強いキャラクター」「強い思考ルーチン」を鍛え上げる手法です。


 戦略ゲームとしては、将棋に限らず大好きなので、今ではKOTYで大賞をとるソフトハウスになり下がったシステムソフトの「大戦略」、今では無双が売れているコーエーの「信長の野望」「三国志」などが思い出されます。これらゲームにおいてはコンピュータの思考ルーチンというのが要となっており、それに対戦する人間は、「だんだんコンピュータの思考が読め始め」やがては圧倒的な不利な状況からでも楽しめる、という人間側をコンピュータの能力に合わせてハンデを課すことで楽しむなんて言うことは数多くやりました。
 ま、この手のゲームは基本的に不完全情報ゲーム故にギャンブル要素があるので、その出目を操作することでコンピュータの方が強いと演出することや、そもそも人間がプレイできる内容よりずっと卑怯なことをすることを許すことも可能なわけですが。
 実際、スーパーロボット大戦などでは、思考ルーチンは単純なままで圧倒的な耐久力・火力をコンピュータに持たせることで単純化させ爽快感を演出したり、というのがいわゆる戦略型・戦術型SLGの現状となっていますね。
 そのほか格闘ゲームにおけるコンピュータの思考ルーチンなんかもワンセット型・条件反射型などさまざまなものを組み込み、知恵比べをさせている状況もあります。
 結局現在のゲームにおいて、人間の代わりに思考させる場合、ランダム・状況把握・最適思考あたりの評価のバランスを調節し、足りない部分はハンデで補うことで人に楽しめる思考を提供していることになります。


 では将棋やチェス、オセロ、囲碁などのゲームはどうでしょうか。
 上記のゲームとは一線を画す点が、研究の対象にさせ発達した理由になります。
 そもそもこれらの共通の特徴、「ルールは単純」なのはともかく「完全情報ゲーム」にしてしかも「破たんしない」ゲームというのはなかなかに貴重です。(正確には「二人零和有限確定完全情報ゲーム」まで限定的に言えるゲームです。)


 近年作られたゲームですと動物将棋、シンペイなど。いつからあるか分からないのが立体四目・・・
 これら最近のゲームは単純で、「底が浅い」=「すぐ名人戦ができる」という特徴があります。=「敷居が低い」とも言えるでしょう。
 シンペイなどでは、全幅(全とおり数)近くまで容易に検索できるので事実上一手目を指した瞬間からコンピュータ相手では勝敗が決まっている可能性すら存在します。動物将棋は解析積みだそうです。
 「破たんしない」という難しさは、たとえばハンター×ハンターにグンギという将棋系の新たなゲームを掲示しているが、ルールを明確に描かれていない理由の一つにこのことが関係があります。すなわち「適当にルールを作ると、有力すぎる攻略法が生まれあっさり最善の方法が編み出される可能性がある」ということ。
 このあたりの追いかけっこは「遊戯王OCG」で始終繰り返されているので楽しいのですが(話によると次のパックで、テキスト不備(不用意)から1キルが容易になる可能性がある最強のバーンカードが登場するらしい)バランスのいいゲームというのは作るのが非常に難しいのです。


 他方で、チェス、囲碁、将棋などは、場合の数はさしあたって宇宙をcm単位で距離をはかった数値よりも大きい。宇宙の星の数よりも圧倒的に多いことが知られており、「底知れない」=「なかなか強くなれない」=「敷居が高い」となるわけです。もちろん短絡な攻略も存在していません。
 さて全幅検索は事実上不可能ということなので、思考ルーチンは前記の戦略ゲームで使われたような評価関数の登場となるわけです。
 前記のいわゆるコンピュータゲームとは一線を画す部分としては、とにかく「完全情報ゲーム」「場合の数が尋常じゃなく多い(でも有限)」「人間がある程度以上すごく強い人が多数存在する」のほか、「思考時間を多くしても問題がない」「その強さにおいて人間を凌駕することも目的の一つ」などが重要です。
 この中で特に「完全情報ゲーム」「思考時間を多くしても問題がない」「人間を凌駕」あたりのことから「ゲーム」の中でも数学的ゲームとしての研究対象になりうるところがポイントだと言えるでしょう。
 コンピュータのチェス、将棋を強くする、というのはゲーム解析の歴史となり、それは重ねてコンピュータの発達の歴史にダブってきているので多くの人が本気で強くし始めているわけです。


 さて、じゃあ基本的にどのような評価関数を編み出しているのでしょう。
 まず、ずっとずっと先まで読ませて「有利な展開」を選ばせるというのが基本となります。オセロなどは比較的場合の数が少ないのですでに初手から終局近くまで読ませることが可能らしいこと、加えて駒の数という評価のしやすさも相まって人間ではすでに勝てないことが分かっています。いわゆる力技が決まってしまったパターンです。
 将棋などでは全幅検索で詰みまで読み切ることは不可能なので、読めるところまで読んでその状況の評価をすることで「最適」な手を選ばせるわけですが・・・この評価が難しすぎる。
 たとえば駒の点数化、玉の場所に対する点数化・・・いろいろ数値化していくわけです。ここで最初の戦略ゲームの話に戻るのですが、その評価の重みがどれぐらいなのか、どうバランスをとると強くなるのかという思考錯誤がここで登場します。
 駒得重視にしすぎれば、「王より飛車をかわいがり」以上の妙な行動をとることさえあります。その他を重視するとよくわからないタイミングで飛車がタダで取られても気にしない思考が現れたりもしかねません。
 水平線効果も何手も先を読む際の強敵になります。
 負荷の関係から全幅検索を捨て、有力な手を絞るというルーチンを作ることでその分だけ深く読ませることも行われました。コンピュータの読み通りの展開でならば有利であるわけですが、当然そこには読みぬけ、先の候補手以外の好手の存在が恐怖です。
 とにかく微調整。何度も何度も繰り返すことで「人間の手で」強くしていったのがある時期まで作られていた将棋・チェス・囲碁ソフトでした。
 おそらくその一つの頂点が、ディープブルーだと言えるでしょう。
 コンピュータプログラマーのさながら手作業の手垢だらけの思考ルーチンに強力なコンピュータを相棒にさせることでなん手先まで読めるかを力づくで増やした結果、あの歴史上最強と言われたカスパロフを倒すに至りました。


 ちょっと休憩・・・


 ところでコンピュータチェスソフトの始まりは、ある学者が「いずれはコンピュータに負ける」というようなチェスプレイヤーを馬鹿にする発言からだって話を聞いたことがります。
 結局この学者は自分でコンピュータチェスソフトを作成して、自身と対戦を公開したそうです・・・勝敗は忘れたんですが、その時の状況を表した言葉は覚えています。
「このコンピュータチェスは弱い。だがこの学者はもっと弱い。」


 改めて将棋のソフトに絞った話を展開します。


 もちろん昔の将棋ソフトも0から考えるわけではなく、序盤の定跡は多数入れました。自分はこれを使って角がわり腰掛け銀、角がわり棒銀の定跡を覚えました。定跡どおりに指すと思考時間0、定跡を外すと長考の始まりという差から定跡手を学習できたのです。
 コンピュータの能力が上がってくると、その読みの幅が増えるとともにメモリの自由度も増えるので、プロの将棋などは片っ端から終局まで記憶させ始めるという手法が現れます。
 昔のソフトでその打ちこみをすることでよく将棋の勉強ました。本を読みながら(もっぱら「羽生の頭脳」)「極ver2」に棋譜を打ち込み、悪手と好手をチェックしていく方法です。僕の将棋の先生は「羽生の頭脳」全巻と「極」だといっても過言ではないです。


 その他、勝敗、すなわち0と1で考えられる詰将棋ルーチンはコンピュータの得意とするところでこれだけに特化した場合すでにプロ以上のスピードで詰みを読むことも知られています。
 これすごくね?と思うと思いますが、実際すごいのですが、勝負の場合この詰み検索というのはいきなり全幅検索をすることを意味しており、普段は候補手選択型で考えているのに、いつからこの全幅に切り替えるのか、というタイミングが計りにくいということからなかなか難しいといわれています。
 スナイパーのように何十手も先から詰将棋で詰ますなんて事態が生まれればいいのですが、実際には直接の王手ではない「詰めろ」やとどめの「必至」から勝利を得ることの方が多いこともあります。


 長い前振りだなぁ。
 で、激指、ボナンザが登場してきます。
 この激指というのは出た当初、次の一手しか読まないというつまり評価関数、まるで将棋の一局面の評価だけで決定するというそれまでの評価関数と一線を画す思考ルーチンで登場しました。
 さらにボナンザが登場。プログラムを作った人は将棋をほとんどできないという人です。
 これらはプロの棋譜を記憶をしていますが、先に「極ver2」で自分がやっていた棋譜を打ち込む際の「手動での」「好手」「悪手」の登録をすることを放棄しました。
 たとえば強いプロの将棋の棋譜であればほとんどが好手なのだから全部好手として、候補手として有力な手と覚えさせる。
 その棋譜を重ねに重ね、分布関数のような評価関数を編み出す手法を生み出したのが激指、さらに多くの棋譜を記憶することで独自に評価関数を作成・修正していくという手法を編み出したボナンザが現在の将棋ソフトの最前線となっています。
 で、これら二つが非常に強いソフトとして君臨しています。(ほかにYSSやGPS将棋など強いものもありますがどういう手法か知らないので今回は扱ってない。)


 実際ボナンザの制作者がおっしゃった、むしろ全く設計思考が違うソフト同士が対戦して互角ってことに驚いた、というのは確かにその通りですね。
 圧倒的に強いか弱いかの二択だと思うのはもっともだと思いました。
 そしてなぜ互角だったのか、手法は違えどその環境で最善を尽くしてきたソフト同士だったからこそだとも思えますね。


 最初の話に戻してもいいけど、もう疲れたからこれで終了。


 ・・・長い文章だなぁ
 誰が読むんだよ。