• ベストアンサー

将棋ソフトの進歩

カテゴリー的には、「コンピュータ[技術者向け]」のほうに、質問するべきことかもしれないのですが、まずはこちらのカテゴリーに質問掲載させて頂きます。近年の将棋のソフトの進歩はまだプロには及ばないものの一昔前に比べたら、目を見張るものがあり、格段に強くなったと思います。お聞きしたいのは素朴な疑問があるのですが、かなり初期段階の将棋ソフトではいくらコンピュータ側が定石を豊富に持っていたとしても、例えば人間側が、わざと妙なタイミングで端歩をつくなどして、対応したらたちまちコンピュータは定跡どおりにはさせなくなって、定跡から外れたおかしな駒組みを連発していました。しかし、ある時期からの将棋プログラムでは、このようなことはなくなり、人間がどこかで定跡からわざと外したような手をさしても、きちんと大枠の流れの定跡に沿って駒組みをしてたり、戦い方をしてきます。これが非常に不思議なのです。いったいどういうプログラミングの仕方をすれば、こうした柔軟なさし方をコンピュータ側にさせることができるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • moritan2
  • ベストアンサー率25% (168/670)
回答No.3

> moritan2さんは専門家の方ということですが、技術者の仕事をされているのですか。 > こうした将棋ソフト関連にもお詳しいのでしょうか。 私は本格的な将棋のソフト開発をいまから20年ほど前に最初に作った人間です。 最近は新しい思考を作っていないので、正確には「元専門家」です。 ご質問の > かなり初期段階の将棋ソフトではいくらコンピュータ側が定石を豊富に持っていたとしても、 > 例えば人間側が、わざと妙なタイミングで端歩をつくなどして、対応したらたちまち > コンピュータは定跡どおりにはさせなくなって、定跡から外れたおかしな駒組みを連発していました。 これがまさに私の昔のソフトのことか? という気がして耳がいたいです。 > 序盤用の思考ルーチンから、中盤用に切り替えるためにはうまいタイミングで > やらないとだめだと思いますが、こうした判断はどのようになされるのでしょうか。 これは、特にうまいタイミングということではなく、もっと単純なことです。将棋のソフトの思考は最初は定跡の完全一致を調べます。マッチしない時に駒組みデータベースを使った序盤の思考をおこない、これでもマッチする駒組みが見つからない時に次に進みます。意外かもしれませんが、次に動くのは中盤の思考ルーチンではなく、終盤の詰みの探索です。詰みがみつからなければ、それ以外の終盤の処理(相手の玉、自分の玉に寄せがあるか)を考え、そのどれでも手が決まらなかった時にはじめて中盤の思考ルーチンが呼び出されます。 > また、さまざまな将棋プログラムが開発されていますが、このプログラムの中身 > というのは、完全に企業秘密のようなもので、誰かが、自分も将棋ソフトを開発 > したいと思っても、一から自分で組み上げていかなくてはならないのでしょうか。 松原さんらが書いている「コンピュータ将棋の進歩1,2,3,4」を読まれたらどうでしょうか? 私などよりもっと最新の将棋の思考の作者がノウハウを公開しています。

nobulin
質問者

お礼

たびたびの回答ありがとうございました。回答者様のネームを見て、今、気がついたのですが、実名を掲げるのは控えさせて頂きますが、あの1980年代に最初の将棋ソフト「○○○○の将棋」作ったあの方でしょうか。現在の将棋ソフトまでに至る源流を形作ったのはすばらしいですね。前例がない分、手探りで最初に開拓していくのはたいへんなことであると思います。昨年、「ボナンザ」というソフトがコンピュータ将棋が注目されましたが、これも、独特の手法を取り入れているようですね。ご推薦の松原さん著「コンピュータ将棋の進歩3」は以前読んだことがあります。「1,2,4」も探して読んでみようかと思います。

その他の回答 (4)

  • toyomimi
  • ベストアンサー率32% (9/28)
回答No.5

再度の質問にお答えします。 基本的にはCで十分です。特定のOSに依存しないほうが良いですね。 ユーザインターフェースの部分はC++またはJAVAが書きやすくて宜しいかと思います。 クリティカルな部分はアセンブラで1nsでも速くと、カリカリにチューンアップすることはあり得ますね。(笑) この場合もCで書いておいて、それをコメントとして保存しておいたほうが良いでしょう。 データベースの設計はC++や特定のデータベースに依存しないで、Cで書いた方が柔軟ですが、まともなものを作ろうとすると数人年のプロジェクトになってしまうので、最初は余所から出している程度の簡便なサブセットを作られるほうが良いでしょう。 後発が追いつけるのは、先発のほとんどがほぼ同じ程度のデータベースを作っているので、その程度のものの設計だけなら1ヶ月もかからないことと、詰アルゴリズムは論文になっていることと、中盤はまだまだ弱いと言うことからですね。

nobulin
質問者

お礼

たびたびの回答ありがとうございました。非常に勉強になりました。後発の開発者が先発のソフトになぜ追いつけるのかという理由について頂いた回答が特に感銘を受けました。まだまだ中盤は技術深化の可能性が大いにあるようですね。競争してよいソフトが作られるといいです。再度の回答感謝致します。

  • toyomimi
  • ベストアンサー率32% (9/28)
回答No.4

序盤に関して言えば、定跡データベースと、そのエンジンをどのように設計するかによって強さが大きく変わります。 ちなみに、私どもでは平手の場合は5種類のデータベースを用意していますが、それらの組み合わせによって、初段クラスから五段クラスまでの序盤力を発揮できます。 また、エンジンの動作も指定できますので、それで強さを制御しています。 序盤定跡での完全一致から外れた時の対応は各社それぞれですが、序盤データベースが尽きかけているということは分かっていますから、 一致したものに戻るように努力する。 局面が収まるように努力する。 類似局面からの手も候補手として抽出できるようにする。 など、いきなり中盤に行かないような工夫もあります。 これらは、デーテベースの拡充により自動的に強くなってくれるのが嬉しいですし、私どもでも1GBもディスク容量が有れば、圧縮しないで楽に持っていることができます。 詰探索も数手の詰みならともかく、数十手の詰みを苦にしないものができていますので、数手でしか実用でなかった昔とは様変わりです。 私どもではミクロコスモス(1525手)がノートで15分程度で解けてしまう詰めエンジンも提供しています。 今は2つ以上のCPUを駆使できる時代ですから、並行に走らせることができるようになり、強力になりました。 中盤も確率統計処理+読みの併用という新しい手法が優勝クラスでは常識になっています。 細かい例外処理を手で書くだけでは、もうついて行けないでしょう。 おもちゃみたいなものなら、コンピュータ将棋協会がライブラリ化をしたいと思っているようですから、動くだけなら動く程度のものなら、そのライブラリを利用すればよいと言うことになるかも知れませんが、強いものを作ろうとした時に役立つかどうかは、まあやってみてください。 指定局面からの指し手という形にすれば、中盤の強いものを作ることは可能だと思います。 さすがに超多忙なmoritan2さんも正月休みのようですね。 お元気そうで何よりです。

nobulin
質問者

補足

御礼が遅くなりすいませんでした。長文で回答たいへんありがとうございます。また、専門家の方からの詳しい回答を頂いて感謝しております。[toyomimi]さんも将棋ソフトの開発にたずさわっているかたのようですね。現在では百万手以上の定跡を搭載したそふともあるようですし、あの「ミクロコスモス」がわずか15分で解けてしまうなど神技的です。最終盤での正確さ速さではプロ棋士以上の能力を具えていますね。コンピュータ将棋選手権では蓄積された技術・知識などのノウハウが重要で、後発者はなかなか勇勝クラスのソフトには追いつけないと思いきや、突然、新種のプログラムが登場し、優勝をさらっていく場合もあるのでおもしろいです。基本的に対局ソフトの開発は「C++」言語で作成するのがふさわしいのでしょうか。お忙しいところ、たびたびお尋ねしてすいませんが、よければよろしくお願い致します。

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.2

まず昔のソフトの定跡の処理は完全一致が基本でした。そのため、端歩を突くタイミングによって定跡と一致しない局面になると定跡は役に立たず、中盤用の思考ルーチンが動いていました。 一方、最近の将棋ソフトはほとんどのもので、完全一致の定跡ももちろん持っていますが、定跡データベースの完全一致が終わった後は、現在の相手の駒組みを認識しそれに対し自分はどのような駒組みを目指せばよいかという序盤の思考ルーチンが動いて手を決めています。序盤用の思考ルーチンは中盤用と違い、探索ではなく知識によって手を決定します。

nobulin
質問者

補足

回答たいへんありがとうございました。まさにわたしが知りたかった内容の回答を頂きました。感謝いたします。長年疑問に思っていましたので、もやもやが解消した気がしました。なるほど、序盤用の思考ルーチンというものがあるのですね。これはまったく想像もしなかった答えです。探索ではなく、知識によって手を決めているというのも納得です。今までずっと、コンピュータ側の序盤の指し方の進歩を見てきて、定跡から外れてもどうしてこんな弾力的な対応ができるのだろうとAIのすごさを感じていましたが、こうした技術を開発した人たちってすごいですね。moritan2さんは専門家の方ということですが、技術者の仕事をされているのですか。こうした将棋ソフト関連にもお詳しいのでしょうか。序盤用の思考ルーチンから、中盤用に切り替えるためにはうまいタイミングでやらないとだめだと思いますが、こうした判断はどのようになされるのでしょうか。また、さまざまな将棋プログラムが開発されていますが、このプログラムの中身というのは、完全に企業秘密のようなもので、誰かが、自分も将棋ソフトを開発したいと思っても、一から自分で組み上げていかなくてはならないのでしょうか。たびたび申し訳ありませんが、見解をお伺いできたらと思いまして、再度、お尋ねさせて頂きました。よろしくお願い致します。

noname#227760
noname#227760
回答No.1

こんばんは。 将棋に限らず、チェスでもいえるのですが、 コンピュータ側は、考えられる手を先読みします。 その場合、プログラムの内容はさておき、 コンピュータのハードウェアの性能がよくないと結果を返すまでに 時間がかかることになるため、人間との対戦を考えると、 ある程度まで先読みをしたら処理を終了させないと、 対戦用には使えなかったわけです。 そのため、変な手を連発したのかもしれません。 しかしながら、近年CPUの演算速度の向上や メモリ容量の増大により、この問題はクリアされているのだと思います。 また、定石のようなものはデータとしてコンピュータ内部に 蓄積をする必要がありますが、これにも膨大な容量を必要とするため、 ハードディスクの容量が大きくないと、あまり多くの定石を 覚えさせることが出来なかったのでしょう。 これもCPUやメモリの発達と同じく、 近年のハードディスクの容量の増大によってクリアされたのだと思います。 また、どのようなプログラムなのかということですが、 基本的には、ある盤面の状態から、ルール上打つことの出来るすべての 手をためし、それらの状態を様々な方法で数値化を行います。 チェスの場合、平均すると1つの局面で打てる手は30程度あるといわれていますので、 2手先を読むためには、30×30=900の局面を評価するということです。 # 将棋とチェスでは手の数え方が違ったはずですが、 # どちらの場合、どのように数えるのか忘れてしまいました。 たとえば、王の守りが手薄ではないかどうかや、 取られてしまう駒がないか、取り合ったときに損をしないか、 チェスの場合ですと、ポーンチェーン # ポーン(将棋でいう歩)のつながりが強く、 # 相手を寄せ付けないかどうか なども評価基準にします。 将棋の場合はわかりませんが、 チェスの場合は(多少間違っているかもしれませんが)、 ポーン(歩):100 ナイト(桂馬):300 ビショップ(角):300 ルーク(香車が立て横一直線に動ける):500 クイーン(縦横斜めに一直線に動ける):900 のように数値化を行い、様々な盤面を評価する場合の基礎データとします。 将棋も同じような値があるはずです。 単純に言えば、それぞれの数値に、 盤上に存在するそれぞれの駒の数を掛け合わせて 自分の駒についてはプラスし、 相手の駒についてはマイナスを行い、 算出された値がマイナスなら自分がフリ、 プラスなら自分が有利であるということです。 これに、先ほど出したような盤の状態によって 数値をプラスマイナスします。 また、この評価方法についても様々な研究が行われているようですので、 今ではより人間の感覚に近い評価ができるのだと思います。 蛇足ではありますが、コンピュータの基礎的な仕組みを考えた一人である アランチューリングという方は、 programming a computer for playing chess # チェスをするコンピュータプログラムについて という論文の中で コンピュータにチェスをさせることがコンピュータそのものの発展につながるといい、 1942年にチェスをさせるための仮想プログラムを作成しています。 このあたりの歴史は意外と古いのですね。

nobulin
質問者

お礼

長文で回答ありがとうございました。ソフト面のみならず、ハード面の進歩があったので、高度なプログラムを実際の対局に、はしらせることも可能になったということがあるのですね。たしかに10数年前にNECがPC98を出していたころと比べたら、コンピュータの性能は比べようもなく見違えています。

関連するQ&A

専門家に質問してみよう