モンテカルロ将棋(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手ぐらい生成されるとソートもけっこう時間がかかるらしい
モンテカルロは乱数で打つから、確率傾斜だけできてれば、ソートされてる必要がないので、
ソートしてません。