不如_dota吧 关注:1,675贴子:63,895

【修正1】【模拟】剑圣无敌斩,附加普攻数的期望值运算

只看楼主收藏回复

一次无敌斩,到底能附加多少普攻刀数、期望值是多少,很难计算,因为攻击延迟(ReactionDelay)有个0~0.25秒的随机时间,在无敌斩的一刀斩出后,会先触发该时间。如果一次触发的是0,一次触发的是0.25,平时来说也许察觉不大,但对于无敌斩每刀只有0.4秒的间隔来说,就占了最大62.5%的比重~
所以,这里采用模拟war3攻击、模拟dota无敌斩的做法,让电脑帮助“斩”N次,得到总普攻刀数,然后除以N,得期望刀数
模拟除了获得期望刀数,还可以让玩家输入:
1.模拟次数(我的渣电脑一次2W次差不多,再高就卡的比较久了);
2.IAS,即攻速增加,获得该次无敌斩剑圣的攻速;
3.无敌斩等级,一次斩的刀数(技能等级*3)


IP属地:江苏本楼含有高级字体1楼2013-05-04 14:20回复
    在模拟之前,还要确立几个前提,所有模拟都在该些前提下成立。若前提被推翻,则模拟结果失准(dpt-攻击前摇,bat-基础攻击间隔,rd-攻击延迟)
    【已证实】1.攻击生效后,在短时间内无法发动下一次攻击,这个等待时间为(bat-dpt)。连续攻击下,每次攻击前不会触发rd时间,但被下达停止等命令(比如移动单位——无敌斩剑圣“跳跃”),下次攻击就会触发rd时间。
    rd期间若攻击等待时间(bat-dpt)不为0,则(bat-dpt)时间会流逝,等到rd时间结束,若(bat-dpt)不为0,则单位可攻击,否则继续(bat-dpt)时间
    即,攻击等待时间永远不受影响的自我流逝
    【已证实】2.如果rd时间为0,实际攻击前摇为0.4,那么0.4秒后的下一个无敌斩时,能否攻击出手。结果是可以。对于一般的连续时间,我们认为是连续的,所以某事件发生在某时刻的概率为0。但考虑计算机(war3?)的时间是离散的,存在发生在0.4秒的2件事,故需要讨论“能否攻击出手”,使模拟更贴近实际
    【未证实】3.为了获得0~0.25秒的随机时间,用了GetRandomReal(0,0.25)。这里假设war3获取rd时间也是相同机制。
    4.假设剑圣在无敌斩期间攻速不变、不被人为操控(暂停等)或目标特殊状态(无敌等)以影响普攻


    IP属地:江苏本楼含有高级字体2楼2013-05-04 14:25
    回复
      厉害~


      IP属地:陕西3楼2013-05-04 14:35
      回复
        模拟方法
        1.无敌斩
        首先要详细描述出无敌斩施放期间的行为,这样模拟起来才有依据。
        当剑圣施放无敌斩技能,则在发动技能效果后0秒,设置剑圣无敌(各种特效xxx),移动剑圣到目标处(并面向他),给予目标无敌斩伤害,发布攻击命令至剑圣,使剑圣攻击目标;
        然后每0.4秒,重复以上动作(技能等级*3-1)次。在第(技能等级*3)个0.4秒时,取消剑圣无敌(各种特效xxx;排泄xxx)。
        可以看出剑圣无敌斩最后一刀完成时,仍然会无敌0.4秒,并被发布一次攻击命令,所以模拟的时候也要考虑进去
        2.war3普通攻击
        这一块,就是严格按照【已证实】1来。由于每个0.4秒内最多攻击2刀,所以模拟攻击的开始,就是载入上一个0.4秒结束时,剑圣剩余攻击等待时间,并把该时间与RD相比较,取大值。接着拿剩余时间(0.4-大值)与bat、dpt比较,通过运算,得出剩余时间内能打出几刀。最后保存一下这个0.4秒结束时,剑圣的剩余攻击等待时间,以供下次使用
        (具体关键运算代码放在最后)


        IP属地:江苏本楼含有高级字体4楼2013-05-04 14:36
        回复
          各等级无敌斩&不同攻速下【附加普攻数】期望 一览表+图表(修正)




          (点击看大图)


          IP属地:江苏5楼2013-05-04 14:38
          回复
            5L-1,2,3
            左上角为每个攻速和无敌斩等级下的测试次数;横行无敌斩等级相同;竖列IAS相同
            修正报告:
            1.连续测试期望刀数会导致应测得刀数偏差较大【可避免
            创建计时器,让计时器每隔一段时间帮你输入不同的攻速。一开始由于有100个数据需要输出,就用了个偷懒的办法,但发现在300IAS时有的刀数竟然不是整数,这表明出错了。
            经实验结果推测,war3在每隔一段时间内运行大量同一个的函数时,会导致偏差(可能丢失某环,更大的可能是计时器时间不准。比如0.0001秒运行10000次n=n+1,大概0.96x秒就输出了10000,0.96x是计时器开始时间-结束时间)
            避免方法很简单,只能手动一个个输入值,然后记录输出值。
            2.固有误差不可避免
            运行次数虽然有1W次,但毕竟不是每次输出结果都一样,比如运行4次:10000(次数)/80(IAS)/2(技能lv)

            输出了2.579/2.582/2.588/2.586,之前图表上的则是2.578,最大误差在0.01。意味着差别在于,一个剑圣2次施放100下2级无敌斩,可能2次总刀数只相差1刀。


            IP属地:江苏本楼含有高级字体6楼2013-05-04 14:59
            收起回复
              运算代码(每施放一个无敌斩,则开始以下动作):





              IP属地:江苏7楼2013-05-04 15:06
              收起回复
                思考题
                当剑圣的IAS小于-17.5时,2次无敌斩期间必定不能打出普攻
                当剑圣的IAS不小于382.5时,2次无敌斩期间才有可能打出2次普攻
                (为什么?)
                我们可以发现,120IAS时就打出了整齐的整数次普攻,说明120IAS必定只能打出对应的普攻数,那么,当IAS在什么范围时,各等级无敌斩必定只能打出固定普攻数
                (同理,300IAS时也有类似情况)
                全文,完。


                IP属地:江苏本楼含有高级字体8楼2013-05-04 15:13
                收起回复


                  9楼2013-05-04 15:27
                  回复
                    无敌斩还要j做,t都行了。。。


                    IP属地:广东10楼2013-05-04 16:19
                    收起回复
                      一堆英文和高数,我初三没学到看不懂


                      IP属地:广东11楼2013-05-04 16:20
                      回复
                        能看懂5L的第四个图,基本就够了。其它内容的作用仅仅是证明,期望曲线图是完全准确的
                        跟英语没啥关系,代码不放出来,就会有人怀疑/好奇怎么出的结果;高数的话,通篇就看到一个“期望”,这个词可以理解成“虚空假面满级被动,平均攻击几次能敲晕目标”的“几次”


                        IP属地:江苏本楼含有高级字体12楼2013-05-04 16:39
                        回复
                          额……看不懂 就想看结论 可是……结论在哪呢


                          IP属地:浙江13楼2013-05-04 22:14
                          收起回复
                            躺床上看了看,虽然还是不特别懂……提几个问题
                            1,火猫的无影拳的攻击间隔有哪些不同,有那个rd吗
                            2 , 相比之下,剑圣的就是单纯的普通攻击吗,那要不要考虑转身的影响?


                            IP属地:浙江来自Android客户端14楼2013-05-04 23:10
                            收起回复


                              IP属地:广东15楼2013-05-05 02:14
                              收起回复