2 qq 21899851 qq_21899851 于 2016.03.12 18:58 提问

alphaBeta算法做象棋还是很笨而且很卡,有没有好的AI算法效率还不错的

有没有对算法非常了解的大神,小弟在学做一个cocos2dx象棋游戏中使AI困难模式的算法使用alphaBetaSearch搜索算法,不过本人对这个算法的了解不是很深,整个游戏框架基本搭建完成,但是就算使用了减枝优化后,实际运行的时候还是卡的有点久AI才做出反应,有没有在此基础上还可以优化的方法。有懂算法的大神可以点播一下么。

我总觉得按他们那个alphaBeta算法做象棋AI还是很笨,我随随便便就下赢了,我是想这个作为我的论文的,到时候答辩要是他们专挑这些毛病,说什么AI怎么这么笨啊什么的我觉得就很不爽。。。。。。。。。。哎。。。我们那些老师就喜欢挑刺所以我想尽力做到接近目前我能理解的完美,有木有好的算法呢。

1个回答

Lc_BoYi
Lc_BoYi   2016.03.16 17:15

我所了解的博弈算法有这几种alphaBeta,蒙特卡洛,UCT,前者适合于对弈过程中估值函数明了所采用的一种穷举算法(极大极小值),alphaBeta实在该算法上的改进。如果你的象棋用这种算法的话你的估值函数就需要写的好,要提升速度的话就要在剪支上面花点功夫。比如加入先验知识库。
蒙特卡洛采用的是一种随机的模拟的算法,就是在对每个节点进行模拟的时候其双方的走步都是随机的,当模拟深度截止的时候就结束模拟返回当前局面的估值,对每个节点都模拟相同的次数,当所有节点都模拟完成后采取估值最高的节点。
UCT是在蒙特卡洛上的改进,主要是在“对每个节点都模拟相同的次数”这里做改变。它尽量选取估值高的节点进行模拟,同时也会少量的模拟胜率低的。这样就把模拟次数充分的利用在胜率搞的节点上。
象棋方面的博弈程序,我了解的大部分就是用的数据库做的,将大量的局面以数据形式保存到数据库里面,在下棋的时候就去参考数据库。前不久的围棋程序alphaGo就是采用的着用方式,当然他还有神经网络学习系统。
如果你不想做太深的话就在估值方面和剪支方面下点功夫吧,还可以引入残局库。后面的两种算法一般是用于非完全信息博弈里面的。具体你自己去百度。

Lc_BoYi
Lc_BoYi 回复白丶衣: 对cocos2d-x不了解 不好意思
接近 2 年之前 回复
qq_21899851
qq_21899851 嗯,您说得思想确实是这样的,只是我现在使用的是cocos2d-x做游戏开发,这个引擎链接数据库还有一定的隔阂。数据库目前接触较少确实也需要多多的了解。谢谢您,如果您对cocos2d-x的数据库连接方面有例子的话可以告诉下吗或者告诉下这些资料的具体地点。嗯感谢您的回复
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!