モンテカルロ将棋(7) 実現確率っぽいのを入れてみる

詰めハッシュはほとんどヒットしないのでやめてみました。
1手詰めはそのまま。
SEEの代わりに、昨晩求めた実現確率っぽいのを入れてみました(効果が出てるかは検証してない)

▼v歩
 9 8 7 6 5 4 3 2 1
---------------------------+
 馬v桂 ・ ・ ・ ・ ・v桂v王|一a
 ・ ・ ・ ・ ・ ・v金v金v香|二b
v歩 ・ ・ と ・v歩v角v銀 ・|三c
 ・ ・v歩 ・v歩 ・v歩 ・v歩|四d
 ・ ・ ・ ・ ・ ・ ・ 銀v金|五e
 ・ ・ 歩 ・ 歩 ・ 歩 飛 ・|六f
 歩 ・ 桂 ・ ・ ・ ・ ・ 歩|七g
 ・ ・ ・ ・ ・ ・ ・ 銀 香|八h
v龍 ・ ・ ・ ・ ・ 金 桂 玉|九i
---------------------------+
△ 歩五 香二 銀
qui: △27飛(-720) △34銀(-1264) △37馬(-1383) △24歩打(-1389) △24銀(-1394) △16
飛(-1574) △27歩打(-1582) △46馬(-1734) △55馬(-1747) △27香打(-1776) △81馬(-17
80) △35銀打(-1785) △14銀(-1812) △37銀打(-1869) △27銀打(-1869)

GoSimulation!
△27飛(35/1) △34銀(43/1) △37馬(32/1) △24歩打(42/1) △24銀(42/1) △16飛(33/1)
△27歩打(38/1) △46馬(33/1) △55馬(28/1) △27香打(46/1) △81馬(31/1) △35銀打(34
/1) △14銀(39/1) △37銀打(33/1) △27銀打(36/1) △64馬(31/1) △44銀打(42/1) △24
銀打(41/1) △42銀打(35/1) △53と(42/1) △35歩(32/1) △24香打(40/1) △44歩打(34/1
) △82馬(38/1) △16銀(42/1) △82歩打(33/1) △73馬(27/1) △89歩打(31/1) △52と(39
/1) △41銀打(43/1) △27香打(46/2) △27香打(45/3) △27香打(46/4) △27香打(46/5)
△27香打(45/6) △27香打(44/7) △27香打(44/8) △34銀(42/2) △41銀打(44/2) △41銀
打(46/3) △41銀打(46/4) △41銀打(46/5) △41銀打(45/6) △41銀打(45/7) △41銀打(44
/8) △41銀打(44/9) △41銀打(44/10) △41銀打(44/11) △41銀打(44/12) △41銀打(44/1
3) △41銀打(43/14) △24銀(38/2) △27香打(44/9) △27香打(44/10) △27香打(44/11)
△27香打(44/12) △27香打(44/13) △27香打(44/14) △27香打(44/15) △27香打(43/16)
△34銀(43/3) △34銀(41/4) △44銀打(42/2) △44銀打(40/3) △53と(43/2) △53と(43/3
) △53と(42/4) △16銀(38/2) △24歩打(41/2) △24歩打(40/3) △24銀打(38/2) △27香
打(43/17) △27香打(43/18) △27香打(43/19) △27香打(44/20) △27香打(44/21) △27香
打(44/22) △27香打(44/23) △27香打(44/24) △27香打(44/25) △27香打(44/26) △27香
打(44/27) △27香打(44/28) △27香打(44/29) △27香打(44/30) △27香打(44/31) △27香
打(44/32) △27香打(44/33) △27香打(44/34) △27香打(44/35) △27香打(44/36) △27香
打(44/37) △27香打(44/38) △27香打(44/39) △27香打(44/40) △27香打(44/41) △27香
打(44/42) △27香打(44/43) △27香打(44/44) △27香打(44/45)
po=20000 po/sec=1574 node=1325736 hash=0 mateOne=12231 even=6288 time=12.7秒

遅くなる要素がないので速度はそこそこでてます。1500PO/sec


実際は、何手まで指して詰まないなら無効にするか?によってけっこう変わる
(evenが無効になったPO数)
現在100手にしてますが、150手にすると無効になるPlayoutの手数が増える分、遅くなります。
どうせ終盤でしか使わないので、もっと短くていいかも?
でも、短くすると速くなるけど、無効になるPOも増えますね
囲碁は、ある程度指せば、必ず、先手後手、どちからが詰むでしょうけど、
将棋は、打つ手もあるし、動き回ることもできるので、このへんは工夫の余地がありそう


1シミュレーションを200POにしてますが、少なくすると速くなるけど、精度が悪くなるので、
最善手が不安定。
多くすると安定するけど、無駄な手にもPOを消費するので、効率悪い。
1シミュレーションのPO数を段々増やしていくのがいいかも。


UCTにしたいので、山下さんの疑似コードを眺めています
http://blog.livedoor.jp/yss_fpga/archives/50392942.html

progressive wideningはUCTの探索対象ノードの枝狩りを段々止めていく手法みたいですが、
1シミュレーションのPO数を段々増やしていくって手法は存在するのだろうか?


というか、

win = -mc_one_simulation_start(UN_COL(col));	// 1 or 0

この部分は、もしかして、1シミュレーション=1PO?


あとね、SEEの何が遅いってソートが遅いことが判明。
100手ぐらい生成されるとソートもけっこう時間がかかるらしい
モンテカルロは乱数で打つから、確率傾斜だけできてれば、ソートされてる必要がないので、
ソートしてません。