忍者ブログ
コンピュータ将棋など…。
[11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ちょっとだけソースを見てみましたが、これはっ・・・。
参考になりますね!!

コレは積極的に取り入れないと…。
難点は C# がわからない(爆)。

まぁ、少しずつ読んでいこうと思います。
PR
獅子の特殊ルールは未実装ですが、利きの持ち方を変えて高速化したのでspacemanの中将棋定跡研究というページの「自作詰め中将棋」をやらせてみました。

特に効率の悪いところは
・王手生成・・・合法手を作成し、1手進めた状態で王手になっているものを抽出
・応手生成・・・可能な手を作成し、そのまま攻め側の処理に渡している
ですが、第1問はちょっと時間がかかりすぎ…。
13手詰の11手目を読み始めるときは9秒弱なんですが・・・。

で、王手生成はおいおい考えるとして、応手生成はこれがないと共謀数探索もdf-pnも出来ないのでちゃんと生成したいところ。
コレを踏まえての利き情報の持ち方を変えたので実装すればいいはずなんですが、難しい。
玉と太子がいたときの応手は
・玉が逃げる
・太子が逃げる
・王手している駒を取る
・合駒をする
だけ?

玉と太子が1手で取られないように動かす手もあるはずだから単純に逃げるだけじゃないのか?

うーん・・・。
問題 思考時間(s) nodes knps
第1問 2673.3 518,563,541 194.0
第2問 0.0684 4,377 64.0
第3問 10.78 1,330,804 123.4
第4問 2.684 316,264 117.8
第5問 0.0169 1,050 62.2
第6問
第7問 0.0018 16 9.0
第8問 20.87 2,233,717 107.0
第9問 0.4907 34,965 71.3

現実逃避的に中将棋ソフト開発中です。

合法手の生成がなんとなく出来てきたので、反復深化の詰ルーチンのをやっています。
王手の生成は、合法手を生成した後、王手を残すというれさぴょん式です。

獅子の特殊ルールは未実装なんですが、かなり遅いです・・・。

  詰探索(反復深化) 詰探索(df-pn) 通常探索
なのは 700knps 200knps 70knps
中将棋(名前未定) 20knps (未) (未)

なのはの詰ルーチンは実戦向けに指定局面での詰む手がわかればいいという方針で詰手順はわからなかったけど、進歩本3の「5.4.3 正解手順探索アルゴリズム」をじっそうしなくっちゃかなぁ~。
あまり影響はないと思いますが、今floodgateに投入している版のバグを2つ見つけました。
・詰ルーチンでハッシュに登録した情報を引き出せない場合がある。
・入玉宣言勝ちを間違う。

詰ルーチンのバグは詰部分の開発では直していましたが、本流にマージしていませんでした。orz

入玉宣言は次の(d)の部分をミスしてて玉を含めて10枚以上あるという判定をしています。
なので、間違った宣言をして負ける可能性があります。本番で出なくてよかった…。


入玉宣言勝ち」の条件:

次の条件が成立する場合、勝ちを宣言できる(以下「入玉宣言勝ち」と云う)。
条件:
(a) 宣言側の手番である。
(b) 宣言側の玉が敵陣三段目以内に入っている。
(c) 宣言側が(大駒5点小駒1点の計算で)
・先手の場合28点以上の持点がある。
・後手の場合27点以上の持点がある。
・点数の対象となるのは、宣言側の持駒と敵陣三段目
以内に存在する玉を除く宣言側の駒のみである。
(d) 宣言側の敵陣三段目以内の駒は、玉を除いて10枚以上存在する。
(e) 宣言側の玉に王手がかかっていない。
(詰めろや必死であることは関係ない)
(f) 宣言側の持ち時間が残っている。(切れ負けの場合)
以上1つでも条件を満たしていない場合、宣言した方が負けとなる。

GPS将棋の影響でtemplateの勉強。
簡単な所で次のようなコードを試したところ、cygwin の gcc-3.4.4やBorland C++5.5.1では普通にビルドできるのに、VC++6.0は二項演算子と間違えたようなエラーコードを吐いて通りません。orz
VC++6.0のプロファイラは子関数まで含めた実行時間が出るのですごくいいんだけど、コレじゃ使えない…。
記述を変えて、VC++6.0でも他のコンパイラでも通るようにできないかなぁ~。

// テンプレートのサンプル
enum Player {SENTE, GOTE};

class TEST {
public:
 TEST(){}
 ~TEST(){}
 template <Player player> Player rev() const;
};

template <Player player>
Player TEST::rev() const
{
 if (player == SENTE) return GOTE;
 else return SENTE;
}

int main()
{
 TEST a;
 return a.rev<GOTE>();
}
 



忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
なのはの応援をしていただき、かつ協力いただける方は、アマゾンでの買い物は下のリンクからお願いします
最新CM
[04/27 とおりすがり]
[10/21 おてだま]
[10/20 おてだま]
[01/24 なのはminiふぁん]
[01/08 sakura]
最新TB
プロフィール
HN:
かず
性別:
非公開
バーコード
ブログ内検索
最古記事
カウンター
アクセス解析