QT五子棋项目详解之四:AI人机对战max-min极大极小值博弈算法


不考虑博弈的算法怎么能算是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
  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值