通过俄罗斯方块浅谈游戏中的AI(一)我眼中的小游戏AI

主题之前:

 

我对于AI的认识不像很多科班出身的专家,各种理论一大套,我是本科毕业就离开了科班,很多知识还没有补充完备就离开了学校.

而且很遗憾,我也不是个成功的学生,离开的时候甚至我没有带出我必须带出来的学位证.....残念.戴思达......

 

我喜欢AI是因为它让人感觉神秘,好像真的有智能;我学习AI也是稍微看了点书,关键是练习;真正的练习我想才刚刚开始.

 


 

进入主题:我眼中的小游戏AI

 

  小游戏的AI和大型游戏的AI可能是相似的,理论基础上也是一致的,可惜我只能从更通俗的角度去说明它.

我认为小游戏的AI分为3类:可完备解型、重深度计算型、重策略型。

 

可完备解型: 已经有了绝对的胜负判定方案,无论如何处理,都在控制之内的游戏;代表性的像拿硬币类型的,小型的棋类游戏(如酒吧的4子棋,3*3连线--计算机书上的例题),经典象棋残局、扑克残局(18罗汉对4大天王)等等。

重深度计算型: 对于游戏本身没有太深理解,但是能有绝对的执行深度判定可能性,通常以简单快捷的评价函数配合大量优化过的深度计算。我现在了解的也都是算法课程中交的算法,而且我也没有学好,只用过dp和贪婪,了解过αβ剪枝和策略树。

重策略型已经有了很好的评价策略,能形成较浅层次的策略树。评价函数本身庞大,递归层数有限,甚至不递归。下面对比说明会有具体解释

 

 注意:绝对的执行深度判定可能性 指程序有可能真实的预料到网下的n步,这不是什么标准概念,是我个人的一种理解。比如象棋游戏就可以实现这点,而扑克游戏就很难,扑克游戏是不明牌的,每一次出牌都是假设对方有什么牌,这个假设递归两次基本就不是误差的概念了。

  


 

基于上面的三类,毫无悬念,俄罗斯方块应该属于‘重策略型’。它无法有完备解、它无法预计两步以上,但是它可以针对这两步做出很多好的策略。

 

绝大多数人的AI程序编写都是从‘重策略型’游戏开始编写的。我第一个AI游戏是上大一的时候,用tc2写的黑白棋,当时根本不知道什么叫AI,所有的策略都是无序的,根本没有专门一套评价体系,想到哪里算到哪里,代码也没有什么可重用型,完全不像现在写的样子。

更加遗憾的是,我当时可以想到利用递归会更加增强它的职能,但是根本当时只学过不到1年C语言,更不用说算法、数据结构、编译原理等专业课,根本写不好这样的递归。

最终,我完成了一个版本,利用超多的策略,让它不仅可以走棋,而且可以让一般人不容易赢。

 

现在想想还是比较弱的,黑白棋是个完全可以高递归深度,少策略实现更好算法的程序,我下载过一个黑白棋程序,有个菜单项就是选择递归的层次,我记得最高是17或者19,一共60步最多,递归接近20步已经远超过一般人脑的水平了,所以我虽然从来没有赢过那个递归17步的电脑,我也一点没有什么意外。

我今天看来,黑白棋递归到最终60步,用现在的计算机配合一定的剪枝,应该也不会太卡。当然只是大概估算,别为此较真。

 

 

现在比较流行的重深度的另一个游戏是‘象棋巫师’,我玩过这个游戏以后,才准备学αβ剪枝,它在游戏中把剪枝利用的非常好,我能看到的在可选步骤10步左右的情况下,可能会递归20多层,实际象棋每一步可能有几十步,如果不管好坏均去递归的话,可能效率会极其低,αβ剪枝的优势就是能够把无意义的选择剪掉,保证有效的有限求值范围。

 

有机会我希望在后续的文章中会进一步阐述上面说的的内容,而且也会给出相应的实现。

 


期待下一节 通过俄罗斯方块浅谈游戏中的AI(二)我的俄罗斯方块AI策略

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值