凯恩之角_暗黑破坏神3论坛_夺魂之镰
标题: 黑人光线伤害机制和攻速的关系研究,暗黑相对论第一帖 [打印本页]
作者: GabrielRum 时间: 2013-3-11 20:17
标题: 黑人光线伤害机制和攻速的关系研究,暗黑相对论第一帖
本帖最后由 GabrielRum 于 2013-3-28 18:40 编辑
本帖起因是源自测试帝L大神近期的对黑人的实验
由于对第二部分理论的数据支持不足,所以本人又做了相关测试共计29组。
特别感谢:N大的建议和指导,学软件的哥们指导(虽然你不玩暗黑)
注意:想读懂此文必须先看L大帖子和S大公式
本文中的单次攻击都是指黑人的首个100%伤害
第一部分:扫射首次伤害分析
注意里面的表格,我这里就直接复制了,L大你别说我侵权啊。
注意实验证明扫射的首次伤害是不变的
注意攻速的突变点
下表表示部分攻速的单次攻击完成时间的关系
攻速 单次攻击完成时间
1.02 0.326
1.03 0.323
1.05 0.317
1.06 0.314
突变
1.11 0.3003
1.12 0.297
突变
1.17 0.2849
1.18 0.282
突变
1.25 0.266
1.26 0.264
突变
1.33 0.2506
1.34 0.248
突变
1.42 0.2347
1.43 0.233
突变
1.53 0.217
1.54 0.215
突变
2.22 0.150
2.23 0.149
突变
考虑实验误差,观察以上数据,观察突变点的时间变化规律,可以看到
当攻速使攻击完成时间突破一些临界点时,实际攻击伤害会发生变化。这个
时间目前来看是每个0.1s
中的大约在0.1 0.085 0.065 0.05 0.035 0.015
附近,由S大公式可以得出是1/60s的相差量
。
为什么会这样?
根据软件学院同学的提示,在程序中,时间计算主要是由指针完成(我只懂C++这里就用这种语言说了,至于暗黑具体怎么编不知道,机理一样)所以要定一个基准时间,这个是最小能计算出的时间,就像普通手表只能计算出1s一样,即为之前讨论的1/60s,这个时间是不能太小的,要不会大大增加运算量。现在问题是攻速计算的完成攻击时间是一个很多位的小数,暴雪没法精确计算,怎么办,所以暴雪的做法是先计算出一个T的伤害值(这个可以做的非常精确),再向下取整,找出最接近实际攻击完成时间的T的个数,之后乘出单次伤害,这样就导致实际伤害比dph略小的结果。那么也会出现临界时间突变的现象。
那么我们提出假设:
暴雪对黑人攻击伤害设置了一个最小计算时间,扫一次伤害值得计算以这个计算时间为基础计算,即能计算出多少个最小计算时间就有多少份伤害,小数部分会舍去,无法计算出来,造成实际伤害减少。
用公式表达就是(dph/单次攻击完成时间)*(攻击完成时间/最小计算时间)的整数部分
当攻击完成时间的小数部分越小,实际攻击伤害就越接近dph。
如果假设成立那么每次攻击的数值与dph的比例将由上述公式得出
先根据上面的表假设第一个临界时间是0.315 时间比例以1.02速为例就是0.315/0.326
攻速 时间比例 伤害比例
1.02 0.966 0.969
1.03 0.975 0.978
1.06 0.955 0.954
1.33 0.997 0.997
1.42 1 0.994
1.43 0.922 0.930
证明以上假设成立
这里还有个问题就是伤害中是按完成一次攻击时间为一部分计算,如14T的伤害直接显示,还是每一T都分开作为一部分(即暴击率作为每个T单独计算)计算,一次显示出来呢, 这关系到第二部分的分析和暴击计算。
高爆率下测试,首次攻击也会暴击,而且暴击伤害基于完成单次攻击的时间取整计算出的伤害。
注意现在将1/60s作为基础时间,记作T,之后的分析会多次用到。
同时扫射过快就没有伤害部分证明存在一个临界时间,必须大于这个时间(或这个时间的一个比值)才有输出,第二部分将完全证明这个假设。
这是单次扫射伤害的分析,那么dps会相应的减少,真的是这样吗?
第二部分:持续攻击伤害分析
先选取一部分有特点的数据,上传图片数量有限,慢慢更新图片。
这是实际持续伤害的实验数据
攻速1.33,5爆率,50%暴伤
下面这张是去除明显是暴击的数值的图,去除数据包括2494(两次中判定一次暴击),2893(两次全部暴击),3591(这个要和1596一起看,比较复杂,但是有两次暴击),其他数据(不包括个别奇葩数字)调高爆率后出现次数不受影响,可认为不是暴击。
攻速1.38,6爆率,50%暴伤,直接是去暴击图
首先我认为时间伤害是实际持续伤害过程中,首先有一个显示白字的时间XT,那么在这个时间里完成几次攻击就显示多少次单次攻击的伤害。
证明:
持续攻击时暴击数值,暴击数值是基于第一部分一个完整攻击完成时间攻击的伤害计算出来的。即XT的伤害是首先基于完成了几次完整攻击。
注意到有很多数据既不是暴击又不是完整攻击的伤害,原因是比如完成两次攻击周期共需要30T时间,XT是31T,那么出现1T时间的差值,暴雪通过以下手段把它补上了。
基于相关专业人员提供的思路之后来分析暴雪怎么把缺失的dps补上的,第一部分结论成立的条件下,在假设出一次白字的时间是30T,完成一次攻击周期的时间是14T多一点,就假设是14.1T,那么在30T时电脑计算出一个伤害是28T显示出来(算的两个攻击周期),暴雪把这2T的时间积下来,之后凑整补上,就产生了伤害增加,就显示为2195。
值得注意的是小数部分,在单次攻击中,小数部分被直接忽略掉了,但持续攻击中不会这样,原因:
假设完成一次攻击的现实中时间是31.5T,能计算出的部分是31T,那么就有0.5T的时间差,那么第一次显示31T的伤害,但是这0.5T不会无缘无故消失掉,因为现实中是存在的,系统伤害也是通过攻击次数计算的,所以在下个31T显示周期到头时,即62T时刻,第二次攻击只完成了30.5T,即系统计算出30T,那么系统会发现这个时间差,这是系统计算出时间差的方法,也就是完成两次攻击实际共需要63T,那么系统就能得出出现了1T的时间差值。
那么在上个例子中,还有0.1T是多补上的,现在还没法计算出来,但当这样经过一段时间后,时间多余时间积累到一定数值,如1T,这时电脑就能计算出它来了,这时程序把这1T的伤害和时间在下一次计算伤害时去除(个别实验中途出现的1930和1794).在后续将时间小数部分调到0.5左右时,出现这种比不暴击攻击伤害还少的伤害的现象增加。
现在基于以上模型,分析实验数据:
由25组数据统计,计算暴击和排除暴击后与dps面板数值对比,dps面板(暴击和非暴击)都是两者数值都是的30/31(计算时间以30T为基本假设),可以得出实际周期为31T(2进制编码较好的一个数值)。
又做了约29T为2个攻击周期的实验(6组),数值2070为主,2070是29T(1932)+2T的伤害值,证明以上结论正确。
攻速1.29(攻击周期约31T)时做实验,除了暴击,伤害数值稳定,也证明了结论。
细化分析下注意到大部分情况下3T或6T补充一次但也有其他情况,但是不是所有都严格符合时间差的比例补充(即3个1995对应一个2195,很接近严格时间差比例补充的有15组).在这里我只能根据现有证据大胆猜测一下,是由于初值条件不同。即游戏有内置时间轴,这个时间计算独立不受影响,黑人伤害计时不是以造成伤害的一瞬间为起点,比如内置时间轴进行到1s的第25个T中的某时光线发起攻击,这时会把这个31T不计,那么有6T的时间先存下来,之后和时间差1T凑成6T等时间时还回来。可能也是实验中出现1930(理论上在这么短时间内不会出现,但如果之前就有小数如0.8T的差就可以出现了)的原因。
结论:
1.攻速影响实际扫射单次输出伤害,控制攻速可有效控制单次伤害,但在持续攻击中会很快补充上来,因而理论上不影响dps(就样本数据看由于补充的部分不暴击稍有影响),但如果只是很短时间里,可能影响dps。
即如果没有合适的攻速,追求dph是没有意义的,那么为了dph而舍弃dps是不科学的配装方法。
2.这个没有严格证明,但目前所有证据都指向此结论,即暗黑内置时间轴,最小单位是1/60S。
一些扩展
关于跑速,旋风攻击次数等关于时间机制的研究可参考以上结论,还有视频最后有个断黑人结果打出100多伤害,我觉得和第二部分机理有关,意味着出现小于一个最小时间的伤害,证明了T的存在,因为恰好是2T的伤害。
作者: M桑 时间: 2013-3-11 20:19
话说我一直觉得黑人输攻速快的更大。
作者: Siean 时间: 2013-3-11 20:31
个人感觉吧
暴击胜在收割小怪速度
攻速在精英战感觉有优势
作者: 敛刃 时间: 2013-3-11 20:35
感觉黑人往死了堆面板就好……管他暴击装还是攻速装,面板高就好
作者: GabrielRum 时间: 2013-3-11 20:38
敛刃 发表于 2013-3-11 20:35
感觉黑人往死了堆面板就好……管他暴击装还是攻速装,面板高就好
编辑的基本完成,从数据分析现在看来只堆面板不是最优的提高伤害的方式,结合黑人伤害方式的帖子和刷图攻击方式帖的分析就可以得到这个结论。
作者: GabrielRum 时间: 2013-3-11 23:44
本帖最后由 GabrielRum 于 2013-3-12 00:06 编辑
时间公式不明召唤各种技术帝研究
不出意外和这个公式有关系http://bbs.d.163.com/thread-172523070-1-1.html时间也可能是离散化的结果
作者: nyningyu 时间: 2013-3-12 00:06
读了很久看懂了。。
(其实看的时候一直在想,为什么暴雪程序设计者会设计这么个浮动的时间间隔呢。。感觉好麻烦而且没道理这么做啊。所以看的时候有点晕呼呼的 哈)
我的问题是,您的第一个结论里面找的这一组0.1 0.085 0.065 0.05 0.035 0.015数据是观察得到的结果,从程序的角度来说,不知道怎样根据这一组数据来推出内在的东西,比如说一个公式、或者某个机理等。 所以我觉得,用这组数据来验证您的猜想确实没问题,而且有可能后面的数据,也能找到这样的时间间隔来对应您的结论,但是没有一个通项公式的话,就不能推导到后面的数据,也就没有了意义。由此您的第二个基于这个猜想的结论也不敢确定对不对。。
这些是我想了很久后的回复。我觉得如果你的猜想是对的,即持续的输出dps是不变的,那么做个实验就清楚了吧,比如可以对着罪恶之心输出相同的时间来看损血量的关系。最好拿最极端的攻速来测试,这样差值会相对明显点。
作者: GabrielRum 时间: 2013-3-12 00:15
本帖最后由 GabrielRum 于 2013-3-12 00:18 编辑
nyningyu 发表于 2013-3-12 00:06
读了很久看懂了。。
(其实看的时候一直在想,为什么暴雪程序设计者会设计这么个浮动的时间间隔呢。。感觉 ...
对,我编程不好哈,就是个C++2级水平,所以不太知道怎么编,但肯定的是给出几个固定数值是不太好的,我看了那个离散化的公式,应该是对的,所以我认为时间变化是和攻击离散化有关的,但还没分析出具体公式。还有就是攻击被吃掉的理论,我觉得每次首次攻击的数值都恰好和时间比例相等这是攻击份数被吃掉之后再补上来做不到的,这个可以持续攻击做个测试看攻击数值变不变测试。所以离散化实现攻击数值改变的原理我觉得还待讨论。
作者: GabrielRum 时间: 2013-3-12 00:31
nyningyu 发表于 2013-3-12 00:06
读了很久看懂了。。
(其实看的时候一直在想,为什么暴雪程序设计者会设计这么个浮动的时间间隔呢。。感觉 ...
我又思考力一下,其实很难做出个完美公式,因为暴雪不会这么简单让你把他的程序研究透,所以,一个经验公式就足够了,都是工科生的你懂的。其实,关键就是dps最后变不变的问题,但你的实验方法实现较为困难吧,误差也可能大,所以我想设计个更好的实验应该可行,就可以解决这个问题了,最后就是给出个经验公式,只要能计算实际中涉及的攻速的情况就可以了,至于向外推导,我估计很难,而且目前看实际伤害S大的公式已经很完美了。
作者: Tyche 时间: 2013-3-12 00:33
看起来好眼晕,还是默默的看完了。2.07攻速的我貌似在一个很尴尬节点上啊。
作者: GabrielRum 时间: 2013-3-12 00:43
nyningyu 发表于 2013-3-12 00:06
读了很久看懂了。。
(其实看的时候一直在想,为什么暴雪程序设计者会设计这么个浮动的时间间隔呢。。感觉 ...
回点评,我也比较忙,各种答辩准备,出国神马的,估计测试只能靠L大了,而且我暗黑只玩了100多小时,比较菜了,神马机制都还不太懂,就只能做做数值分析,所以,哈哈,测试是不能指望我了。
作者: GabrielRum 时间: 2013-3-12 00:45
Tyche 发表于 2013-3-12 00:33
看起来好眼晕,还是默默的看完了。2.07攻速的我貌似在一个很尴尬节点上啊。
表示虽然你那个护腕很赞,但还是换基本等量的锻造好,dph高还可能有全抗,目前以我的理论是dps不变的,但还不能完全确定是正确的,所以攻速要控制。
作者: SORAL 时间: 2013-3-12 00:49
本帖最后由 SORAL 于 2013-3-12 00:53 编辑
GabrielRum 发表于 2013-3-12 00:31
我又思考力一下,其实很难做出个完美公式,因为暴雪不会这么简单让你把他的程序研究透,所以,一个经验公 ...
哎,怎木就放弃了呢。
其实你用间隔0.016666s去套,你的公式就成立了。。。你差一点就能接触到真相了。我只是不想剥夺你的快乐,所以一直都不回这个贴子。
以后学术,申请学校都要执着,不要轻言放弃。纯说教,可以无视。
作者: GabrielRum 时间: 2013-3-12 08:49
SORAL 发表于 2013-3-12 00:49
哎,怎木就放弃了呢。
其实你用间隔0.016666s去套,你的公式就成立了。。。你差一点就能接触到真相了 ...
哦,对啊,因为考虑实验误差的话,表象是0.015和0.020,实际就是0.0166s,S大果然有经验,一眼就看出来了,额,这个我今天再去算一下。
其实没有放弃,只是去睡觉了,睡觉的时候还在想暴雪怎么会这么烦的定几个比较糟糕的时间,今天早上就发短信请教学软件的同学,现在已经想明白为什么了,因为时间在程序中的计数越小越困难无法很精确,所以暴雪设置了个最小时间计数单位,以此为离散时间,通过计算出离散时间里的攻击伤害(这个可以很精确),在确定实际时间在哪两个离散时间之间,向下取一个时间计算伤害,通过长时间的计算次数不同补充实际时间缺失,这样保证平均dps在长时间中不变。
先去上课了,谢谢S大指教,今天有时间会完善理论编辑帖子和L大做些测试。
作者: 小四爷 时间: 2013-3-12 11:42
L大不需要攻速的理论应该是建立在“碾压”这个定义的基础之上的,而在精英战或者高MP战斗时,攻速对伤害的提升就是很明显的了
作者: Lina_Inverse 时间: 2013-3-12 11:43
本帖最后由 Lina_Inverse 于 2013-3-12 11:46 编辑
小四爷 发表于 2013-3-12 11:42
L大不需要攻速的理论应该是建立在“碾压”这个定义的基础之上的,而在精英战或者高MP战斗时,攻速对伤害的提 ...
额 其实。。我们讨论的不是这个问题。。
纯粹就是研究伤害机制了。。以前的一些结论可能都要随之修正。
作者: 小四爷 时间: 2013-3-12 11:52
Lina_Inverse 发表于 2013-3-12 11:43
额 其实。。我们讨论的不是这个问题。。
纯粹就是研究伤害机制了。。以前的一些结论可能都要随之修正。
噢噢噢噢0 0~水了好久,终于熬到能在仙赛发帖了,这么快就得到L大回复,开心的要死掉了。。。讨论啥的不重要了,哇哈哈
作者: Lina_Inverse 时间: 2013-3-12 11:56
小四爷 发表于 2013-3-12 11:52
噢噢噢噢0 0~水了好久,终于熬到能在仙赛发帖了,这么快就得到L大回复,开心的要死掉了。。。讨论啥的不重 ...
嘿嘿 恭喜啊~~~欢迎回归仙塞大家庭
作者: 小四爷 时间: 2013-3-12 11:59
Lina_Inverse 发表于 2013-3-12 11:56
嘿嘿 恭喜啊~~~欢迎回归仙塞大家庭
L大最好了,还有红包,么么哒~
作者: 停下脚步 时间: 2013-3-12 12:14
提示: 该帖被管理员或版主屏蔽
作者: 停下脚步 时间: 2013-3-12 12:19
说实在我没看太懂,但冥冥中我感觉你是在解释L大数据的内在原理。
我有个疑问,伤害没半分钟显示一次,黑人的伤害内分钟至少三次。显示和实际是什么关系,是否有遗漏!
作者: GabrielRum 时间: 2013-3-12 13:36
停下脚步 发表于 2013-3-12 12:19
说实在我没看太懂,但冥冥中我感觉你是在解释L大数据的内在原理。
我有个疑问,伤害没半分钟显示一次,黑人 ...
可以通过扫射测试证明,L大已做测试,理论还待完善要结合L大的测试和S大的公式,估计很快我会完全编辑好
作者: J博士 时间: 2013-3-12 13:51
偶痴呆,看不懂鸟~~~
作者: SORAL 时间: 2013-3-12 17:24
2.2 的数学公式怎么用60T得到的?
作者: nyningyu 时间: 2013-3-12 17:27
顶数据贴,写的真详细!
果然最终结论持续dps确实是不变的, 不用太纠结攻速。
作者: GabrielRum 时间: 2013-3-12 17:57
SORAL 发表于 2013-3-12 17:24
2.2 的数学公式怎么用60T得到的?
那个是个例子,就是似乎暴雪设定溢出时间积攒到3T的时候,会补一次伤害(时间计数应该也补),就变成2.2了,当然就样本数据看似乎快了点,当然初值条件不同,还有算法可能有变,但机理应该是正确的,S大你不会又是知道答案在考我吧。
作者: SORAL 时间: 2013-3-12 17:59
GabrielRum 发表于 2013-3-12 17:57
那个是个例子,就是似乎暴雪设定溢出时间积攒到3T的时候,会补一次伤害(时间计数应该也补),就变成2.2了 ...
那你算下积攒到3T的溢出时间需要多少?然后和数据相符合不,结论是不符合。
我的确是知道答案在考你,哈哈。如果你觉得累我就说了。
作者: GabrielRum 时间: 2013-3-12 18:01
SORAL 发表于 2013-3-12 17:59
那你算下积攒到3T的溢出时间需要多少?然后和数据相符合不,结论是不符合。
我的确是知道答案在考你, ...
我投降了,S大说吧,如果哪里错了抓紧改一下,不要都错了啊
不过我觉得应该不会吧
作者: SORAL 时间: 2013-3-12 18:06
GabrielRum 发表于 2013-3-12 18:01
我投降了,S大说吧,如果哪里错了抓紧改一下,不要都错了啊
不过我觉得应该不会吧
额,昨天白说了。。。。
作者: GabrielRum 时间: 2013-3-12 18:07
SORAL 发表于 2013-3-12 18:06
额,昨天白说了。。。。
。。。。。。。。。。。。。。。
好吧,那我就再坚持一下,不轻言放弃
我再仔细研究下你的公式
作者: SORAL 时间: 2013-3-12 18:15
GabrielRum 发表于 2013-3-12 18:07
。。。。。。。。。。。。。。。
好吧,那我就再坚持一下,不轻言放弃
我再仔细研究下你的公式 ...
你好好想想2.2 2,3, 2,4, 2,5, 2,6, 2,7 怎么来的。至少在你的模型里,要给出这几个数据出现的公式。
作者: anniluojie 时间: 2013-3-12 18:30
个人观点 暴雪编程以1/60秒为最小计量单位很奇怪 个人倾向2的幂-- 计算和内存使用角度 或者10的幂 现实意义的角度
随便说说哈
作者: 東陳煥發#3118 时间: 2013-3-12 21:52
废话真多。。dps堆去就是。。
作者: yan0955 时间: 2013-3-12 22:02
看不懂啊,研究人员,你们说地球语言吧!
作者: GabrielRum 时间: 2013-3-13 12:19
SORAL 发表于 2013-3-12 18:15
你好好想想2.2 2,3, 2,4, 2,5, 2,6, 2,7 怎么来的。至少在你的模型里,要给出这几个数据出现的公式。
已有完整思路,不过有些现实中的科研任务要先完成,尽量找时间算一下完善吧。
作者: Ztlight 时间: 2013-3-13 13:13
顶一下技术贴。。。脱离黑人组织好久了,有空再研究
作者: 老白再世 时间: 2013-3-13 13:23
学习了楼主,慢慢看.算的好累
作者: 老白再世 时间: 2013-3-13 13:25
认真学习了.顺便试下签名嘿嘿
[armory]http://tw.battle.net/d3/zh/profile/Headshot-3928/hero/7500440[/armory]
作者: terrywang 时间: 2013-3-13 13:39
anniluojie 发表于 2013-3-12 18:30
个人观点 暴雪编程以1/60秒为最小计量单位很奇怪 个人倾向2的幂-- 计算和内存使用角度 或者10的幂 现实意义 ...
1/60很正常,其实在d2里的frame计数也是这样来的,1/25秒
作者: GabrielRum 时间: 2013-3-13 16:09
anniluojie 发表于 2013-3-12 18:30
个人观点 暴雪编程以1/60秒为最小计量单位很奇怪 个人倾向2的幂-- 计算和内存使用角度 或者10的幂 现实意义 ...
首先编程上是2的幂减一如31,还有就是0-31是没区别的,都是同样的存储空间。目前还有些问题,之后改了再看。
作者: anniluojie 时间: 2013-3-13 18:28
GabrielRum 发表于 2013-3-13 16:09
首先编程上是2的幂减一如31,还有就是0-31是没区别的,都是同样的存储空间。目前还有些问题,之后改了再看 ...
2的幂减一 +1 不过关于存储空间 确实不好说 如果是复杂结构的话都一样 当时随便写的 没细想
作者: SORAL 时间: 2013-3-13 18:40
anniluojie 发表于 2013-3-13 18:28
2的幂减一 +1 不过关于存储空间 确实不好说 如果是复杂结构的话都一样 当时随便写的 没细想
关于Timer谁没事弄2的整数幂啊..不是自己给自己找不痛快木..
作者: anniluojie 时间: 2013-3-13 18:48
SORAL 发表于 2013-3-13 18:40
关于Timer谁没事弄2的整数幂啊..不是自己给自己找不痛快木..
俺当年写测试的时候特喜欢 for i= 0 to 63.... 或者255这样 不能自拔阿/
作者: 浮生掠影 时间: 2013-3-14 00:19
仙塞各种数据帝各种强大啊 哈哈
作者: GabrielRum 时间: 2013-3-24 12:30
更新修正完成,冰法在第二贴,顶一下,在一起方便大家理解
作者: kashamoo 时间: 2013-4-2 04:06
我只能说LZ太牛了~真的是人民公仆~太用心了。赞一个~
作者: xxccdz 时间: 2013-4-2 11:51
NB的一塌糊涂...
欢迎光临 凯恩之角_暗黑破坏神3论坛_夺魂之镰 (https://bbs.d.163.com/) |
Powered by Discuz! X3.3 |