开天篇——浅说《蒙特卡洛算法》
引言
前几天接触了一个编程对抗赛的游戏,题目大概内容是对抗双方在一个已知地图上占领地盘,看谁占领的多。近期由于参加各种认证考试又重新学习了下各种算法,对这个编程对抗赛游戏也详细分析了一下,发现这个游戏很类似于棋类中的围棋游戏,仅仅是游戏规则有些差异。对抗赛游戏比围棋在每回合落点上增加了一个比较大的约束,每次落点要挨着上次落点(使用有限次的道具除外),这样简化了很多变化;但对抗赛游戏比围棋复杂的是:a). 多了一些道具使游戏增加了不确定性,b). 地图大小也比围棋盘大很多(围棋盘19*19,对抗赛游戏地图最大有40*70个选点)。
采用传统的算法来去求解最优解在现有条件下是不现实,换一种思路,是否能够通过快速的方法简化计算来找到比较有效解的方法呢。蒙特卡洛算法就是来解决这一类问题而被提出的一种以概率理论为基础的数值计算方法——通过模拟定量分析,使得复杂计算的算法变得快速简单。
原理
蒙特卡洛的基本思想是人为地制造出一种概念模型,使它的某些参数恰好重合于所需计算的量;又可以通过实验,用统计方法求出这些参数的估值;把这些估值作为要求的量的近似值。
蒙特卡洛算法非常适用于类似于棋类的游戏比赛——零和游戏,即不一定非要找到最优的方法,只需要比对手的方法好就可以赢得游戏比赛。当前,普遍计算机棋类游戏程序基本上都是基于蒙特卡洛算法,特别是像围棋程序。具体的说,蒙特卡洛是使程序在当前盘面所有合法落子点中随机选择一点落子,然后不断重复这个随机选择合法落子点的过程直至棋局结束,再将棋局的胜负结果返回,最后依照所有返回结果对当前盘面进行评估。流程如下:
将蒙特卡洛算法应用在棋类游戏中,就形成了著名的蒙特卡洛树搜索,流程图如下。这是一种基于最优优先的搜索方法。蒙特卡洛树捜索主要包括以下四方面内容:
(1)捜索。递归地从博弈树的根结点向下捜索至当前的叶子结点。
(2)扩展。对博弈树当前的叶子结点进行扩展。
(3)模拟。从博弈树当前的叶子结点开始进行蒙特卡洛模拟评估。
(4)更新。将蒙特卡洛模拟评估的结果以回溯的方式更新到博弈树的每一个结点上。
蒙特卡罗算法实现的两大优点:
一.简单——省却了繁复的数学报导和演算过程,使得一般人也能够理解和掌握;
二.快速——简单和快速,是蒙特卡罗方法在复杂游戏中获得应用的技术基础。
应用
蒙特卡洛算法最大的特征就是模拟,只要能够建立一种概率模型,通过反复迭代很容易将现实生活中的应用通过计算机程序来模拟出来。所以很容易能够将这种算法应用广泛应用于金融/证券/保险、石油/化工/能源、制造/交通/运输、航天/航空、医疗/医药等等各业。
当然,仅蒙特卡洛算法还不能完全解决上面复杂应用的实际问题。蒙特卡洛算法计算出来的结果是近似解,因此,算法的结果不是最优。在类似于围棋这种变化较多的棋类游戏中,仅仅使用蒙特卡洛算法实现的程序棋类始终没有突破与职业棋手对抗的屏障。纯粹基于蒙特卡洛算法的最强程序大概能够达到业务5段棋力,直到AlphaGo的出现,使得围棋程序达到了一个质的变化,也给所有人给了一种崭新的思路,这也是现在AI快速发展的一个基石。
后记
本文仅是对蒙特卡洛算法做一个简单易懂的介绍,后续将结合AlphaGo论文来对蒙特卡洛算法详细介绍,并用程序代码由简至繁对蒙特卡洛算法进行剖析,最后引入人工AI算法的殿堂。可以说蒙特卡洛算法是没有模拟生命或者生命体某些特性的AI算法,当加入了神经网络算法或者说遗传算法之后,就演进到成为了当今流行的AI算法。后续我们在详细介绍下蒙特卡洛算法的细节实现之后,准备通过一个实战题目来对蒙特卡洛算法+神经网络学习详细剖析人工智能棋类程序来解释人工智能AI的实现!最终,我们的目的将是探讨各种AI算法在云计算领域的应用。
游戏 AI
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。