2012年认证杯SPSSPRO杯数学建模
D题 人机游戏中的数学模型
原题再现:
计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力,使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可靠、丰富多彩的交互平台。人机游戏主要是考虑如何设计模型和算法,使其难度、趣味性达到恰当的平衡,玩家感觉既有难度,又有解决的信心。设计者既要像导演,规划玩家的行为,又要加入一定随机因素,使玩家觉得不是简单重复。所以在游戏创意和模型确定下来后,参数选择和优化变得非常关键。
现在考虑“植物大战僵尸”游戏中的一些简单模型(参赛者不必更深入地了解该游戏)。现在只有三种角色:向日葵、豌豆荚和一种僵尸。向日葵产生阳光,用鼠标点击阳光才能将其收集存储,过一定时间不点击阳光就会消失。种植向日葵和豌豆荚需要花费阳光;豌豆荚当其所在格或右侧有僵尸存在时一粒一粒地发射豌豆,每个豌豆荚内的豌豆数量无限;豌豆向右飞行,打击飞行路线上的僵尸,豌豆不受向日葵和豌豆荚的阻挡,但不能射穿僵尸;僵尸只从屏幕最右边产生,沿着直线从右向左行进,它要吃掉沿途遇到的向日葵和豌豆荚,但会被豌豆打死立即消失。僵尸走到屏幕最左边,则计算机获胜,游戏结束。屏幕上的游戏场地是横平竖直、大小相等的网格,一个格内只能种植一株豌豆荚或向日葵,但可以有任意多个僵尸。
第二阶段问题
问题一: 现在场地有从左至右的 10 个格。请修改第一阶段问题的假设,并重做问题 4。希望玩家更忙碌,但人机输赢的机会不变。
问题二: 构造或查找一个具体的经济问题,解决方法与第一阶段的问题类似,并给出解答。
整体求解过程概述(摘要)
问题分析:
问题一的分析
对问题一进行分析,已知在第一阶段问题的基础上场地从 9 个网格增加到 10 个网格。要求对第一阶段问题的假设进行修改,并重做问题 4。假设游戏开始时有m 朵阳光,每次产生 1 个僵尸,其它假设不变。设置出最佳的种植方案和僵尸产生方案,使玩家更忙碌,并且计算机永远不赢。
通过对第一阶段问题的求解可知,要解决这个问题,首先,求出在场地从左至右 10个网格的情况下,在场地最左边的若干格内种植豌豆荚,没有向日葵和阳光,等间隔产生 1 个僵尸的情况下,最少种植几棵豌豆荚,使产生的僵尸间隔最小,且计算机不会赢。同样采用第一阶段的求解方法,还是假设植物被僵尸吃的时间可以累计,用逆向归纳法推算出僵尸被豌豆打死所用的最短时间(即为出现僵尸的最短间隔时间) 。其次,通过已知条件找出向日葵数量、豌豆荚数量和游戏开始时阳光数量这三者之间的关系,从而求出游戏开始时在不同数量的阳光下,如何种植向日葵和豌豆荚的方案。最后,由向日葵数量、豌豆荚数量和游戏开始时阳光数量三者之间的关系式,找出向日葵与阳光、豌豆荚与阳光之间的关系并画出图形,从而选出合理的方案,设置出最佳的种植方案和僵尸产生方案,再从合理的方案中找出最合理的方案使玩家更忙碌,并且计算机永远不赢。
问题二的分析
对问题二进行分析,然后查找资料得到保险产品的设计方案的解决方法与第一阶段的问题类似,最后对保险方案中的问题进行分析和求解。
本题的重点是使得保险公司不盈不亏,而保险公司的资金来源有:投保人的投保资金以及将其放在银行产生的利息,即本息和。本题中,以月利率为基准进行计算,月利率c不变,而投保资金是不断改变的,即每月放入银行的本金在不断改变(后一个月的本金为本月缴纳的费用加上上月得到的本息和) 。复利计息是将第一期的利息与本金之和作为第二期的本金,然后反复计算,从而得到不同时间可得到的本息和。该计算方式与本题有异曲同工之处,只不过复利计息是在计算中初始本金不会发生变化,而本题是每月都会注入投保人缴纳的费用。因此我们也可以将复利计息稍加改进,然后用来解决该问题。保险公司可得到的资金收入可分为两个阶段进行计算:一、投保人在n 年缴费内本息和的变化;二、投保人费用缴纳完后返还投保人的同时,剩余的资金产生的本息和的变化情况。最终要使得保险公司不盈不亏,则 ( ) 0 12 = B n m - × 。
在上述前提下,给出一定的数据,求出投保人每月可领取的金额。可以运用 MATLAB 编程将数据代入模型 1 进行求解。然后可根据得出的结论,分析投保带来的利与弊。
综上所述,需得出投保人缴纳金额、保险公司退还投保人金额以及 银行月利率,进而求m 、n 的关系。但是 m 、n 的关系又可分为:m 关于n 的关系、n 关于 m 的关系式。我们可以分别将其求出,并绘出关系图进行分析。同时,可以运用 Excel 绘制关系表,以进一步分析投保人缴费年限与投保人死亡年龄之间的关联度。最终得出 m 、n 之间的关系。
为保险公司产品的最终设计需要的数据进行分析, 站在保险公司的角度,获得更大的利益是最终目的。根据上述三问得出的结果,我们可以分为三个阶段进行分析,讨论投保人在不同年龄阶段死亡给保险公司造成的影响,并求出不同阶段保险公司可获得的利润值。
由于题中有多个因素是未知的,为了更好的计算,使得方案更加全面,可以将未知的因素具体化,用一些字母先代替,以求出保险公司在此产品中的总支出以及纯收入。进而分析该方案的可实施性。我们可以通过网上资源查找人口死亡等的普查情况,然后运用真实数据分析设计方案。最后,探讨数据来源以及数据加工方法,进一步将模型与实际相联系。
模型假设:
1 植物被僵尸吃的次数累计
2 僵尸被豌豆打中时的时间不计
3 投保人在月初缴纳费用
4 缴纳费用n 为整数
5 投保人在月初领取工资
6 假设银行的月利率为c固定不变
7 假设保险公司及时将投保人的缴费存入银行,不进行其他投资
8 假设保险公司一直运行正常,不需要其他任何营运费用
论文缩略图:
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
function y=mm
for m=6:36
for m1=1:9
for m2=1:9
if m==4*m1+2*m2&m1+m2<=9&m1+m2>=2
fprintf('%d,%d,%d',m,m1,m2)
fprintf('\n')
end
end
end
end
m=1:40;
subplot(2,2,1)
x=1;m2=(m-2*x)/4;m1=(m-4*x)/2;
plot(m,m2,'-r',m,m1,'-b')
subplot(2,2,2)
x=2;m2=(m-2*x)/4;m1=(m-4*x)/2;
plot(m,m2,'-r',m,m1,'-b')
subplot(2,2,3)
x=3;m2=(m-2*x)/4;m1=(m-4*x)/2;
plot(m,m2,'-r',m,m1,'-b')
subplot(2,2,4)
x=4;m2=(m-2*x)/4;m1=(m-4*x)/2;
plot(m,m2,'-r',m,m1,'-b')