刚刚在外网发现一篇暴寒的文章
可以作为毕业论文了 哪个蝈蝈能有信心看完....并且看懂
Quote:
发信人: saintangel (至高天使长), 信区: Heroes
标 题: 比较兵种实力的一种思路
发信站: 一塌糊涂 BBS (Sun Jun 13 05:05:35 2004), 本站(ytht.net)
在heroes3中,大天使比大恶魔强,这点是毋庸置疑的吧。在1对1单挑,没有英雄攻防加成、特技、技能、宝物、魔法、地形、士气、运气等额外因素影响的情况下,大天使必胜大恶魔。如果进一步探讨这个问题,提出下面这个问题:
大天使究竟比大恶魔强多少呢?或者说,怎么定量地分析他们的单挑实力对比呢?
我是数学出身的,一直以来都试图将天使和恶魔的实力比量化。下面说说个人的一些浅见,欢迎讨论:
首先,看看天使和恶魔的属性:
天使:att30def30dmg50hp250sp18 恶魔:att26def28dmg30-40hp200sp17
双方憎恶。单挑(没有额外因素的影响,不分堆),天使先出手。
1天使造成伤害:(1+2*5%+50%)*50=80,相当于2/5个恶魔。
1恶魔造成伤害:(1-4*2.5%)*(1+50%)*30-40=40.5-54 为计算简便起见,假定avg=50(实际上avg=47.25<50),相当于1/5个天使。
(1)假定天使数目为n。n个天使可以干掉m个恶魔,但当恶魔数目增加到足够大时,恶魔反过来可以干掉n个天使。记n个天使恰好可以干掉的恶魔数目为f(n)(就是说可以干掉f(n)个,但是不能干掉f(n)+1个),f(n)就是n的一个函数。那么,可以想见,f(n)/n当n趋向于无穷大时的极限就是双方的实力比,这是我思路的出发点。
(2)令A=lim[f(n)/n],则lim[f(n)/n]=A=lim{[f(n)+1]/n},lim表示对n取无穷大的极限。这里没有证明极限A的存在性,一来我觉得A的存在性显然,二来我确实不知道该怎么证。从数学的角度说,这里不严谨。
(3)如果n个天使可以干掉m个恶魔,t个天使可以干掉s个恶魔,那么(n+t)个天使可以干掉(m+s)个恶魔;反之结论同样成立:n个天使不能干掉m个恶魔,t个天使不能干掉s个恶魔,那么(n+t)个天使不能干掉(m+s)个恶魔。这是推理的基础,个人还是觉得很显然但是又不知道该怎么证明。
(4)f(n1)+f(n2)+…+f(nk)<=f(n1+n2+…+nk)<f(n1)+f(n2)+…+f(nk)+k;1,2,…,k都是下标。
理由是n1个天使可以干掉f(n1)个恶魔,但是不能干掉f(n1)+1个,将n1换成n2,n3,……nk等等一样成立,由(3)立即可得到结论。
(5)k*f(n)<=f(k*n)<k*f(n)+k;
在(4)中令n1=n2=……=nk=n即得结论。
(6)f(n)/n<=A<=[f(n)+1]/n;
在(5)中不等式两端同时除以k*n,得
f(n)/n<=f(k*n)/kn<[f(n)+1]/n
再令k趋向于无穷大得
f(n)/n<=A<=[f(n)+1]/n
(7)由于A是f(n)/n与[f(n)+1]/n两者的极限,同时所有的f(n)/n与[f(n)+1]/n都成立(6)式,故
A=sup{f(n)/n}=inf{[f(n)+1]/n},sup,inf分别代表上确界,下确界。
即有结论:
f(n)/n<=sup{f(n)/n}=lim[f(n)/n]=A=lim{[f(n)+1]/n}=inf{[f(n)+1]/n}<=[f(n)+1]/n
到这里已经可以通过f(n)的值来估计A的大小。比如n=1时f(n)等于1,由(7)立即可以得到A的值在1和2之间。再比如可以通过实验验证f(5)=6,于是立即可知A的值在1.2和1.4之间。但是显然这种通过实验取值得到近似值逼近A的方法并不足取。需要换一个思路来计算A。
设想一下,n天使 VS m恶魔,如果天使取胜,说明天使占有实力上的优势,m/n<A。仔细分析整个单挑过程,设想单挑经过一回合,天使攻击一次,恶魔反击一次&恶魔攻击一次,剩余t个天使,s个恶魔。在这个单挑的过程中,天使实力上的优势是怎样体现的呢?初始实力上的优势,带来的是天使攻击造成更多的伤害,剩余更少的恶魔,使得恶魔伤害变少,天使剩余得多。显见,经过一回合后,天使实力上的优势进一步扩大了!有s/t<n/m<A,单挑继续进行下去,s/t的值如此不断地变小,直到恶魔数量为0,s/t的值变成0为止;反过来,如果恶魔胜,说明恶魔占有实力上的优势,m/n>A,单挑过程中,恶魔初始实力上的优势,带来的是剩余更多的恶魔,使得恶魔伤害变大,天使剩余得少,恶魔的优势进一步扩大,s/t>n/m>A,单挑继续进行下去,s/t的值如此不断地变大,直到天使数量为0,s/t的值变成∞为止。
那么中间的平衡情况呢?假如天使恶魔势均力敌,m/n=A(有没有整数n,m满足m/n=A即A是否为有理数暂且忽略,仅讨论理想情况),那么按照上面的讨论,经过一回合后s/t=m/n=A,一直到最后t,s同时变成0。
上面两段都是可以严格证明的,过程较简单,故略去,可参考下面的等式。
当然,这仅仅是理想情况。实际上,由于攻击有先后,t,s显然不可能同时为0(A也很可能是无理数)。但是我们可以用近似值来逼近!假设n,m都非常非常大,m/n的值也非常非常接近A,误差可以小到忽略不计,那么经过一个回合,s/t的值的改变也应该非常非常小,小到可以忽略不计,仍然有m/n=s/t=A。
(8)t,s,A的值都是可以计算的。天使先攻击,由于1天使1次伤害2/5个恶魔,因此n天使造成的伤害是[2/5*n]个恶魔([]表示取整),从而s=m-[2/5*n];然后恶魔反击,并且恶魔再攻击,s个恶魔2次造成的伤害是[2*1/5*s]个天使。于是t=n-[2/5*s]。
(9) m m-[2/5*n]
A=----- = -------------
n n-[2/5*s]
这个式子实际是m=f(n)且n的值趋向于∞时成立。由于n,s的值都趋向于∞,故完全可以用2/5*n,2/5*s来代替[2/5*n],[2/5*s](因lim[x]/x=1)。
上式变为:
m m-2/5*n
A=----- = -------------------
n n-2/5*(m-2/5*n)
整理右边的等式,得到m^2-2/5*m*n-n^2=0,除以n^2项即得:
A^2-2/5*A-1=0 __
解此二次方程,舍去负根,得A=(1+√26)/5=1.2198……
可以看到,这与前面实验得到的f(n)=6是一致的。
如果更近一步,精确计算的话,恶魔的avg dmg应该以47.25代入而不是50。类似(9)的计算过程可得A的方程为:
945A^2-378A-1000=0
________
解得A=(189+√189*5189)/945=1.24795088……
这与实验得到f(1000000)=1247951的结果是几乎完全吻合的。这就是我得到的最终结果,天使实力超出恶魔近24.8%。
结语来说说我这个思路中的毛病吧,貌似还很不少:)我是数学出身,碰到问题时都试图建立一个数学模型来解决问题。这是优点,也是缺点。既然是模型,当然是绝对理想化。这就造成了研究问题会非常偏离实际。在上面的讨论中,什么额外的因素都没考虑,实际上这是显然不可能的。实际当中,就算没有英雄、魔法、地形的影响,也不能不考虑士气、运气的影响。一次士气高涨就可能导致战局的完全改变。就算没有士气、运气因素,由于恶魔的dmg在30~40之间波动,如果刚开始几次恶魔的dmg非常高,以至于恶魔以此确立了实力上的胜势,后面几次dmg非常低也就无所谓了。当然,一旦考虑其他因素的影响,将会使讨论变得异常复杂,个人也没有能力来完成讨论了。
还有,这个模型过于理想化,以至于将生物本身的特技都忽略了。实际中呢?天使的特技加士气还可以忽略,那些特技像老化、石化、麻痹、失明、中毒、死亡凝视等等,都是生物的看家本领,对战局也起着至关重要的影响,能忽略不计么?还有那些远程兵种,有谁战斗时是将他们送上前线和别人肉搏?
还有一点不能不提的是,在我的思路中,速度优势并没有很好的体现出来,这也是一个缺陷。速度在讨论中只起到了决定谁先出手的作用。举个例子,假设另外还有一个恶魔,这个恶魔和普通的恶魔没什么不同,唯一的区别是这个恶魔速度只有16。那么沿用上面的思路比较天使和这个特殊恶魔的实力比,他们的实力比应该也是A,因为速度16还是17对于天使来说没什么差别,都是天使先出手。但是速度是16还是17对于恶魔和恶魔就不同了。普通的恶魔和特殊恶魔单挑,普通恶魔由于速度上占优而先出手,会带来很大的优势,这样你会得出普通恶魔/特殊恶魔实力比>1,这看起来与普通恶魔/天使实力比和特殊恶魔/天使实力比相同相矛盾!只剩唯一的解释了,实力比具有不可类比性,即不能因为c/a>(或<或=)b/a得出c/b>1(或<或=)。