作者:郭昊天886688 | 来源:互联网 | 2023-05-31 16:45
亚马逊棋的博弈树过大,一般的搜索方式都行不通。在尝试了多种搜索算法后,近日使用蒙特卡洛,表现的效果离预期效果相差甚远。于是,希望破灭,程序进展再次陷入僵局。我是这样使用蒙特卡洛的:首先从可走的
亚马逊棋的博弈树过大,一般的搜索方式都行不通。
在尝试了多种搜索算法后,近日使用蒙特卡洛,表现的效果离预期效果相差甚远。于是,希望破灭,程序进展再次陷入僵局。
我是这样使用蒙特卡洛的:首先从可走的那些着法中去掉垃圾着法,保留一些比较好的;然后对保留下的那些着法逐个使用蒙特卡洛的思想进行模拟对局(对局至2至6步),模拟对局的局数为10000局;最后对10000个局面进行整体评估。问题就随之而来了,一个着法模拟对局10000局,每次模拟对局2步,一个着法耗费的时间达到约1秒!于是100个着法的模拟对局会耗费100秒!这种速度是无法容忍的。
与蒙特卡洛算法一起的还有一个UCT算法,我没有用UCT,UCT是使程序有选择的展开那些胜率比较高的着法,应该不会对模拟对局的速度有影响呀。
总之,现在是一头雾水。
希望大家能帮我看看,我想我一定是哪里错了,专家说Amazons使用蒙特卡洛算法的计算速度非常快,而我的却慢如蜗牛。。。
7 个解决方案
亚马逊棋 没做过,以前做过象棋,
http://topic.csdn.net/u/20090706/18/4361fdac-a26a-431f-bb3a-8a093b471c7c.html
刚开始的时候也一直纠结于纯搜索算法,但事实证明,光有好的算法也没用,一但搜索深度增加到一定程度,博弈树就会成千万倍的增加。
所以需要结合棋谱,过滤掉大部分的无用节点,搜索深度会有很大的提高。
如果还需要继续增加,可以考虑使用分布式结构。使用搜索服务程序分布到局域网中,然后主程序把节点数据依次发给各服务器计算。
以前做的那个象棋程序,我使用了9台机计算机做分布计算。搜索到128层只用了11秒,如果你用单台计算,估计算上几天也算不完。
谢谢楼上的朋友。你讲的很对,但使用多台计算机加快搜索对我来讲是没有条件实现的。
9台计算机11秒能算完,一台最多99秒就能算完了,人家的分布式计算,那是要成千上万的处理器工作的
“然后对保留下的那些着法逐个使用蒙特卡洛的思想进行模拟对局(对局至2至6步)”
对局至2到6步是什么意思?就是说不是模拟至游戏结束?