讨论d题第一小问:在7X7坐标纸上的对战游戏。(对于9X9可以自行推广)
在附件里是我写的两个程序(M文件),用以讨论解决本次建模赛的D题。
第一个程序(文件名含X那个)的出发点是:飞机的机头只会出现在(从左往右数,下同)第三列到第五列之间和(从下往上数,下同)第四行到第七行之间这个3X4的矩形区域。所以,我们采取从(4,4)开始进攻的方式,然后根据返回的不同信息,再确定下一次的进攻坐标。
第二个程序(文件名含y那个)的出发点是:先进攻最下面一行的中央位置,如果击中飞机(当然,绝不会是机头),则可以根据飞机的长度(4格)判断飞机机头的位置在第四行。如果没击中,则进攻第二行,余者类推。
在程序中,我们可以用一个7阶方阵来代替坐标纸,飞机机身用1表示,机头用2表示,其余的为0.那么,飞机共有的12种位置分布便对应于程序中前88行的12个7阶矩阵。
然后让电脑按照上面提到的算法,依次检验各个位置的元素的值的情况,直到检测到值为2(即:击中机头)
有兴趣的读者可以根据我的程序用matlab的gui编制一个人机对战游戏界面。而且还可以在两台电脑中放置不同的程序让两台电脑对战,以比较那个程序更优越。当然,我的程序并不保证是最优的,它们只是两种解决方案。
另外,如果能引进博弈论的原理,可能能够得出进一步的程序。甚至能触到比较前沿的“人工智能”!
鉴于笔者的能力,程序可能不是很完善,希望大家提出,再改正之。贻笑大方之家!
说明:matlab版本应该为matlab7.0以上.
[attach]4070[/attach]2.02 KB, 下载次数: 103, 下载积分: 体力 -2 点
两个游戏仿真模拟程序.rar
这种算法扩展性好吗?!!
还有人是活的,机器那么一个套路打下去游戏的意义和在?对于扩展后的算法我觉得应该加入随机选择。
请多指教,谢谢。
[em06]你的想法完全正确。
机器是死的,人是活的。只要人知道了机器的算法后就会选取机器最难击中(或说需要进攻次数最多的)的位置为机头。
我昨天在写这些程序的时候,想到了这个问题的解决方案:编写自上而下的进攻程序、编写自下而上的进攻程序、编写自中间向上向下的进攻程序。然后在程序88行左右的地方添加一段代码,用以产生一个随机数,并对应一种算法。然后用一个选择语句选择以上四种算法的其中一种。这样做的目的就是使得进攻的方案随机化,使得人就算知道机器的所有算法但也搞不清它用的那一种。呵呵,其实这就是我在上文中说的引入了博弈论的思想。
我给出的两个程序都是自下而上的,另外还有一个z程序(我给出的是x和y)是自上而下的,因为某些原因没有放上来。
权当是抛砖引玉!
你这个程序最多几次可以成功找到机头?
我的法子最多5-6次?我正好没有时间,没有交论文,不知道有没有机会了!
我的方法也最多六次就能打到。
哦,既然这样说,那我就把我的理解谈谈吧。可能理解有误望指正!
我的理解是这样的:如题
有一种在学生中间比较流行的双方对战游戏。在游戏前双方各准备一张坐标纸,在上面分别制作7?的方格,如图1所示。在自己的方格中画一架飞机,飞机呈“士”字形,其中上面的一长横占5个格子,下面的短横占3个格子,一竖占4个格子,最上面突出的一个格子代表机头。所画飞机的位置以及机头的指向由游戏者自己决定,游戏结束前双方不能互看对方的坐标纸。游戏时双方交替用“炮弹”打击对方,攻击的一方报告“炮弹”打击的位置,被攻击的一方报告是否命中飞机。例如:被攻击方的飞机画法如图1所示,攻击者报告“炮弹”的打击位置是(4,3),从图中可知,“炮弹”恰好落在飞机所在的红色格子上面,被攻击方报告飞机被击中,接下来刚才的被攻击方变成攻击方进行上面的攻击步骤,双方交替攻击对方,如果某一方被命中机头,游戏结束,被命中机头的一方失败。游戏双方都在通过打击后对方的反馈信息来猜测对方飞机的位置。
游戏比赛采用19局10胜制。
请注意里面红色的文字。我的理解是:既然说是“飞机呈‘士’字形”,那么就应该是机头朝上,否则就应该说是“飞机呈‘干’字形”。还有,后面的文字又说“上面的一长横占5个格子,下面的短横占3个格子”,也表明是机头朝上,因为坐过或者见过飞机的人都知道一个事实——飞机前翼比后翼长。
如果按照楼主的说吗的话,3-4次就可以判断了!
我是按照48种可能做的.是吗?我在帖子里说过我的程序不能保证是最优的。
可以把你的程序放上面来大家看看吗?
我也在找寻最优的方案,你是用的那种方法?
其实我还有一个Z方案,但如果机头被放在某一特定的位置的话,也需要5次才能击中。
只能说,平均下来的话,大概是3次的样子。
是吗?我在帖子里说过我的程序不能保证是最优的。
可以把你的程序放上面来大家看看吗?
我也在找寻最优的方案,你是用的那种方法?
我的程序也很简单,就是寻找一个二叉树,过两天我把程序提交上来,这几天没有什么时间,要考试!
我们组的想法和楼主的类似,计算机最多的一次进攻是八步,基本上计算机五六步就能解决问题,从中间十二格开始考虑是因为其摆放机头次数最多,当然人在和计算机多玩后,会发现一定的规律,从而导致机头的放置与一般规律不同。
上海水产大学小组
ps.数学中国页面上蠕虫病毒较多,请管理员检查。
另外,楼主说9?可以扩展,但是题目要求中有考虑和7?的不同方法,不吝赐教。
只要弄明白了7x7下的进攻策略,9x9下的进攻策略就不难找到。后者与前者游戏背景不同点主要有二:一是飞机的活动空间增加了;二是飞机的数量增加了。我们可以先不考虑第二个不同点。如此的话,9X9与7X7没有本质的不同。每次进攻的目的无非两个,要么击下飞机,要么得到飞机分布的若干信息。如果击下飞机,游戏结束。如果没击下则根据得到的信息(两种情况:击中,但没有击中机头or没击中),推测飞机可能的分布用以给出下一次进攻的方向。
对题目中的第二小问,我的观点是:只要找到在9X9条件下击落2架飞机的程序(算法),那它与第一小问程序的不同点自然而然就明了了。(所谓“策略上的不同”其实就是程序的不同,而程序本质上不会有多大不同之处,只是进攻次数多几次。)
感觉是在做文字游戏~~~这样的题目做来真没劲。
不知道是出题人有意的,还是别的原因。
[em14]呵呵,看来楼上的没有理解我程序的本质。
看来你认为这道题没有价值了?说说你的观点,莫非你已经把最优解找到了?这道题目是我出的,希望赐教!
7*7的格子(4,4)显然不是最优点
用二分法即可
我的程序通过评价函数的方法加入了人工智能
根据对方炸自己的情况分析形势的轻重缓急
然后通过修改价值函数中的风险度K来调整价值表,进而改变获得的最优点
在不利局势下采用较冒进的方法
在稳定的局势下采取最短的方法
当然,无论哪种局势,都兼顾两种策略,只是改变平衡点而已
看来你认为这道题没有价值了?说说你的观点,莫非你已经把最优解找到了?这道题目是我出的,希望赐教!
可能没表达清楚,此问题是我想复杂了,题目本身是很有趣的,第一次弄建模什么都不懂,请多指教,谢谢大家了。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |