极大极小算法
‘壹’ 极大极小算法有些不明白
先来说极小极大算法主要应用于什么样的游戏:
1. 零和游戏(Zero-sum Game):意思就是你死我活,一方的胜利代表另一方的失败,比如,象棋,五子棋等。
2. 完全信息(Perfect Information):玩家知道之前所有的步骤。象棋就是完全信息,因为玩家是交替着落子,且之前的步骤都能在棋盘上体现,但是石头剪子布就不是。
这样的游戏通常可以把他们看作一个树状图,把每一种可能性列出来。比如下面这个井字棋游戏,Max代表你自己,Min代表你的对手。
这个时候我们需要给每一种结果一个分数,就是这里的Utility。这个分数是站在我自己(也就是Max)的角度评估的,比如上图中我赢了就是+1,输了是-1,平局时0。所以,我希望最大化这个分数,而我的对手希望最小化这个分数。(在游戏中,这个分数被称为static value。)这里要说一下,井字棋是个比较简单的游戏,所以可以列出所有可能的结果。但是,大部分游戏是不太可能把所有结果都列出来的。根据计算机运算量,我们可能只能往前推7,8步,所以这个时候分数就不只-1,1,0这么简单了,会有专门的算法来根据当前结果给不同的分数。
假设我们有如下图的游戏,我是先手,我应该如何利用Minmax算法来选出第一步怎么走呢?
当然对于一个复杂的游戏来说,比如象棋,肯定是需要非常多步才能完成的。这就导致结果的数量是成几何增长的,也就是说,如果这个游戏每一步都有n个选择,那么在x步以后,将会有n^x个选择。这个时候,我们就需要采取剪枝算法(Alpha-Beta)来减少运算量。从剪枝算法这个名字我们就能看出,这个算法能让我们剪掉树状图中的一些分支,从而减少运算量。在这里也说一下剪枝算法,因为这并不是个不同于极小极大的算法,而是极小极大算法的升级版。
我们将游戏简化成如下图,使用Minimax算法,我们可以得出这样的结果
‘贰’ 极大极小算法的极大极小是什么意思为什么一个要追求最大,一个追求最小
这是个数学问题。单调函数有最大值、最小值。非单调连续函数中间也许有多个波峰或波谷,对应中间的每一个波峰有一个极大值,每一个波谷有一个极小值;最大、最小是整个区间上的,也许和某个极大或极小值一致。
‘叁’ 求最大值与最小值的算法
int[] n = {1,2,3,4,5,6,7,8,9,10};int max = n[0];int min = n[0];for(int i = 1;i < 10;i++){ if(min > n[i]){ min = n[i]; } if(max < n[i]){ max = n[i]; }}System.out.println("max=" + max);System.out.println("min=" + min);
‘肆’ 极大极小算法问题
程序应该是正确的,可能是你哪个地方没注意,弄错了
‘伍’ 极大极小值算法有什么优缺点
Minimax算法常用于棋类等由两方较量的游戏和程序。该算法是一个零总和算法,即一方要在可选的选项中选择将其优势最大化的选择,另一方则选择令对手优势最小化的一个,其输赢的总和为0(有点像能量守恒,就像本身两个玩家都有1点,最后输家要将他的1点给赢家,但整体上还是总共有2点)。很多棋类游戏可以采取此算法,例如tic-tac-toe。
‘陆’ 利用遗传算法求函数的极小值和极大值的区别
用遗传算法求已知函数的最小值点的方法:1、首先建立自定义函数,f(x)ga_fun=@(x)11*sin(6*x)+7*cos(5*x);2、其二用ga()函数求解最小值[x,fval,exitflag]=ga(ga_fun,1,[],[],[],[],lb) 3、然后用ezplot()函数或plot()函数,绘出其函数f(x)的图形及最小值点4、运行结果5、执行代码
‘柒’ 最大值和最小值的最优算法
这是不可能的,考虑a,b,c三个元素
要找出最大值,必须比较两次,在此基础上再比较一次才能找出最小值,而3*3/2-2=2.5
也可以用递归思想分析,每增加一个数,都必须和原数组的最大值和最小值比较,比较次数增加2,所以比较次数为2n加一个常数
‘捌’ 如图,求问如何计算极大值和极小值
好像条件不够吧?应该还有总面积或者其他什么条件限制的吧?用高等数学里列出函数,求该函数的一阶导数,令一阶导数等于0,可以算出极值,再求二阶导数,根据结果是大于0还是<0判断所得的是极大值还是极小值
‘玖’ 粒子群算法怎么同时求极大值与极小值
粒子群算法中每个粒子都记忆自己的最好位置,即从进化开始到现在这个粒子能使目标函数达到最大或是最小的那个时刻粒子的位置。个体极值就是粒子在最好位置所得到的目标函数的值。全局极值就是在所有粒子的个体极值中最大或是最小的那个值,与只对应的就是全局最优粒子的位置。对有约束的优化函数,一般是将约束条件加入到目标函数中,然后计算总体的值,以此来作为评价标准。
‘拾’ 什么是极小化极大算法
楼主算是问对人啦。我是做计算机博弈游戏开发的。
1、提出这个问题是为了解决象棋,五子棋这样的二人全息零和博弈
二人:游戏是2个人玩的
全息:双方的棋面信息都可以看到。(扑克牌就不同了)
零和:双方的利益和是0.如果你胜利积1分。我就是输-1分。相加就是0
2、极大极小的概念是相对的
我走棋,希望对我的利益帮助是最大的。对你的利益帮主是最小的
3、经典的例子很多。井字棋,五子棋,中国象棋,国际象棋等
象棋为例:
我和楼主对弈,某一步,我有N中走法,期中一种走法x后。我还要评估楼主针对我的X走法的所有应付策略。如果对2个人的局面做一个评判。我肯定希望选择者N种走法中,即时你应对了,对我利益也是最大的那种走法。
4、这个概念我就贴个地址吧。后面的负极大极小算法,alphabeta剪枝算法都很经典的
希望你早日写一个属于你自己的极大较小值算法的游戏
http://www.xqbase.com/computer.htm【一定要通读10遍以上】
好运!