赞
踩
不考虑博弈的算法怎么能算是AI呢?
max-min极大极小值算法就是考虑了博弈的算法。
来看一个简单的例子
在这个棋局中,电脑为白旗,白旗走哪一步更好呢,也许使用策略表会告诉你,应该冲4,但是冲4后,玩家就会连成4。
这就是考虑了博弈之后,这一步棋就是败局。这就是为什么有max-min算法。也理所当然应该这样。
现在我们考虑两层的情况:
这一步,应该电脑走了,电脑现在有3种走法,A,B,C 。
当电脑走A后,玩家有D,E两个位置可以走。 当电脑走B后,玩家有F,G两个位置可以走......
如果一个电脑可以看到两步以后的棋,就和普通人一样。又假定电脑对整个棋盘的局势有了自己的判断。那么在两步棋之后,电脑判断了整个棋盘的局势,如下图:得分越大,对于电脑越有利。电脑就会想了,我下哪一步好呢。电脑应该下C吗?因为I的得分为6.当然不是了,因为当电脑选择下C时,玩家会选择下H,下这一步对玩家最不利的棋。当电脑选择下A时,玩家会选择下E,下这一步对玩家最不利的棋。所以,对于A,B,C三个节点来说
所以,对于A,B,C三个节点来说,电脑就已经对他们进行了打分,所以,电脑最后会走3这个点。
这就是max-min算法,一个很简单的东西,我就没看到有人把它说清楚过。
明白了这一点,就知道需要干嘛了。
1、需要计算出电脑可以走哪些棋。
2、有一个好的评价局势的函数来评估分数
实现如下,如果你递归都还没搞懂,就不要看了:
- //2018年3月9日15:54:16——March 9, 2018 15:54:16
- //追梦少年 QQ:1131052403 —— Dreamer QQ : 1131052403
- //开源的狂热爱好者,代码风骚,效率恐怖 —— Open source enthusiasts, code coquettish, efficient horror
QPoint Game::maxmin2(int deep)
{
int best = INT_MIN;
QVector<QPoint> points = gen(deep,computerColor); //可以走哪些点
for(int i = 0;i<points.count();i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。