【够狠】见识一下专业人士如何玩Heroes3

论坛:IT江湖作者:jackal发表时间:2004-06-18 22:33
玩游戏玩到这种程度, BT啊!!!

发信人: 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)  理由是n1个天使可以干掉f(n1)个恶魔,但是不能干掉f(n1)+1个,将n1换成n2,n3,……nk等等一样成立,由(3)立即可得到结论。

(5)k*f(n)<=f(k*n)  在(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/nA,单挑过程中,恶魔初始实力上的优势,带来的是剩余更多的恶魔,使得恶魔伤害变大,天使剩余得少,恶魔的优势进一步扩大,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(或<或=)。
标签: 添加标签

0 / 0

发表回复
 
  • 标题
  • 作者
  • 时间
  • 长度
  • 点击
  • 评价

京ICP备14028770号-1