对经典打飞机游戏策略问题的研究

您所在的位置:网站首页 自己制作飞机的游戏 对经典打飞机游戏策略问题的研究

对经典打飞机游戏策略问题的研究

2024-07-15 19:51| 来源: 网络整理| 查看: 265

本文以2008年第一届认证杯的D题为例,研究打飞机游戏的最佳策略。话不多说,先上题目。

题目

有一种在学生中间比较流行的双方对战游戏。在游戏前双方各准备一张坐标纸,在上面分别制作7×7的方格,如图1所示。在自己的方格中画一架飞机,飞机呈“士”字形,其中上面的一长横占5个格子,下面的短横占3个格子,一竖占4个格子,最上面突出的一个格子代表机头。所画飞机的位置以及机头的指向由游戏者自己决定,游戏结束前双方不能互看对方的坐标纸。游戏时双方交替用“炮弹”打击对方,攻击的一方报告“炮弹”打击的位置,被攻击的一方报告是否命中飞机。例如:被攻击方的飞机画法如图1所示,攻击者报告“炮弹”的打击位置是(4,3),从图中可知,“炮弹”恰好落在飞机所在的红色格子上面,被攻击方报告飞机被击中,接下来刚才的被攻击方变成攻击方进行上面的攻击步骤,双方交替攻击对方,如果某一方被命中机头,游戏结束,被命中机头的一方失败。游戏双方都在通过打击后对方的反馈信息来猜测对方飞机的位置。 游戏比赛采用19局10胜制。 在这里插入图片描述 问题一:设计一个人机对战的“飞机对战”游戏。要求先由计算机进行攻击,以计算机取胜为目标,给出进行游戏的策略。 问题二:考虑在9×9坐标纸上画两架飞机的游戏方式,两架飞机所占的格子不能重合,游戏方法同上。其中一架飞机被命中机头时要报告有一架飞机被击落。当某方的两架飞机都被击落时游戏结束,被击落方失败。分析这种游戏方式与只画一架飞机的游戏方式在策略上的不同点。 问题三:如果将问题二中的游戏方式设计为一个网络游戏,由三个真人对战,三人轮流作为攻击方,攻击方可以选择另外两方之一作为攻击对象,每次只能发射一发“炮弹”。如果某一方的两架飞机均被击中,他将退出这一局游戏,另外两方仍将继续游戏直到二者决出胜负。打中机头可以得1分,打中机头并把被攻击方踢出局可以得3分,打中飞机其它部位或者未击中不得分,比赛采用18局,最后总得分(累加每局得到的分数)最高的一方获胜,如果出现平分,加赛一局决定胜负。考虑每局都首先由你作为攻击方,设计一套游戏策略,使你能在比赛中取胜。 注:假定游戏中,不存在任意两方联合的可能。

摘要

文针对飞机对战游戏最佳策略问题进行研究,通过Mersenne Twister算法,博弈论,建立蒙特卡罗模型,博弈模型,旨在得出对战时取胜的理论最佳策略。 针对问题一,本文利用穷举法和坐标旋转,确立最佳策略为:以中心点(4,4)为初始落点,划定下一步的落点范围,优先攻击可能性高的位置,若是落空则更新可能方向和排列,重新划定区域以取胜。经分析得出中心点(4,4)被占用的概率为2/3,若初始落点并未落中机身且空了一次,则机身必定经过其余三个高概率点。若是在初始落点命中机身后连续3次落空,则机头位置也可以确定。最终推广至一般情况,得出流程图。 针对问题二,本文以机身出现在每个格子的概率为原假设矩阵,以机头在变化范围内每一格出现的概率为备择假设矩阵,建立蒙特卡罗模型: 在这里插入图片描述 结合Mersenne Twister算法进行10000次模拟实验。确立接受原假设度最高的2列作为研究对象。依据最有可能出现的列,再次建立原假设矩阵和被择矩阵,得出全局最佳策略为:以左下角第一个为坐标原点,建立平面直角坐标系,选择x=3和x=7这两条线上的格子为第一个机头。按照1,2,3,9,4,5,8,7,6的列顺序,根据每一列中的概率大小从高到低依次选择落点。 针对问题三,本文依据一局中得分数为0,1,2,3,4,5,6,7,8这9种方式,确立3名玩家时的收益矩阵,建立博弈模型: 在这里插入图片描述 利用matlab计算得出对自己而言,采取的最佳策略为尽可能多的拿1分。在确立打击方式后,结合问题一确立飞机机头的方法和问题二两架飞机机头的概率模型,做出实时最佳决策。这样整体上可以提高自己的获取分数,从而在比赛中取胜。

问题分析 对于问题一的分析

问题一要求在计算机先手的情况下,制定人机对战计算机取胜的最佳策略。本文以使用尽可能短的回合数找到对方飞机,并击中机头为目标,确立划定区域—优先攻击可能性高的区域—更新可能的方向和排列—击毙敌方的策略。以中间位置为初始攻击点,向周围可能性较高的点不断尝试,缩小敌方飞机的可能范围,不断更新飞机方向和排列方式。当确立的点可以推断出飞机时,算出机头坐标取得胜利。

对于问题二的分析

问题二要求给出9×9的坐标纸上将对方的两架飞机均击落的最佳策略。本文在问题一的基础上做一个延伸,根据图形的对称性将所有情况转化为向上的飞机情况。利用穷举法分析第一架飞机机头可能出现的情况,通过计算各位置出现机头的概率,给出确立第一个机头的最佳策略。在确立第一个机头的基础上,继续对第二架飞机机头位置概率进行测算,通过蒙特卡罗法计算概率最大的范围,确立第二架飞机的机头。结合两架飞机的确立过程得出平均步数。

对于问题三的分析

问题三要求在问题二的游戏基础上,转化为三个真人对战,在自己为先手的情况下让自己赢得概率最大。采用分散布置飞机,尽量多得分,推算对手位置的策略。根据所有得分情况给出最合理的打击策略,结合问题二中的计算所得的高概率机头点,按照概率高低进行打击。期间若是有其中一方玩家的飞机被击中,则结合问题一的飞机形态比对数据库,快速定位机头位置,优先处理。

模型假设

结合本题的实际,为确保模型求解的准确性和合理性,本文排除一些因素的干扰,提出以下几点假设: 1.假设不存在运气成分; 2.假设多名玩家时玩家间相互独立; 3.假设每回合玩家必须选择一个落点。

模型的建立与求解

经过以上的分析和准备,本文将逐步建立以下数学模型,进一步阐述模型的实际建立过程。

问题一的建立与求解

该游戏取胜的核心目标为确定对手飞机的机头坐标。在计算机先出手的前提下,本文按照以下策略流程对敌方机头位置进行猜测。 在这里插入图片描述 结合飞机形状和画图范围,分析确立49个格子中的最佳初始点。接着计算在确立落点后,以落点为中心3×3临近范围内的最大概率点,按照概率高低依次落点,并对已经确立的点比对飞机模型,在可以确立飞机全部坐标后选择机头位置。

初始落点的确立

在7×7的网格中,要确立49个格子中一架占据10格的飞机,先确立可以框住整架飞机的最小网格,为一个4行5列的矩形。 在这里插入图片描述 对于这样一个4行5列的矩形,将四条边框进行区别,即将上边框和下边框接触同一侧时视为两种情况。若要放于7×7的网格中,共有4×(7-4+1)×(7-5+1)种,即有48种放置方法。对此,本文通过穷举法,画出所有的飞机出现情况,结果见问题一的支撑材料。 为便于计算,本文以表格左下角为坐标原点,建立平面直角坐标系,将各格用坐标进行表示。通过对这48种情况进行分析,得出中心点(4,4)在48种情况中有32个情况被占用,相比于其他点概率更高,故选择(4,4)点作为初始点。将格点记为在这里插入图片描述,其中i表示横坐标,j表示纵坐标。

确立下一步落点

以(4,4)为初始落点后,若击中对方机头则取胜,对于该种获胜情况,共有4种情况,机身朝向为上下左右四个方向,此次取胜用了1步。 若未击中机头但打到机身,即当 时,进行下一步的预测,同时删去4种情况。在击中机身的前提下,剩余28种情况。本文对所有可能出现的位置进行分析。即把击中点看作为一个3×3网格的中心点,对于该击中点,可视为飞机除去机头外的任意一个位置。因此本文对除机头外的所有格子进行分析,采用穷举法,对9个机身位置依次判断,计算3×3网格中其他8个落点出现飞机机身的概率图。 在这里插入图片描述 通过分析,得出在初始落点击中飞机机身的前提下,周围3×3网格中出现飞机机身概率最大的点为左边和右边,概率为0.2,其余6个点的概率均为0.1。 同时,本文对全局进行分析,计算在7×7的网格中,各格点出现飞机的情况个数。 在这里插入图片描述 通过上图的分析结果可得,除初始落点的36种情况外,概率最高的点为a34,a54,a43,a45,概率约为0.45,相比于3×3的局部概率最大点的0.2高出近1倍,更具有说服力,故第二个落点可以为a54。 但如果初始落点(4,4)未打中飞机,即在这里插入图片描述时,依据飞机所有可能出现的情况,可直接剔除32种可能情况,对剩余的16种情况进行讨论。同样按照上述方法,构建以初始落点为中心的3×3网格。但与上文不同的是,在(4,4)点没有机身的前提下,剩余的可能性只有16种,样本量较少。故对于第二步可以按照贪心原则,更新3×3网格中8个位置的概率,将机头可能出现的概率更新在图中。在更新后,上下左右四个方向出现机头的概率均相等,为0.125。故可以选择这四个点作为下一步落点。

对初始落点落中情况的分析

在确立前两步的落点后,对于之后的落点可以看作对飞机可能形态的不断剔除,直到可以确立具体情况。以下按照上文分类情况,初始点命中和未命中两类情况继续做延伸研究。 在初始落点命中机身后,飞机剩余28种情况。依据第二个落点,若满足在这里插入图片描述,则剩余16种情况。若满足在这里插入图片描述,则随机选择另外3个点。若第2次落中后,则转化由两个方格构成的矩形。若第2次落空后,则继续选择第3个可能点。若第3次落中,仍转化为由两个方格构成的矩形。若第3次落空后,则可以确定机头位置。若在两次落空后以(4,4)为中心的3×3网格中有一行填满,则机头在4个点中剩余挑选点那一行的剩余两个位置,此种情况最少用5步。 所以初始落点命中机身后,总体上可以转化为两个方向,即转化为已知由两个方格构成的矩形继续求解和直接确立机头位置。对于两个方格构成的矩形,存在两种情况,即横着和竖着两种情况。 (a) (b) 在这里插入图片描述 图(a)为竖着的情况,图(b)横着的情况。通过分析,以上两种情况可以看作方向不同的同一种飞机,对于飞机来讲仅是旋转了一个角度,在确立机头的方法上可以视为一样。以(4,4)(5,4)构成的矩形为例,以该矩形为基础的飞机共有16种情况,对16种飞机进行分析,本文选择(4,5)作为判断节点,将剩余情况分为两组,每组8种情况。接着再次对各组数据库进行分析,重新挑选判断节点,不断重复,直到最后只剩2种情况。具体节点如下图所示: 在这里插入图片描述 由上图可得,在确立判断节点后,按照阶段依次进行筛选,同时更新数据库,若只剩2种情况时,则可以确立机头位置。对于该种情况,最少用5步,最多用10步。

对初始落点落空情况的分析

若初始落点并未落中机身,以一种情况作为代表。当第二个点落在(4,5)时,击中机头的概率为0.125。若是没有击中,则在(4,3),(3,4),(5,4)中随机选择作为下一步的落点。通过对数据库分析,本文得出在初始落点落空的前提下,若飞机头不在初始落点周围,则所有画法均会经过周围4格(上下左右)中的3格。在此,以(4,5)点落空其余3点均打中的情况为例,此时的机头位置有且仅有2种情况,坐标分别为(6,3)和(2,3)。故接下来对这两个点随机选择作为落点。对于该种情况,最快用2步,最多用7步。

推广至一般情况

综合上述分析过程,推广至整体求解具体过程应该按照如下方式: 在这里插入图片描述 其中在初始落点落中但与之组成的框点不是(5,4)时,本文通过坐标旋转法,以(4,4)为坐标原点,将(4,5)情况下的判断节点旋转至对应位置后,作为新的判断节点,从而确立机头的位置。按照上述流程,最多使用10步赢得比赛,最少用1步取得胜利。本文列出所有情况取胜所用步数,得出平均用6步取得胜利。

问题二的建立与求解

本文将问题二看作为在问题一的延伸,但情况更为复杂。在问题一的最佳策略求解中,共有48种情况,样本较小,故可以考虑不分方向。在问题二中,本文将所有方向上的情况均转化为飞机头向上的情况。随后划定机头可能变化的范围,依据x值和y值,划定变化范围,观察数据分布的特点,建立蒙特卡罗模型,估算第一架飞机头的可能位置。 在求出第一架飞机机头的基础上,接着对第二架飞机的机头划定范围,测算每个格子出现机头的范围,依据出现的最大范围,再次建立蒙特卡罗模型,对第二个飞机头的出现位置进行预测,实现最佳策略。

蒙特卡罗法(Monte Carlo method)是一种基于统计学原理的数值计算法,它的基本思想是通过生成大量的随机样本,并利用这些样本对问题进行模拟和判断。由于其灵活性和适用性广泛被应用于众多领域,尤其适用于无法通过解析方法或传统数值方法求解的复杂问题,不需要对问题进行特定的假设或近似,具有良好的可拓展性。

确立第一架飞机头的范围

首先考虑只有一架飞机的情况。通过对9×9网格进行分析,得出对于不同的飞机朝向,均可以依据正方形的对称性转化为一个方向。在此,本文对飞机朝上的情况进行讨论,得出在只有一架飞机的情况下,有30种摆放方式。其中机头的最大可能范围为x=3,x=7,y=4,y=9所围成的范围。将这些点按照坐标,将计算出的每个方格出现飞机的概率作为z值,观察他们在分布上的特点。 在这里插入图片描述 由上图可得,随着y值的增加,z值整体上呈现上升趋势。从x值来看,随着x的增加,z值先增大后减小,对于不同的y值,均在x=3时z值可以取到最大值,故本文选取y=4时的截面图进行分析。 在这里插入图片描述 通过对y=4时的截面分析,将点坐标z值用条形高度表示以便于观察。根据所画图形,基于数据再次画出正态分布曲线,得出这些概率在分布上符合正态分布。依据分析结果,本文决定采用蒙特卡罗法对机头位置进行模型。 在机头朝上的情况下,依据机身的变化范围,确立原假设矩阵 : 在这里插入图片描述 其中每一格的概率表示每个格子中会出现机身的概率,接着再测算机头在变化范围内每一格出现的概率,作为备择假设矩阵 : 在这里插入图片描述 在确立好原假设矩阵和备择假设矩阵后,确立蒙特卡罗模型为: 在这里插入图片描述 其中, w为转化系数。在matlab中利用蒙特卡罗法,模拟10000次实验,得出变化前后每一列原假设为真的概率p值。在运算时,为提高p值本文对随机数的生成进行优化,采用Mersenne Twister算法,以提高随机数的均匀性和独立性,确保运算的准确性和稳定性。 在这里插入图片描述 计算后的p值均大于判断值0.05,故接受原假设。本文依据p值的大小,认为机头最可能出现在第1列和第5列,即x=3和x=7。

确立第二架飞机头的范围

在确立第一架飞机的机头位置后,本文选择x=3和x=7的情况作为研究对象。根据对称性,故仅需对第一架飞机在x=3情况下6种位置中,第二架飞机可能的摆放方式和机头位置。将总摆放数作为分母,每个格子可以出现的个数作为分子,得出一个9×9的概率矩阵。将机身概率矩阵作为原假设矩阵,得出: 在这里插入图片描述 在原假设矩阵的基础上,挑选其中可以作为机头的点,将不能作为机头的格子修正为概率0,得到备择假设矩阵: 在这里插入图片描述 在得出原假设矩阵和备择假设矩阵后,构建蒙特卡罗模型: 在这里插入图片描述 同样在matlab中利用蒙特卡罗法,为得出更高的准确性,进行模拟100000次实验,得出变化前后每一列原假设为真的概率p值。同样也采用Mersenne Twister算法,以提高随机数的均匀性和独立性,确保运算的准确性和稳定性。 在这里插入图片描述 由上表可得,第二架飞机的机头在第1列的概率最高,在第6列的概率最低。对于每一列的概率,除去概率点为0的方格点,对于第二架飞机的机头位置按照列p值大小和概率大小依次作为落点。

最佳策略与分析

结合两架飞机的分析结果,本文给出以下策略:以左下角第一个为坐标原点,建立平面直角坐标系,选择x=3和x=7这两条线上的格子确立第一个机头。在确立后,依据分析结果,按照1,2,3,9,4,5,8,7,6的列顺序,同时根据每一列中的概率大小从高到低依次选择落点。若是存在一列中两个概率相等的状况,采用随机抽取的方法选择落点。 对于该种游戏方式,相比于只画一架飞机的游戏方式,在预测上更为繁琐,若想取得胜利需根据第一架飞机的位置来确定第二架飞机的机头位置。在对机头位置进行预测时,需同时考虑出现概率和排版方式,整体上更为繁琐。

问题三的建立与求解

由于每局都是由自己开局,理论上存在更高的操作空间。根据题干中提到改为三个真人对战,三个人轮流作为攻击方,故本文建立博弈模型。通过建立支付矩阵,求解对于自己的最佳策略打击方式。在确立打击方式后,结合问题一确立飞机机头的方法和问题二两架飞机机头的概率模型,做出合理的打击行动。同时,结合游戏中另外两名玩家 的表现,根据第二方对第三方飞机的打击结果,结合贪心原则,做出实时最佳决策。这样整体上可以提高自己的获取分数,从而在比赛中取胜。

博弈模型最早由美国学者尤金·巴达奇提出,它是一种将博弈论运用到政策执行的研究中对决策执行进行系统阐述的模型,旨在研究玩家间可能的策略选择和结果,并分析每个玩家的最佳决策。

在这里插入图片描述

对于改题确立模型为三人博弈模型,求解时将其视作为一个静态博弈。仅需确立支付矩阵和变量界限即可进行求解。

博弈模型的确立与求解

在确立博弈模型前,首先对策略方式进行分析。击中机头记为1分,击中第二架飞机且淘汰飞机记为3分,故本文认为应该将注意点放在机头位置上。通过优先击打机头来获取更多的分数,若是其他玩家先击落一架飞机,可以选择捡漏的方式来获取分数。通过排列组合,得出一局中的得分数可以为0,1,2,3,4,5,6,7,8这9种方式。依据这得分可能结果,建立三人博弈的收益矩阵。 在这里插入图片描述 对于以上收益矩阵,要进行最佳策略模拟,设立约束矩阵和决策变量的上下限,引入决策变量,建立的博弈模型为线性规划的形式: 在这里插入图片描述 在这里插入图片描述 其中,f是目标函数的系数向量,x是决策变量,A是价值矩阵,b是不等式约束的右侧向量,Aeq是等式约束矩阵,beq为等式约束的右侧向量,lb是决策变量的下限,ub为决策变量的上限。 通过matlab进行计算,得出玩家1,即自己的最佳策略为多选择机头位置进行打击,这样可以取得更高的成绩,从而取得胜利。在玩家选择上,应该选择被击打格子数量最多的玩家,这样可以排除未知点,极大概率取得胜利。

实时状态最优策略

考虑到实际游戏时,存在着很多不确定因素,如机头出现在概率矩阵中的小概率点,此时若是在格点上飞机仍然未被命中,则认为可以继续按照概率分析结果继续选择落点。若此时已经有一架飞机被击落或已有较多落点在一个玩家上时,应更新策略去攻击该玩家,该种情况下可以更大概率的获得积分。 在这里插入图片描述 依据以上流程图,可以做到实时执行最佳策略。当开始游戏后随机选择玩家进行攻击,若是落中机头则确立第二架飞机的机头,若是落中机身则结合问题一进行局部飞机形态排除。若是落空,则观察其他玩家的落点,如果其他玩家的落点击中则同样结合问题一进行排除,若是仍然没有则按照问题二的概率点继续落点,重复步骤。 在击中第一架飞机后,结合问题二第二架飞机的概率点进行攻击。若是落中机头则获胜,若是落中机身则结合问题一进行局部飞机形态排除。若是落空,则观察其他玩家的落点,如果其他玩家的落点击中则同样结合问题一进行排除,若是仍然没有则按照问题二的概率点继续落点,重复步骤,直到取胜。

模型检验 灵敏度检验

根据问题二中的蒙特卡洛法中的矩阵算出原假设为真的概率为p,经分析比对,本文以原假设为真概率p为研究对象,通过将矩阵中的1/30变为1/29来观察p值的变化,并根据改变matlab中相关数值得出下图: 在这里插入图片描述 根据表中和图中可知,将矩阵中的1/30变为1/29时,p值的变化率绝对值基本小于8%,说明矩阵中某些数值的改变对问题二中的p值影响不大,体现了模型的可行性和准确性。

模型的评价与改进 模型的评价 模型的优点

1 利用穷举法对问题一所有情况进行分析,分析结果更为准确。 2.通过蒙特卡罗模型对机头位置进行预测,模拟后的实验结果数据具有说服力。 3.在利用蒙特卡罗模型时,采用Mersenne Twister算法,提高了随机数的均匀性和独立性,运算结果更为准确和稳定。 4.为得出三人比赛时的最佳策略,结合博弈论建立博弈模型来寻找最优策略,计算得出的策略结果更为合理,具有说服力。

模型的缺点

1.问题二在对第一架飞机机头位置确定时,仅选择了p值最大的两列作为研究对象,从整体上来看不具有很大的代表性。、 2.问题三对于三人博弈情况,将动态问题化简为单个静止状态,建立静态博弈模型,可能较为片面。

模型的改进

针对缺点一,可以在原p值的基础上,选择p值大于0.05的列均作为研究对象,完善原假设矩阵和被择矩阵,从而提高预测机头位置的准确性。 针对缺点二,可以在收益矩阵不变的情况下,引入决策序列,构建三人动态博弈模型,从而提高策略的准确性。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3