单机游戏‎ > ‎暗黑破坏神2‎ > ‎

理论·数据 - Min和Max的理论——Damage波动的数学研究及其简单应用

posted Mar 18, 2011, 8:27 AM by Leo - www.superarts.org -   [ updated Mar 19, 2011, 12:14 AM ]

Min和Max的理论——Damage波动的数学研究及其简单应用



什么是min dam,一般认为是1hit所能造成的最小伤害,而什么是max dam呢,当然也就是1hit所能造成的最大伤害,每一把武器都有mindam和maxdam,而角色的状态显示栏里面也都是xxx-xxx,前者是min dam后者是max dam,另外还有珠宝,符文,护身符等等,很多装备能对mindam和maxdam进行加成。

究竟是min好还是max强,这个问题已经困扰了我们太久。

现在大家一般认为,如果你的min比较高,那么攻击力比较平均,更容易让对方产生fhr动作;而max的效果在于攻击力波动较大,容易打出1hit ko,以使得让对方没有leech回血的机会,而就使用情况来看,有喜欢min的,也有喜欢max的。

在min和max的讨论,最常见的争论莫过于40ed/10min和40ed/15max的选择了,一段时间40ed/10min的价格高过了40ed/15max,不过就现在来看,人们更多的倾向于使用40ed/15max,min dam的神话基本已经破灭。

40ed/15max最终占了上风,看起来似乎是因为大家认为max比min好,实际上多数人只是认同15max>10min,就我的调查来看,如果bizzard的游戏设定中有40ed/15min的珠宝,更多的人会要15min而不是15max。

现在我想用测试为基本手段,结合数学推理对dam的分布进行一些研究,我想:看了这篇文章以后,大家在选择装备的时候能更加理性。

测试将完全在单机上进行,使用局域网游戏双开game,用shadowmaster修改人物,技能,装备。未额外说明的情况下,测试全部在普通难度的act1进行。

第一章 引子-life的小数取值

1.1 波动过大的实际dam

我研究的目的是要找出dam的分布规律,为了验证life是否只能取整数,第一次的测试攻击力的波动非常小。

测试1
攻击方pal:clvl90,普通攻击,显示dam171-172,显示ar524,str200,使用3孔秘仪镶2×12#,并且用了2个3max/20life的小符。
防守方bar:clvl90,显示life1001/1001,def5,未加其他的任何属性点和技能点。

hit后的剩余life的数据:
1001,
957,914,871,829,786,743,700,656,613,570,
527,484,441,398,355,311,269,226,182,139,
96,53,10

计算出的每hit的dam:
44,43,43,43,43,43,43,44,43,43,
43,43,43,43,43,44,42,43,44,43,
43,43,43

由数据的计算结果可以看出,dam波动是42-44之间,而显示dam是171-172,按照pvp除以4的原理,dam应该是42.75-43,如此的话显示dam和实际测试dam是有差错的,初步怀疑有两个地方有可能出问题,一个是dam的显示,另一个是life是有小数效果的。

1.2 无比稳定的ice blast

测试1让我想到了在使用d2jsp的cubebot设置小符的life的时候,20life要用20*256=5120来表示,
那么..............莫非life是有隐藏的小数的?而且这个隐藏的小数至少占用1个字节,是8位的2进制数256
为了验证这一点,我进行了第2个测试。

测试2
攻击方sor:clvl90,1级ice blast攻击,显示dam10
防守方bar:clvl90,显示life1001/1001,显示4r30

hit后的剩余life的数据:
1001,999,997,995,994,992,990,998,987,985,983,981,980,978,976,974,973

计算出的每hit的dam:
2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,1

显示dam为10,cr是30,那么实际dam应该是7,pvp dam是1.75,数据已经说明了ice blast的稳定性,每hit是标标准准的1.75dam。

由此我想到了一个测试波动性物理攻击小数取值的方法,既然ice blast的dam稳定在1.75,那么pal每次攻击bar的时候,攻击一次就追加几个ice blast就能知道life在小数点后的取值是多少了。

举2个实例说明:
如果原始life是1001,
如果物理攻击一次dam是171,那么pvp dam是42.75,紧接着4个ice blast的dam都是1.75
那么实际life的变化就是:
1001,958.25,956.5,954,75,953,951.25
显示的life是:
1001,958,956,954,953,951
统计到的life减少的量是:
43,2,2,1,2
由于第3次ice blast看起来只减少1life,说明这个时候life实际值是xx.00,因此可以判断出第1hit的实际dam不是43,而是43-1+3*0.25=42.75. 

如果原始dam是1001,
如果物理攻击一次dam是173,那么pvp dam是43.25,紧接着4个ice blast的dam都是1.75
那么实际life的变化就是:
1001,957.75,956,954.25,952.5,950.75
显示的life是:
1001,957,956,954,952,950
统计到的life减少的量是:
44,1,2,2,2
由于第1次ice blast看起来只减少1life,说明这个时候life实际值是xx.00,因此可以判断出第1hit的实际dam不是44,而是44-1+1*0.25=43.25.

如此的方法就能知道出life小数数值。

1.3 min dam的错误显示

通过1.2所想到的方法,把测试1改良以后重新测试了一次

测试3
攻击方pal:clvl90,普通攻击,显示dam171-172,显示ar524,str200,使用3孔秘仪镶2×12#,并且用了2个3max/20life的小符。
攻击方sor:clvl90,1级ice blast攻击,显示dam10
防守方bar:clvl90,显示life1001/1001,def5,4r30,未加其他的任何属性点和技能点。

具体数据:
格式为:
(上次剩余life)-(pal攻击以后的剩余life)-(sor进行第x次攻击的时候只减少1life),(pal攻击实际dam)
1001-958-4hit,43
951--908-4hit,43
901--858-4hit,43
851--807-1hit,43.25
806--763-4hit,43
756--712-1hit,43.25
711,这里sor误操作使用了显示dam为1-2拳头dam攻击使life变为710,然后sor的2ice blast以后life为708,707,显然拳头造成了2/4=0.5dam
但为了数据与前面保持一致,让bar全恢复life,life从1001life从新开始
1001-957-1hit,43.25
956--912-1hit,43.25
911--867-2hit,43.5
864--821-3hit,42.75
816--772-2hit,43.5
769--725-1hit,43.25
724--681-4hit,43
674--631-3hit,42.75
626--583-4hit,43
576--532-2hit,43.5
529--485-2hit,43.5
482--439-4hit,43
432--388-2hit,43.5
385--342-3hit,42.75
337--293-2hit,43.5
290--247-4hit,43
240--196-1hit,43.25
185--151-1hit,43.25
150--107-4hit,43
100--56--1hit,43.25
55---12--3hit,42.75
7

统计以后发现
42.75----4
43-------9
43.25----8
43.5-----6

由于样本数量比较小,数据出现的频率参考价值是不大的,只考虑其波动变化范围。
实际dam波动是42.75-43.5,
则正确的显示dam应该是171-174,
而实际显示dam却是171-172。

因此我得到一个初步的构想:当武器的min大于max的时候,显示的max dam会比实际max dam偏小一点。

1.4 基本正确的dam显示

这次我仍然用了一把波动很小的武器,不过min<max.

测试4
攻击方pal:clvl90,普通攻击,显示dam147-150,str200,使用3孔秘仪镶1×12#
攻击方sor:clvl90,1级ice blast攻击,显示dam10
防守方bar:clvl90,显示life1001/1001,def5,4r30,未加其他的任何属性点和技能点。

测试数据
1001-964-4hit,37
957--920-4hit,37
913--876-3hit,36.75
871--834-4hit,37
827--790-4hit,37
783--745-2hit,37.5
742--705-4hit,37
698--661-4hit,37
654--617-4hit,37
610--573-4hit,37
566--529-4hit,37
522--484-2hit,37.5
481--444-3hit,36.75
439--401-2hit,37.5
398--360-1hit,37.25
359--321-2hit,37.5
318--281-3hit,36.75
276--238-1hit,37.25
237--未命中
237--200-4hit,37
193--156-4hit,37
149--112-3hit,36.75
107--69--2hit,37.5
66---28--1hit,37.25
27

1001-964-4hit,37
957--919-1hit,37.25
918--881-4hit,37
874--836-2hit,37.5
833--796-4hit,37
789--752-4hit,37
745--708-4hit,37
701--663-2hit,37.5
660--623-3hit,36.75
628--580-2hit,37.5
577--540-3hit,36.75
535--497-1hit,37.25
496--458-1hit,37.25
457--419-2hit,37.5
416--未命中
416--379-4hit,37
372--335-3hit,36.75
330--292-2hit,37.5
289--未命中
289--未命中
289--251-2hit,37.5
248--210-1hit,37.25
209--171-1hit,37.25
170--132-1hit,37.25
131--94--3hit,36.75
89---52--4hit,37
45---7---1hit,37.25
6

统计dam波动以后发现
36.75-------8
37----------18
37.25-------10
37.5--------10

波动为36.75-37.5,与实际显示的dam147-150完全符合,这真是个令人兴奋的结果。

第一章总结:

1 life是有隐藏的小数的,其精度很有可能是8位2进制数。
2 min>max的时候,显示dam会产生错误,显示的max比实际的max要低一点点。
3 min小于max的时候,显示dam基本能正确的反映dam的波动范围。

第二章 均匀分布

通过第一章的几个测试,我们基本可以得到的结论是:攻击造成的实际dam波动在显示的dam范围之内。
下面我将用分析随机变量的数字特征的方法研究dam波动的概率分布状况。

首先用朴实的语言的介绍几个概率的基本概念以帮助大家理解下面的内容:
ps:为了方便理解,有些概念描述非常不严格,还望各位同学见谅

随机变量

简单的说,由于dam是波动的,那么我们每次打出的伤害的具体数值就是一个随机变量,它的取值范围在mindam和maxdam之间,也就是说你运气最好的时候能打出最高的攻击力,运气最差的时候只能打出最低的攻击力,而一般打出来的不是最高也不是最低,而是介于它们之间。

期望和平均值:假设你攻击了一万次一共造成了400000的伤害,那么我们就说你的攻击力的平均值是400000除以10000也就是40,均值会趋近于一个固定的常数也就是期望了。
有人会说我前10次打了400伤害平均就是40,后10次只打了380点伤害平均就是38,这是怎么回事?
概率论告诉我们,只有当攻击次数为无穷大的时候平均值才会成为常数,而次数太少的话会产生随机的误差,这种误差我们叫做抽样误差,它是不可避免的,而次数越多抽样误差就越小,直到次数趋近无穷次的时候抽样误差也趋近为0。
简单的说无穷次统计以后的得出的平均值就叫做随机变量的期望。

均方差和方差:
均方差计算方法是:先计算 (每次的攻击力-平均值)的平方,然后所有的平方数相加,最后除以次数
这样一个数据可以表示攻击力的波动状况,这个数值越大,波动就越厉害。
当次数到无穷次的时候均方差就叫做随机变量的方差。
简单的举例,如果dam固定为一个常数,它的方差就是0。

均匀分布:简单的说就是在min-max之间的取值几率都一样,举例来说,如果min=1,max=10,如果这个攻击力符合均匀分布的话,攻击力为1,2,3,4,5,6,7,8,9,10的几率都是10%。
均匀分布的期望:如果攻击力的波动符合均匀分布,那么它的期望就是(min+max)/2
均匀分布的方差:如果攻击力的波动符合均匀分布,那么它的方差就是(max-min)*(max-min)/12

以下注意:
样本的均值用Ex表示,样本的方差用Dx表示,
总体的均值用E表示,总体方差用D表示。

我们首先用一个dam波动不大的武器来进行测试

测试5
攻击方pal:clvl90,显示dam120-150,str200,使用clean的3孔秘仪
防御方bar:clvl90,显示life1001/1001

测试数据
1001-969-1hit,31.25
968--931-2hit,36.5
928--未命中
928--898-4hit,30
891--854-3hit,36.75
849--813-4hit,36
806--774-4hit,32
767--736-4hit,31
729--695-1hit,33.25
694--4hit
687--651-4hit,36
644--610-4hit,34
603--569-1hit,33.25
568--未命中
568--537-3hit,30.75
532--499-1hit,32.25
498--未命中
498--467-1hit,30.25
466--433-2hit,32.5
430--397-4hit,33
390--359-2hit,30.5
356--325-1hit,30.25
324--290-3hit,33.75
285--248-1hit,36.25
247--211-3hit,35.75
206--169-1hit,36.25
168--136-2hit,31.5
133--99--3hit,33.75
94---59--1hit,34.25
58---21--3hit,36.75
16

共计有效数据26个

统计得到
Ex=33.375
Dx=5.14543

如果假设dam在120-150(30-37.5)上服从均匀分布
其期望是
E=(30+37.5)/2=33.75
D=7.5*7.5/12=4.6875

期望的相对误差是 -0.375/33.75=-1.1%
方差的相对误差是 +(5.14543-4.6875)/4.6875=+9.8%
误差不可谓不大,这应该是由于此次样本太少的缘故,样本数是26,不过就数字特征来看,应该就是均匀分布了。

以下的测试由于数据量比较大,为了方便测试就忽略了小数,而为了保证精度,就大幅度提高了min和max数值,让忽略小数产生的系统误差小于1%。

这次用dam波动比较大的berserk axe

测试6
攻击方pal:clvl90,显示dam297-858,str200,使用295ed的狂战士之斧,min为99,max为286
防御方bar:clvl90,显示life2001/2001 

以下是每次攻击剩余的life数值
2001,1852,1645,1437,1251,1078,976,899,704,544,363,156,
2001,1910,1788,1584,1506,1329,1181,1023,845,750,554,350,191,
2001,1792,1606,1470,1262,1140,1039,825,646,436,288,201,
2001,1840,1664,1458,1247,1036,925,743,643,451,299,160,
2001,未命中,1789,1655,1540,1366,1270,1067,985,787,689,613,512,434,238,160

共计有效数据59个
Ex=154.864
Dx=2153.47

如果假设dam在297-858(74.25-214.5)上服从均匀分布
其期望是
E=(214.5+74.25)/2=144.375
D=(214.5-74.25)*(214.5-74.25)/12=1639.171875

期望的相对误差是 (154.864-144.375)/144.375=+7.3%
方差的相对误差是 (2153.47-1639.171875)/1639.171875=31%

这次的样本数量不小,达到了59个,不过误差却是高的惊人,
不过可喜的是样本的期望和方差却是同步提高的,
我的设想是样本还是服从均匀分布的,不过由于dam显示错误的原因,实际期望和方差的数字特征于显示dam不匹配!

测试7
这次给装备上用了很多ed/max珠宝,大幅度提高的dam以减小忽略小数造成的误差
攻击方pal:clvl90,普通攻击,显示dam737-3050,str381,使用295ed的狂战士之斧+2*40ed/15max,使用4孔血甲+4×40ed/15max,武器的min为119,max为372
防御方bar:clvl90,显示life2933/2933

以下是每次攻击剩余的life数值
2933,2430,2051,1619,1213,1072,591,
2933,2397,2256,1915,1484,972,824,433,
2933,2577,2314,2029,1908,1417,1179,651,173,
2933,2622,2404,1971,1502,872,163,
2933,2516,1994,1410,936,276,
2933,2602,2292,1659,1181,465,
2933,2451,2194,1991,1556,1023,483

共计有效数据43个
Ex=417.372
Dx=23317.5

如果假设dam在737-3050(184.25-762.5)上服从均匀分布
其期望是
E=(762.5+184.25)/2=473.375
D=(762.5-184.25)*(762.5-184.25)/12=27864.421875

期望的相对误差是 (417.372-473.375)/473.375=-12%
方差的相对误差是 (23317.5-27864.421875)/27864.421875=-16%

这次的测试同样表现出相当大的误差,不过奇怪的是这次的均值和均方差都偏低,通过这几次,我越来越以为dam分布不是均匀分布,而是一种近似均匀的分布。

测试8
这次的测试加入了fana(狂热)光环,dam进一步加大

攻击方pal:clvl90,普通攻击,显示dam1181-4885,str381,使用295ed的狂战士之斧+2*40ed/15max,使用4孔血甲+4×40ed/15max,武器的min为119,max为372,fana20级
防御方bar:clvl90,显示life2933/2933

以下是每次攻击剩余的life数值
2933,2133,1607,836
2933,2515,1390,613
2933,2212,1828,1378,416
2933,1790,990
2933,1797,1370,1049
2933,2236,1559,880
2933,2466,1369,364
2933,1885,未命中,742
2933,1907,1275,69
2933,2576,1488,657
2933,1797,952
2933,2213,1510,476
2933,2074,1526,805
2933,2153,1203
2933,1873,1352,616
2933,2360,1777,1108

共计有效数据45个
Ex=781.156
Dx=61578.8

如果假设dam在1181-4885(292.25-1221.25)上服从均匀分布
E=(1221.25+292.25)/2=756.75
D=(1221.25-292.25)*(1221.25-292.25)/12=71920.83

期望的相对误差是 (781.156-756.75)/756.75=+3.2%
方差的相对误差是 (61578.8-71920.83)/71920.83=-14%

此次测试发现期望的误差并不大,而方差却仍然比预期的小不少,就数字特征来看,
个人推测,这样的方差下降的情况也许意味着计算dam的时候是几个不相关的均匀分布的叠加,
一般来说不相关的随机变量叠加以后,得到的新的随即变量的期望和原来几无差别,而方差会减小

但是就数字统计来看误差还没有高到可以否认dam分布的大致形态。

因此我们可以认为d2中dam分布是一个近似的均匀分布,其均值是(min+max)/2,均方差约等于(max-min)*(max-min)/12或略小。

第二章总结:

1 纯物理攻击的dam分布是一个近似的均匀分布,其均值约为(min+max)/2,均方差约为(max-min)*(max-min)/12
2 dam分布不是按照显示的dam分布的,或者说状态栏显示的数字不能够反映dam的真实算法。

依照第二章的结论,我们可以通过数理统计解决一些简单的实际的问题

第三章 均衡的cs效果 

待验证课题:ama的cs是如何起作用的?是否大多数双倍打击出现在平均值到最大值之间?

测试原理:
首先做2个测试ama,2者攻击力一样,而前者无cs,或者有xx%的cs
测试以后前者的平均dam取为a,或者的平均dam取为b
如果a*(1+xx%)和b相等,那么说明cs是随机出现在min到max之间的;如果明显不相等,那么就可以认为cs更倾向于出现在min到aver之间(或aver到max之间)。

测试9
攻击方ama:clvl90,ga攻击,显示dam306-2496,ga20级,残忍九头蛇+2×40ed/15max,min为51,max为356,dex245,血甲+4×40ed/15max
防御方bar:clvl90,显示life2933/2933

以下是每次攻击剩余的life数值
2933,2431,2079,1659,1245,1100,484,329
2933,2618,2275,1826,1251,642,383
2933,2315,2118,1896,1539,1154,788,612
2933,2393,2242,1927,1677,1336,883,520
2933,2667,2251,2152,1664,1470,1216,747,335
2933,2527,2034,1573,1326,1004,891,463
2933,2715,2558,2430,2302,1987,1504,1388,1034,575
2933,2852,2229,2049,1652,1075,490
2933,2326,2150,1828,1382,759,282

共计有效数据63个
Ex=364.254
Dx=25464.3
继续验证是否均匀分布306-2496(76.5-624)
E=(624+76.5)/2=350.25
D=(624-76.5)*(624-76.5)/12=24979.6875
期望的相对误差是 (364.254-350.25)/350.25=+4.0%
方差的相对误差是 (25464.3-24979.6875)/24979.6875=+1.9%
基本符合

测试10
攻击方ama:clvl90,ga攻击,显示dam306-2496,ga20级,残忍九头蛇+2×40ed/15max,min为51,max为356,dex245,血甲+4×40ed/15max,cs20级68%
防御方bar:clvl90,显示life2933/2933

以下是每次攻击剩余的life数值
2933,2392,2207,1474,1177
2933,2698,1577,1074,
2933,2593,2385,2008,916,
2933,2651,1716,1076,
2933,2433,1686,1205,
2933,2726,1792,1224
2933,2262,1372,696
2933,2731,2409,2162,1165
2933,2358,2191,1754,1332,1054
2933,2808,2586,2128,1418,1166
2933,2125,1942,1334,132
2933,2796,2050,886
2933,2442,1435,1228
2933,1769,786,
2933,1889,1020
2933,2525,2336,1233
2933,2553,1365,846
2933,2218,1354,957

共计有效数据60个
Ex=600.55
Dx=103922
由于cs有68%几率产生,此分布绝对不可能是均匀分布,其方差比均匀分布也要大的多

2次测试发现Ex1=364.254,Ex2=600.55
而364.254*(1+68%)=611.94672
相对误差小于2%,可以认为cs是均匀分布在min到max之间的。

第三章总结:

cs出现在min-max之中任意一点的几率相等,关于cs多出现在aver到max的说法是没有根据的。

第四章:可怕的合并ga

待验证课题:1支穿刺ga每hit的dam是否相等?

测试原理:制造2个ama,前者和后者的dam完全一样,而前者穿刺为0,后者为100%
测试他们发出ga的平均值和方差
如果一支ga每hitdam一样,1ga的5hit的总dam的方差就会是单hit的dam的方差的25倍
证明如下:
D(x)=E(x*x)-E(x)*E(x)
5hitdam都一样
则D(5x)=E(5x*5x)-E(5x)*E(5x)=25[E(x*x)-E(x)*E(x)]=25D(x)

如果一支ga每hitdam不一样,1ga的5hit的总dam的方差就只有单hit的dam的方差的5倍
命题要求:
已知:x,y,z,a,b服从相同的分布,他们的期望和方差完全相同
求证:D(x+y+z+a+b)=5D(x)
证明如下:
D(x)=E(x*x)-E(x)*E(x)
先假设2hit的情况,因为分布率相同,那么E(x)=E(y),E(x*x)=E(y*y)
因为x,y不相关,所以协方差E{[x-E(x)][y-E(y)]}=0
所以E(xy)=E{[x-E(x)+E(x)][y-E(y)+E(y)]}
=E{[x-E(x)][y-E(y)]}+E[x-E(x)]E(y)+E[y-E(y)]E(x)+E(x)E(y)
=0+0+0+E(x)E(x)
=E(x)E(x)
D(x+y)=E[(x+y)*(x+y)]-E(x+y)*E(x+y)
=E(x*x)+E(y*y)+2E(xy)-[E(x)+E(y)][E(x)+E(y)]
=2E(x*x)+2E(x)*E(x)-4E(x)*E(x)
=2[E(x*x)-E(x)*E(x)]
=2D(x)
同理,如果x,y,z,a,b这5hit都不相关
则D(x+y+z+a+b)=5D(x)

由于穿刺腰带带有10max和15dex,所以必须用一种方案来中和它们,让有穿刺的ama和无穿刺的ama dam一样
我的设计是
非穿刺ama:无cs,显示dam232-1188,ga20级,残忍九头蛇295ed+9dex珠宝,min为43,max为272,dex205,3×2dex,wt15min25max
穿刺100%ama:无cs,显示dam232-1188,ga20级,残忍九头蛇295ed+10min珠宝,min为43+10=53,max为272,dex205,5×3max,血拳5min,穿刺级别10(直接修改的穿刺,因此不需要升级cs),穿刺几率71%+33%>100%。

测试11
攻击方ama:clvl90,无cs,ga攻击,显示dam232-1188,ga20级,残忍九头蛇295ed+9dex珠宝,min为43,max为272,dex205,3×2dex,wt
防御方bar:clvl90,显示life2933/2933

以下是每次攻击剩余的life数值
2933,2673,2417,2341,2065,1910,1772,1569,1341,1051,765,674,527,347,123
2933,2754,2505,2369,2209,2078,2002,1724,1629,1566,1387,1175,973,723,429,351,280
2933,2841,2600,2356,2101,1969,1745,1572,1467,1269,1077,914,735,498,331,223
2933,2709,2512,2279,2198,1986,1752,1472,1236,1064,775,553,340,97,
2933,2806,2564

Ex=189.633
Dx=4274.3
若为均匀分布,其dam232-1188(58-297)
E=(297+58)/2=177.5
D=(297-58)(297-58)/12=4760.1
期望的相对误差是 (189.633-177.5)/177.5=+6.8%
方差的相对误差是 (4274.3-4760.1)/4760.1=-10%
期望偏大,方差偏小。

测试12
进行测试13之前顺便用一把镶了6×12#的十字军弓测试了一下ga合并的状态
测试结果
0点,3点,6点,9点方位的攻击,可以明显的看到ga的5hit,这4个点的范围都大约为10度(有几次最后2hit隐形了)
1点半,4点半,7点半,10点半,只能有2hit,这4点各点所包含的范围大约为60度
还剩下80度的空间里可以有3hit,
虽然大部分时间只有2-3hit(注意是只有2-3hit,而不是只看到2-3hit,或者说有2-3hit是在一次穿透中完成的),但是每次的攻击效果都是5hit的,所以威力最强的合并ga一定是合并了3支ga
max为6000的话,3ga的最大值就是18000,全部cs就是36000,我想这也就是为什么会出现可怕的1000life ko的原因了吧。

测试13
攻击方ama:clvl90,无cs,显示dam232-1188,ga20级,残忍九头蛇295ed+10min珠宝,min为43+10=53,max为272,dex205,5×3max,血拳5min,穿刺级别10(直接修改的穿刺,因此不需要升级cs),穿刺几率71%+33%>100%。
防御方bar:clvl90,显示life2933/2933

以下是每次攻击剩余的life数值
2933,1970,1240
2933,1963,1055
2933,1803,1064
2933,2201,1251
2933,2275,1318
2933,2363,1422,695,
2933,2090,1012
2933,2322,1468,677
2933,2010,1298,448
2933,2245,1206,430
2933,2133,1217,405

Ex=839.556
Dx=19241.5

综合测试11的结果,
Ex11=189.633
Dx11=4274.3
Ex13=839.556
Dx13=19241.5

Ex13显然略小于5Ex11,我想这个是由于装备的选择不同造成的,当然还有dam计算方法的因素
而Dx13=19241.5,和5Dx11相差无几,而与25Dx11则完全不是一个概念

根据测试原理可以知道:1支ga的每次穿刺的hit dam都是随机的,各不相关。

第四章总结:

1 合并ga确实是存在的,最多可以有3ga合并,不同的方向合并的程度不一样,但在特定的方位上合并的可能性是100%.(当然这些都是静止状态中的)
2 一支ga每次穿刺的hit dam都不一样。

第五章 ww的连击

待验证课题:1次ww中每hit的dam是否相等?

测试原理和穿刺ga的测试原理完全相同,由于ww的命中率不是100%,统计hit次数,只能靠听hit的声音,为了统计的方便,使用速度为0的武器,大多数情况下ww会是3hit(有5%的miss率,而且ww的方向不好的时候也能3hit,所以有不少不是3hit的ww不参与计算)

测试14
攻击方bar,clvl90,ww攻击,显示dam45-225,str194,ww8级,武器是镶了5#的3孔炎魔之刃,单手状态min15,max75,武器速度0
防御方pal,clvl90,显示life1673/1673

以下是每次攻击剩余的life数值
1673,1545,1431,2hit365,1274,1206,1103,995,902,2hit833,708,606,2hit557,459,377,229,2hit171,70,
1673,1587,1479,2hit1409,1314,2hit1255,1145,998,911,794,722,639,584,471,2hit410,305,234,139,
1673,1560,1490,2hit1393,2hit1305,1214,1125,1001,912,827,741,2hit667,586,464,369,317,224,93
注意:其中带有2hit的表示这次只命中了2hit,此数据不参与统计计算

共计无效数据10个,,都是2hit的
有效数据41个

Ex=98.1951
Dx=466.303
以上是3hit效果
由于单hit服从近似的均匀分布45-225(11.25-56.25)
E=(56.25+11.25)/2=33.75
D=(56.25-11.25)(56.25-11.25)/12=168.75

Dx与3倍的D相当接近,而与9倍的D相去甚远,因此我们可以认定1个ww中的每hit都是随机的,各不相关。

第五章总结:

1个ww中的每hit都是随机的,各不相关,从概率论的角度看,相对来说方差不会很大,这意味着单ww多hit攻击的总攻击力波动不会太大。

全文总结汇总: 

第一章总结:

1 life是有隐藏的小数的,其精度很有可能是8位2进制数。
2 min>max的时候,显示dam会产生错误,显示的max比实际的max要低一点点。
3 min小于max的时候,显示dam基本能正确的反映dam的波动范围。

第二章总结:

1 纯物理攻击的dam分布是一个近似的均匀分布,其均值约为(min+max)/2,均方差约为(max-min)*(max-min)/12
2 dam分布不是按照显示的dam分布的,或者说状态栏显示的数字不能够反映dam的真实算法。

第三章总结:

cs出现在min-max之中任意一点的几率相等,关于cs多出现在aver到max的说法是没有根据的。

第四章总结:

1 合并ga确实是存在的,最多可以有3ga合并,不同的方向合并的程度不一样,但在特定的方位上合并的可能性是100%.(当然这些都是静止状态中的)
2 一支ga每次穿刺的hit dam都不相关(也就是不同)。

第五章总结:

1个ww中的每hit都是随机的,各不相关,从概率论的角度看:方差不会很大,这意味着单ww多hit攻击的总攻击力波动不会太大。

后记: 

其实本人很早就有心从dam波动入手,用数理统计的方法研究min和max的效果,让大家能有一个数学上感觉到min和max的使用效果的差别(而不是简单的所谓min高就一定能提高fhr几率,所谓高的mindam就明显是稳定而无生气的攻击,所谓max高就很容易1hit ko),让大家在选择min和max物品的时候能更有针对性,只不过测试量,计算量太大,一直懒懒散散的,拖到了现在。

文中大家已经看到了,单hit dam波动基本是均匀的,也就是说从min到max的几率都差不多,这样的话实际上绝大部分dam都在中间值上,而多hit的叠加造成的相对方差下降更是让min和max显得无关痛痒,关键还是看averdam,也就是平均攻击力,这也是我想提出的averdam概念,基本核心是min和max在概率上都是极少出现的(特别是多hit叠加以后),所以过分专注于max或专注于min都是不合适的,我们要求更高的averdam而不仅仅是看似稳定的mindam和看起来威慑力很强的maxdam(当然hc berbar除外,这个我以后还会提到)

另外我自己都可以看到我的文章还存在不少得漏洞和缺陷,我想把我自己能看得到的缺陷先指出来,以免引起误导: 
  1. life的小数效果:8位2进制小数是我在d2jsp中得到的启发,不敢说一定正确。 
  2. dam波动是均匀分布:说实话,均值和方差的实际结果和均匀分布有如此大的出入是我没有想到的,对此我多少是有点失望的,最后只好用一句近似的均匀分布来做总结。现在看来,单hit的dam应该是由多个随机变量组成的,而其中权重最大(应该是90%以上)的一个随机变量一定是均匀分布,否则它的数字特征不会和均匀分布如此接近。 
  3. 测试方法:我自己都可以感到自己的全手动测试方法是非常落后的,看来研究d2jsp,d2hackit,.mpq对高级测试来说是必须的,这要求相当的编程能力。 
  4. 概率论的数学概念:我已经说了为了方便理解(同时也有我自己对概念理解不深的原因),对几个概率名词的解释是很不严格的,如果有原则性错误还请各位高手指正。 
  5. 数理统计方法:严格的说我的数理统计方法是很不正规的(主要是懒的再翻书啦-_-),严格的数理统计一般都应该是一种检验或估计,有一个自由度的概念(我的理解是自己对自己的统计进行一个可信度的预估)。 
  6. 错误的显示dam:显示dam在很多地方都和实际不符合,测试1给出的一个错误是一个maxdam的错误,这个错误的效果实际上小到可以忽略。而由于测试方法的局限性,后来的测试所用的min和max只能参照显示dam,这个也许也就是我测试数据误差不小的根本原因。(其实从我配的装备来看,我的盔甲,技能,stat总ed多是整数,这样很容易可以看到显示dam基本上是严格的按照dam计算公式来的) 
Comments