コンピューター将棋の構造 - ユーザーインターフェイス(UI)

本日の課題は...ユーザーインターフェイス(UI)...つまり、将棋ソフトは作れたが対局するための入出力はどうするのか?...です。

これは将棋ソフトを書く身にとって「必要だが面倒、出来れば割愛したい」といった類の厄介者です。この手のものは

 ①組むのに思ったより時間がかかる
 ②作ってもプログラムが強くなる訳ではない
 ③美的感覚の希薄な我が作ったところで無様なものしかできない

...なので避けて通りたい道であります。

その様なときには先人の英知・努力を遠慮なく拝借するのが業界のジョーシキなので、

将棋GUIソフト「将棋所」
http://www.geocities.jp/shogidokoro/

『将棋所は、USI(Universal Shogi Interface)プロトコルに対応した将棋GUIソフトです。
将棋ソフトを作成する時、将棋所を使えば、面倒なGUIを作成する必要はありません。思考部分をUSIに対応したコンソールアプリケーションとして作成するだけで動かせるようになります。』

...を使用します。我が最初に実装したDOSコンソールでの入出力と比較すると

http://www.tokinclub.com/dp/node/525#comment-9924

「雲泥の差」とは正にこの様な比較を指していると思い知らされます。

将棋所HPを読み進めれば解りますが「将棋所」を使用するためには指定のプロトコル(通信規定)で通信しなければなりません。ですがそれに必要な努力・時間は自分で初めから構築するのに比較して数分の一ですし、なにしろ見た目がよろしいです。更にいたりつくせりの機能てんこ盛りです。「無明 v0.1 -対ー 無明 v0.1」もこれのお陰で実現できました。

で・す・が、好事魔多しでございまして、設定にはちょいと苦労しましたね。Javaで書いた税金みたいのものですな...

投稿者: webMaster 投稿日時: 土, 08/22/2009 - 15:38 categories [ ]

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。

コードの書き直しは修羅の道

「読み筋」実装にあたり、

「それでは良い機会だから今まで書いた浅読み君関係のコードを一掃して全部要りの検索エンジンを書き直そう」

...と思いついて数時間。ぜ~んぜん進みませんでした。段階を踏んで新・アルゴリズムを書き足すのは比較的楽でしたが全部一括で書き直すのはまるでベツモノ、ツワモノ、バケモノでした。

なので書き直しは諦めて現在のコードを見直し、手直しした後に書き足したら...一時間で稼動しました。

評価関数がザルなので「読み筋」そのものは悲劇ですがこれでPondering(「先読み」)への基礎はできました。

Principal Variations の実装

定跡ライブラリーはここいら辺でちょいと寝かせて...

今週の課題は「Principal Variations」を浅読み君に装着します。上手く出来たらご報告です。

Principal Variations... 主要変化...平たく言って「読み筋」の事です。

定跡と浅読み君

例えはみょうちくりんですが浅読み君はエンジンの無い飛行機(グライダーですね)みたいな物です。

序盤の壁を乗り越えて斬り合い(駒得しか理解できないので)するためには誰かが「離陸」のお膳立てをする必要があります...それが定跡ライブラリーの任務ということです。

それでも未だ上手く飛べない...のが現状ですがね。

かなりの出来栄えでは!?

無明くん、どんどん良くなっているみたいですね。どうなるか楽しみだ。

7八金、3二金はいいとして、やはり金・銀の着手が少ない印象ですね。例外はありますが、飛・角だけではなく、桂・香の交換から打ちまくる展開は、実戦ではあまり見掛けないと思います。 最近ハマっているチェスに動きが似ているので、この点からも楽しく拝見しています。

疑問手

>先手に疑問手が多いのはなぜかな?

 ②定跡の読み出しは一番緩い設定

...なので該当する局面があれば記載されている手がいかなる疑問手・悪手でも評価せずにそのまま使用します。これではただの「棋譜の山」なので吟味精製して実用に耐えうる定跡ライブラリに進化させることが課題ですね。

現在の評価関数は「駒割りによる得点」のみ評価するため駒交換の無い序盤の手は全て同等と見なします...その中でランダムに手を選ぶのでど~しようもない手を指す事が多いですね。

面白い!

無明くん、だいぶ進歩してきたようですね。指し手がだんだん様になってきました。
序盤、先手に疑問手が多いのはなぜかな?結局、それが祟ったような結果でしたが。

無明 v0.1 対 無明 v0.1...定跡付きで再び

①4手読みで
②定跡の読み出しは一番緩い設定

...で自己対局です。

棋譜暗記

>プロの棋譜・全局面を‘暗記’させて、その中から手を選ばせようとしているのですか?

全局面を暗記しましたがそのまま全部使うわけではありません。66万手を登録した「宮本定跡」を使えれば一番楽なのですが、

宮本定跡
http://members.ld.infoseek.co.jp/jyouseki/page002.html

...これは柿木将棋用(ファイルのフォーマットは不明)なので我には使えません。理想的には浅読み君が序盤を理解できればよろしいのですがそれは現在一寸無理な要求です。となれば「自作するべし」です...ですが我の棋力・気力は果てしなくゼロに近い。よって棋譜データを処理して統計を取ります。

これでは「定跡」とは呼べないかも知れませんが「これでいいのだ」と言う事で...

その結果を元に以下のルールで「定跡」を使用します。

①データ使用の上限は??手までとする
②最低??回以上出現した局面のみ使用
③選択が複数あるときは出現数に応じてランダムに選択

 (例)ある局面で「7七歩」が70回、「7五歩」が30回指されたのなら「7七歩」を70%、「7五歩」を30%の確率で選択します

④該当する局面が無いのなら浅読み君の出番です

もしかして・・・

無明くんに、プロの棋譜・全局面を‘暗記’させて、その中から手を選ばせようとしているのですか?!コンピュータは暗記が得意だから、って本当に可能なのですかね。

chessならできるかもしれませんね。Levelを上げるととてもうまく詰めろを掛けてきたり、素早く駒を取りにきます。たぶん‘型’があるのでしょう。

東大将棋は、‘端’の感覚が弱いようです。とにかく捌かせないようにして、端攻めからと金をいっぱい造って勝つことがあります。

ボナちゃんは強過ぎてよくわかりませんが、角切り(角金交換)をさせないこと、位取りのように大模様で圧迫して一人千日手状態にさせること、みたいにすると中盤で投了してくることがありました。

定跡と解析

2400棋譜読み込んでとりあえず実験。本格的な定跡ライブラリは寝ている間にプログラムを走らせ蓄積します。

最初の数手はきちんと定跡をなぞって指してきます。実験成功です。検索時間は今の所1/100秒以下です。棋譜数が増えれば遅くなるでしょうが上限で2~3数秒程度でしょう。

検索したところ 197,939局面に対する「人間の回答」を登録...となっていますが、一寸手順をいじくると「該当無し」となりますね。とほほ。「対ソフト 定跡外し」に対応も課題の一つです。

現在のところプロ・アマ棋譜混合なので「プロの選択は貢献度を上げる」とするべきかもしれません。

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。