象歩将棋
Webと将棋で何か具体的なもの作って行こうとしてます。
↪ 新規投稿する
468 shu #f0c10dc 2008/05/20 21:32 prob:0.0%
流鏑馬十番まで解けた 処理時間は0.1秒前後(0.5M〜2M局面/秒) 持ち駒を考慮した場合の盤面ハッシュのコンフリクトは非常にまれ。 盤面の圧縮 >462 は無意味なので捨てた。 局面空間のメモリ管理は単純な方法で済みそう。 しかし無双一番は依然手強い。未実装なものは、 1) 局面空間メモリ管理 2) 探索における同一盤面ノードの処理 3) 低級な指し手の優先順位(成り優先とか) 4) 無駄な合駒の処理
467 shu #f0c10dc 2008/05/19 22:46 prob:0.0%
持ち駒情報を追加 局面の重複判定の精度は向上したので、流鏑馬二番は解けた。 5,615行
466 shu #f0c10dc 2008/05/18 22:14 prob:0.0%
流鏑馬二番が解けない これは持ち駒情報を持っていないため。 (久しぶりに試してます;;) 20〜24ビットに丸めたハッシュキーのコンフリクトは探索局面の 0.1% くらいなのに対し、 同一盤面(局面の持ち駒を考慮しない)のヒットは探索局面の半分くらいに発生する。 持ち駒はハッシュキーに含める方法もあるけど、 同一盤面であることの情報も欲しいので、キーには入れず値の方に持つことにする。 持ち駒は32ビットで十分表現できる。(現実には玉Kは不要) ?.....P...L...N...S...G..B..R..K 00000000000000000000000000000000 引き算が必要になる場合は、引かれる方の各先頭ビットを立てれば良いだろう。 01000001000100010001000100100100 参考サイト: http://ameblo.jp/professionalhearts/entry-10003663090.html http://www.emit.jp/prog/prog_b.html
465 shu #f0c10dc 2008/05/03 23:13 prob:0.0%
そろそろインタフェースの準備 python の ctypes モジュールを使うと楽できそう。 http://blog.goo.ne.jp/anoydevl/e/a1193ca3cafed036c8c232ac4a14d894 http://ymasuda.jp/python/ctypes/tutorial_jp.html C++ クラスの wrapper 関数をこしらえた後、 $ python2.5 >>> import ctypes >>> so=ctypes.CDLL("./libCShogi.so") >>> ob=so.cshogi_create() CShogi:: new >>> so.cshogi_hello(ob) CShogi:: Hello, CShogi! >>> so.cshogi_delete(ob) CShogi:: del >>> 簡単だぁ (^^;
464 shu #f0c10dc 2008/05/02 23:07 prob:0.0%
> 再帰探索処理をデータ保存クラスと探索処理クラスに分離 探索モジュールをじっと見る すると脳内で再帰処理のシミュレーションが始まる。 しだいに脳が再帰処理と同化して行くのが分かる。 たとえば処理の一部を変更しただけですべてが変わる。 まさかフェルンデクライス・メソッドとかに通じるものがあったりするのだろうか。 http://lightson.dip.jp/blog/seko/1610 正確に処理を記述するには状態遷移表とかを書くのが定跡なのだろうが、 今回は紙と鉛筆を禁止してるので、しばらくは脳内で遊ぶことにしよう。
463 shu #f0c10dc 2008/04/30 21:49 prob:0.0%
亀の歩み 再帰探索処理をデータ保存クラスと探索処理クラスに分離、 ツリーの三色塗り分け問題にまでは到達できた。 反復深化法での処理を組み込み中。 4,716行
462 shu #f0c10dc 2008/04/24 21:55 prob:0.0%
盤面の圧縮値 今回のプログラムは盤面のビットマップを常に保持してるので、安直にそれを再利用。 手順のハッシュと局面のハッシュは交差するのではないかと云う願望です。 # 実はそれらは同じものだったなんて結論。ってことはなかった。 駒の配置は9x9x2ビット空間に収めてあるので、OR演算で四つ折りに畳み込んで5x5=25ビット。 今のところ良く働いてるみたい。だけど下位8ビットだけ取り出しても結果に変化は無いようです;; Zobrist ハッシュキーの方が良くできてるので、盤面値の出来はあまり関係無いのかも。 わたしゃ数学的評価はできめるせんぬ;; Zobrist キーを利用した探索では異なる局面を同一と判断する可能性が(わずかでも)常にあるので、 詰め手順を求めた後に検算するとか、うまい方法を考えないといけないのであろう。 ここにも「手の発見」と「手の評価」と云うテーマが現れる。
461 shu #f0c10dc 2008/04/24 20:55 prob:0.0%
> 459 なんかハッシュの効率悪そう。 Zobrist キーは高効率でした;; 単純な同一局面判定処理を追加して試したところ判明。 嘘ついてごめんなさい m(.".)m たとえば、以下は「無双一番」を13手まで馬鹿読みした結果。 探索局面総数: 28,483,070 未解決局面数: 12,088,478 ハッシュ配列のサイズ: 16,777,216 ハッシュ配列の利用数: 7,585,301 (45.21%) 同一索引・同一局面数: 20,896,372 同一索引・相違局面数: 1,397 ハッシュキーの配列が50%近く埋まってきてもコンフリクトする確率は小さい。 そして重複局面が多いのは千日手模様の繰り返しからなる局面が原因らしい。 とすると、そろそろノードの判定値を保存して反復深化処理を試してみても良さそう。 現在のソースは 4,496 行。
460 shu #f0c10dc 2008/04/23 21:21 prob:0.0%
局面ハッシュも必要かな 指し手のハッシュキーはかなり重複があります。 11手詰めくらいでも約半分重なっています。 本当の恩恵を授かるのはまだ先のことなのでしょう。 局面ハッシュ併用した場合、キーの重複はかなり減るか? それならば残ったものは探索処理を利用して同一局面判定すれば良いと思う。 心配なのは本来同一局面は頻発するものではないかと云うこと。 この辺は試してみないと私には解りません。 無駄な合駒処理のためには、持ち駒情報も必要になりそうです。 とりあえず正攻法で考えてるつもり。
459 shu #f0c10dc 2008/04/22 22:22 prob:0.0%
なんかハッシュの効率悪そう。 ツリー探索自体はまあ高速にできるので、注目すべきは同一局面の判定かなー あーだこーだと夜もふける。 考え処ですね;; 長考宣言...