拙著「コンピュータ将棋のアルゴリズム」でも解説している、世界コンピュータ将棋選手権登録ライブラリ「れさぴょん」のサポート掲示板です。
この部分、ss=3 と代入するつもりではないと思います。
パッチは自由に使っていただいてかまいません。
--- lesserpyon/main.cpp 2011-10-28 08:05:43.000000000 +0900
+++ sakurapyon/main.cpp 2011-10-28 07:57:36.000000000 +0900
@@ -595,7 +595,7 @@
if (strcmp(buf,"%TORYO")==0) {
te=Te(0);
} else {
if (ss<2) continue;
if (from<OU) {
koma=SorE|from;
@@ -604,7 +604,7 @@
koma=k.ban[from];
}
capture=k.ban[to];
- if (ss=3 && promote[0]=='*') {
+ if (ss==3 && promote[0]=='*') {
te=Te(from,to,koma,capture,1);
} else {
te=Te(from,to,koma,capture,0);
ご報告ありがとうございます。
#うぅ、またダサイ間違いが日の目に…(泣)
でも、ここはLAN対戦じゃなくて人間の指し手の箇所ですね。
<意味のない反論(苦笑)。
見た感じ、問題なく動いちゃうことが多いんだろうなぁ(--;
594行で、promote[0]='\0'と代入済みで、ss<2(明らかに入力項目不足)の場合はここに来なくて、ssが2だった場合の動作はpromote[0]が先の初期化が効いていてssに3を代入してしまっても多分正常動作(成らず)、ssが3の場合の動作はpromote[0]が*かどうかを見てるので多分正常動作(成)…。
#それがこのバグを見過ごしてしまった原因でもあるわけですが…。
色々ご協力、バグフィックス、ありがとうございます。
そして図らずも?公開されたプログラム名(sakurapyon)の一層のご活躍を期待しております。
双方に詰みがある局面(詰めろ・詰みがある状態)で、誤って相手側の駒を動かしてしまう場合があるようです。
下記局面で後手番のときに、3一銀(42)と指します。
持ち駒:金銀桂歩六
9 8 7 6 5 4 3 2 1
+---------------------------+
|v香 v歩 v飛 v香|一
| 銀 v王 |二
| 銀 馬 v歩v桂|三
|v歩v歩 |四
| 歩 桂 歩 |五
| 銀v桂 歩 |六
| 歩 歩 v金 歩|七
| 王 金vと v歩v馬 香|八
| 香 飛 |九
+---------------------------+
持ち駒:金
@@ -2483,8 +2485,10 @@
}
TsumeVal *p;
if ((p=TsumeHash::DomSearchCheckMate(KyokumenHashVal,Hand+SorE))!=NULL) {
- te=p->te;
- return 1; //詰んだ
+ if(!te.IsNull()&&(te.koma&SorE)&&IsLegalMove(SorE,te)) {
+ te=p->te;
+ return 1; //詰んだ
+ }
}
int valmax = -1;
for (int i = 0; i < teNum; i++) {
…このバグは、実は古くから指摘されているのですが…
例えば、白砂さんの将棋研究室
http://www.hakusa.net/shogi/
から、
第17回世界コンピュータ将棋選手権出場記
の
選手権の内容
にて、
■5回戦 かめぴょんvs神乎棋技
にも記述されています。
今まで直して来なかったのは、ひとえに私の怠慢によるものなのですが…
(今までに他の人が示した改良例としては、ハッシュの1ビットを手番に当てる、といったものがあります。少々改造範囲が広くなってしまうので、採用して来ませんでした<まぁ、これも私の怠慢なのですが…)
今回示して頂いたソースは、改良例でしょうか?
ぱっと見た感じでは、この改良でおそらく正しく動くようになるものと思います。
また、非常にきれいな改良例で、改造範囲が極めて小さいことも特筆に価します。
色々ありがとうございました。
次のバージョンのリリースの際には、もし、zu2さんさえよろしければ、このコードを使わせていただきたいと思います。
>>1
先のコメントで言い忘れていたのですが、返信を2週間以上も放置していたのは(私の怠慢でもありますが)現在、本職の方が異常に忙しい状態にあり、コメントを頂いてから内容をきちんと確認するまでに時間がかかってしまったことに起因します。
同じ理由で、バグフィックス版を出すのにも時間を頂いてしまうことになりそうです。
れさぴょんを利用の方々、色々申し訳ありませんが、よろしくお願い致します。
>>2
お忙しいなか回答ありがとうございます。
れさぴょんの改良に役立つなら光栄ですので、次回に含めていただければ幸いです。
MinGWでコンパイルして色々なチェックを行っています。
現在当惑していることは、れさぴょんの改造版の商業使用の禁止です。コンピュータ将棋のアルゴリズムには、そんな記述は無かったように記憶しています
現状思っている範囲では、れさぴょんの局面探索は、ソフト的に10倍ほど遅く、あと半分ぐらい枝狩りをしなければならないと思っています。局面評価は、根本的に書き直さないとならないと思っています。データ構造が半分程度、局面探索部が骨組みが残る程度で無いかと思います。そこまでになってもれさぴょんの改造版と言うことで、商業利用禁止になってしまうのでしょうか?
そこまでいうなら0から書き直せということになるかもしれませんが、今書くたたき台はインターフェースも含めて、れさぴょんに似た物になってしまうと思います。要するにどこまでが、れさぴょんなのかが分からないのですが?
商業利用の範囲、についても難しいですね。
あまり縛りを強くするつもりもないのですが、れさぴょんのどの程度の部分を利用するのか、という話になるかと思います。
たとえば、盤や持ち駒、可能な着手の生成位しか使っていないとして、「選手権では」ライブラリとしてれさぴょん使用と書かないといけないと思いますが、商業利用の範疇として、それでも利用していることになるのか、と言われると微妙な気分です。
掲示板ではなく、メールにてご連絡頂ければ幸いです。
>>1
最初の書き込みの文章が失礼ではなかったかと少し反省しています
"うさぴょん"や"れさぴょん"のHPを探してみたのですが、E-mailアドレスが見つけられませんでした。どこを探したらいいのでしょう?探しかたが悪かったのでしょうか
それとも掲示板に表示されるE-mailに私のアドレスを書くのでしょうか?
>>2
あ、いえ、この掲示板のメールのマークのところに私のメールアドレスを載せているので、そちらにご連絡ください。
うさぴょんのページか、れさぴょんのページに、fzk05105@nifty.comというメールアドレスを掲載していますので、こちらでもかまいませんです。
コメント
出来ますね…。
コード上、そうなっていなかったら、バグの一種です。