[ ホームページ ] [ 携帯用URL ]
将棋所のサポート掲示板
将棋所についての質問やバグ報告、USIエンジンの作成報告などに使用して下さい。

[ EZBBS.NET | 新規作成 | ランキング | オプション ]
iモード&(絵文字)、au対応!ケータイからも返信できる無料掲示板!
名前
 E-mail 
題名
内容
   タグ有効 改行有効 等幅フォント
URL



2.lesserKaiで詰め将棋の手順を返す 返信  引用 
名前:小宮    日付:2008/1/12(土) 0:51
はじめまして。
みさきを作っている小宮と申します。
お世話になっております。

GA勝!さんのブログで、れさぴょんで詰め将棋の手順を返す方法について書かれてましたが、
http://d.hatena.ne.jp/streakeagle/comment?date=20080110#c


実際に動かしてテストしてないので申し訳ないですが、
LesserKaiのkyokumen.cppの詰め将棋の所を、

http://misakirara.s296.xrea.com/shogi/lesaKaiMate.cpp

こんな感じで修正してやれば、
どうでしょうか?
Best配列へ手を保存しておくのは、本探索のNegaMaxの部分と同じでいいような気がします。


depth=0で、詰みが見つかったときだけ、checkmateコマンドとかで、
PVを返すという感じでどうでしょうか?



3.Re: lesserKaiで詰め将棋の手順を返す
名前:将棋所の作者    日付:2008/1/12(土) 12:42
アドバイスありがとうございます。参考にしてみます。


7.Re: lesserKaiで詰め将棋の手順を返す
名前:将棋所の作者    日付:2008/1/13(日) 11:40
上記の方法でやってみたところ、手順が返ってくるようになりました。詰め手順としては正確でないことが多いのですが、GUIの側からすれば手順が正確でなくても構わないので、とりあえずこの方法にしてみようと思います。


9.Re: lesserKaiで詰め将棋の手順を返す
名前:小宮    日付:2008/1/13(日) 18:23
GA将!さんのコメント欄でうさ親さんも書かれてますが、

王手する側は、王手する手は確定するんですが、
受ける側は、「すべての応手が詰んでいた」状態になるのですが、
どの応手が最善かは判らないんですよね(^^;
それで必ずしも最適なPVが返せないんです。
ただ、どう受け手も詰むことは保証されてますね。

これは応手がむだ合いをしないとかも必要になるので、
うさ親さんが作られてるようなので、それまでのつなぎにでもm(_ _)m

練習ライブラリ的なれさぴょんは、
このくらいの詰めルーチンでもちょうど良いようにも思います。


10.Re: lesserKaiで詰め将棋の手順を返す
名前:小宮    日付:2008/1/13(日) 18:32
ちなみに今の応手は手の最後になってしまってると思います。

取る応手とか、王の逃げ場が増える応手とか、
そのへんを評価して値の良いものを応手にすれば
もうすこし良いPVが返せると思います。


11.Re: lesserKaiで詰め将棋の手順を返す
名前:うさぴょんの育ての親    日付:2008/1/13(日) 19:57
えーと、非常に困ったことに、不詰みを早く見つけるために、逃げるのに有望そうな手の方を先に読むようにしていたような気がします(苦笑)。
#そう言えば、合駒を後で読むのは、無駄合いの問題の解決方法の一つでもあったような。

…と、改めてソースを確認すると、
・王手駒を取る手
・王が動く手
・移動合い
・駒打ちでの合い
の順序で読むので、最後の手を応手にしてPVを返すと、相当筋の悪い手順が帰っちゃいますね(--;

お手軽な実装を考えてたんですが…頭痛いなー…。

応手の選択をまともにして、詰み筋をハッシュから組み立て直す方針で実装しないといけませんね(--;


13.Re: lesserKaiで詰め将棋の手順を返す
名前:小宮    日付:2008/1/14(月) 0:15
>最後の手を応手にしてPVを返すと、相当筋の悪い手順
 手生成の中まで読んでなかったのですが、
 ちゃんと良さそうな手から応手してるんですね。
 それなら応手は初手にしておけばいいんでは?
 ちょっと直してみますよ


れさぴょんのソースは相当読み込んでますから
他の弟子には負けませんよw


14.Re: lesserKaiで詰め将棋の手順を返す
名前:小宮    日付:2008/1/14(月) 0:20
同じURLですが、
http://misakirara.s296.xrea.com/shogi/lesaKaiMate.cpp
応手の初手をPVの応手にするなら、
これでいいんでは?
と思います(動かしてませんが)


15.Re: lesserKaiで詰め将棋の手順を返す
名前:小宮    日付:2008/1/14(月) 0:27
それでもハッシュで判定した場合の問題は残りますね。


16.Re: lesserKaiで詰め将棋の手順を返す
名前:うさぴょんの育ての親    日付:2008/1/14(月) 2:5
ハッシュで詰んだ場合には、ハッシュに詰んだ手を残してあるので、その手で進めて見て、さらに次のハッシュを読んでみれば(ここで再度応手の生成が必要になるかもしれませんが)どうにかなるかなーと思います。

ハッシュに応手も残してたかなー…f(-_-;

応手も残していたら、ハッシュを辿るだけで十分になるかと思います。
#ただし、ハッシュあふれはしていないことを期待(w

4.USIでの詰め将棋解答について 返信  引用 
名前:森岡@GA将!!!    日付:2008/1/12(土) 18:11
こちらでははじめまして。GA将!!!というソフトを作っている森岡と申します。

表題の件について私のブログのコメント欄(その1その2)で話題が出たのですが、掲示板を開設されたとの事ですのでこちらで続きを書かせて頂きます。

ここで初見の方の為に、掲示板でのやり取りを一部転載します。(streakeagleというのは私のハンドル名です。)

その1のコメント欄

> 将棋所の作者 2008/01/10 19:57
> ついでに質問があります。実は、将棋所に詰将棋解答機能を追加しようかと思っています。(将棋所がコマンドを送って、エンジンが詰め手順を返す、というようなことを考えています。)
> しかし、れさぴょんで詰将棋を解かせると、詰むかどうかはわかりますが、その具体的な手順がわかりません。自分で改良して手順を返せるようにしようかと思ったのですが、知識不足もあってなかなかうまくいきません。詰め手順を求めるのは簡単にできるでしょうか?


その2のコメント欄

>将棋所の作者 2008/01/11 00:15
>エンジンが詰め手順を返す方法として、新しいコマンド(例えばcheckmate)を追加しようと思っています。(infoコマンドは思考中の内容を返すコマンドなので、結果を返すのには使えません。)通常の対局ではgoに対してはbestmoveを返しますが、詰将棋を解かせる時はgo mateに対してcheckmateを返す、というような感じで考えています。


>streakeagle 2008/01/11 19:35
>>>将棋所の作者さん
>確かにコマンドを新設した方が良さそうですね。エンジン側としても詰め将棋モードで探索すればいいと分かりやすいですし。
>細かい事を言うと、“go checkmate”で詰め将棋モード開始、“bestmove mate ...”で詰め手順を返す、とした方が英語的に正しそうな感じ(あくまで感じ)がします。

>将棋所の作者 2008/01/11 20:44
>あと、go mateというのは、USIの原案に用意されているので、それをそのまま使おうと思っています。また、bestmoveというのは対局時の指し手を返すためのものなので、詰め手順を返すコマンドは別に作った方がいいと思っています。(checkmateという名前がいいのかどうかわかりませんが。)
http://d.hatena.ne.jp/streakeagle



5.Re: USIでの詰め将棋解答について
名前:森岡@GA将!!!    日付:2008/1/12(土) 18:28
続きです。

まず一点追加なのですが、その1のコメント欄での私の書き込みを転載し忘れていました。上で書いたその1とその2の間にこの発言が入ります。

> streakeagle 2008/01/10 20:45
> 質問の件ですが、エンジンはinfo pvで詰め手順を返す様なイメージでしょうか?


ここからが本題なのですが、GUIから“詰め将棋解答モード開始”の要求をエンジンに送り、エンジン側が詰め手順を返すという、解答時の全体的な処理に関しては将棋所の作者さんに賛成です。

ただ、開始の指示と解答の返信は「両方ともUSI準拠の(将棋所独自ではない)コマンド」か「両方とも将棋所独自のコマンド」にしてもらえると、私の立場としてはありがたいです。

理由として、上記の様になっていれば、エンジン側は「USI準拠のコマンドで要求されたからUSI準拠のコマンドで返信しよう」「将棋所独自のコマンドで要求されたから将棋所独自のコマンドで返信しよう」という判断が可能になるからです。
(仮に要求はUSI準拠・返信は将棋所独自となると、将棋所以外のGUIへの対応が難しくなります。)


別の案として、GUIがエンジンを起動した後に何らかの方法で(例えば“USI_PROTOCOL_HOGE”の様なオプションを設定する)「将棋所がエンジンを起動した」と教えて貰もらう様に修正し、その上で「要求はUSI準拠・返信は将棋所独自」とする方法も考えました。

この案の場合でもエンジン側はどの様に返信すればいいかの判断に迷う事は無いと思います。

(この案のもう一つの利点は、他の将棋所独自のコマンドが今後追加された場合に、エンジン側が利用可否の判断をしやすくなる、というのもあります。)

長くなりましたが、以上が私の案です。出来れば他のGUI・エンジン開発者(あるいは今後開発する可能性のある方)の意見も聞いた上で判断して頂ければ、と思います。
http://d.hatena.ne.jp/streakeagle


6.Re: USIでの詰め将棋解答について
名前:将棋所の作者    日付:2008/1/12(土) 21:58
まず、私としては、「将棋所独自の」コマンドがあるとは思っていません。将棋所で使用しているコマンドは全てUSIに準拠していると考えています。ただ、将棋所を実装するにあたって、USIの原案だけでは足りない部分が出てきたため、その部分は勝手に追加しました。(gameoverとか、bestmove resignとかいうものです。)これは「将棋所独自の」コマンドというわけではなく、「USIの原案にないコマンドを、新しくUSIに追加した」ものだと考えて下さい。

こういった点について、いつかちゃんと説明しなければいけないと思っていました。(正式なUSIプロトコルというのがちゃんと定義されていなければ、エンジン作者は安心してUSIに対応できないでしょうから。)
しかし、USIプロトコルはTordさんが一人で考えたものであって、それを実装したのも私一人です。だから、何をもって「正式の」USIプロトコルとするのか、ということが決まっていません。

実は、私が追加したコマンドについて、これを認めてもらえるかどうか、Reijerさんに頼んでTordさんにメールを出してもらったことがあるのですが、Tordさんからは何も返事が返ってこなかったそうです。(もう、コンピュータ将棋への関心をなくしたのかな?)そんなこともあって、USIの定義というのは、こちらで勝手に決めても構わないと思っています。ここで、「私のページに書いてあるUSIの説明が、USIの正式な定義です」ということにしてしまいましょう。Tordさんのページに書いてあるUSIの定義はあくまで原案であって、正式なものではない(不足しているものや、余分なものもある)ということでいいと思います。

USIはまだ確定しているわけではなく、今回議論しているcheckmateのように新しいコマンドを追加する可能性はありますが、既に実装済みのコマンドの定義を変える、ということはありません。新しい機能を実装したくなったとき、それを実行するためのコマンドがなければ、新しくUSIに追加する、ということになります。
ですから、仮にcheckmateコマンドを追加したとしても、それは将棋所独自のコマンドというわけではなく、USIの正式なコマンドということになります。

そういうわけで、「将棋所が使用するコマンドは、全てUSIに準拠している」ということが言えます。両者を区別する必要は全くありません。


8.Re: USIでの詰め将棋解答について
名前:森岡@GA将!!!    日付:2008/1/13(日) 15:13
> 実は、私が追加したコマンドについて、これを認めてもらえるかどうか、Reijerさんに頼んでTordさんにメールを出してもらったことがあるのですが、Tordさんからは何も返事が返ってこなかったそうです。(もう、コンピュータ将棋への関心をなくしたのかな?)そんなこともあって、USIの定義というの> は、こちらで勝手に決めても構わないと思っています。ここで、「私のページに書いてあるUSIの説明が、USIの正式な定義です」ということにしてしまいましょう。Tordさんのページに書いてあるUSIの定義はあくまで原案であって、正式なものではない(不足しているものや、余分なものもある)というこ> とでいいと思います。

そういう事情があったとは知りませんでしたが、それなら将棋所のページのUSIが正式版と言ってしまってもいいと思います。Draftが投稿されたshogi-lのMLでも最近はUSIについて議論されていないみたいですし。
もしshogi-lでUSIの“正式版”が決まった場合は、「将棋所はUSI_JPという少し違うインタフェースです」という事にでもすればいい訳ですし。


> USIはまだ確定しているわけではなく、今回議論しているcheckmateのように新しいコマンドを追加する可能性はありますが、既に実装済みのコマンドの定義を変える、ということはありません。新しい機能を実装したくなったとき、それを実行するためのコマンドがなければ、新しくUSIに追加する、という> ことになります。
> ですから、仮にcheckmateコマンドを追加したとしても、それは将棋所独自のコマンドというわけではなく、USIの正式なコマンドということになります。


了解しました。そういう方針ですとエンジン作成の際も安心して利用出来ます。

一つ提案なのですが、ここで書かれた事情と「USIの正式版はshogi-lで未定なので、今後GUIを作成する人は将棋所のページにあるUSIの説明に対応したコマンドを使って欲しい。新機能追加に関してはサポート掲示板で議論しましょう。」という感じの注釈を将棋所のページに追加されてはどうでしょうか?

元に戻って詰め将棋解答モードの話ですが、“go mate”コマンドでエンジンが思考開始して“checkmate”等のコマンドで結果を返す、という流れでいいと思います。
詰め将棋ルーチンのの実装は選手権終了後になると思いますが、GA将!!!にも対応させようと思います。
http://d.hatena.ne.jp/streakeagle


12.Re: USIでの詰め将棋解答について
名前:将棋所の作者    日付:2008/1/13(日) 22:4
わかりました。USIについては、ここのUSIの解説ページの文章が正式版ということにして、解説の文章も変更しておきます。(USIについて「今後、変更される可能性があることに注意して下さい。」なんてことがいつまでも書いてあったら、エンジン作者としてはUSIに対応していいのかどうか迷いますよね。)

1.サポート掲示板を開設しました。 返信  引用 
名前:将棋所の作者    日付:2008/1/11(金) 20:13
将棋所についての質問やバグ報告、USIエンジンの作成報告などに使用して下さい。

ページ: |< << 40 41 42 43 44 45 46 47 48 49 

無料アクセス解析

アクセス解析の決定版!無料レンタルで最大100ページ解析!

   投稿KEY
   パスワード

EZBBS.NET produced by InsideWeb