最新最全的完美私服游戏信息网。
您的位置:主页 > 网游攻略 > 内容:《数学算法介绍和装备被动分析》和《编程思路和算法顺序》

《数学算法介绍和装备被动分析》和《编程思路和算法顺序》

时间:2022-12-31 10:08:31来源:网络整理

导读 : 这篇文章会分析综合伤害,相对速度,抗打击时间装备和铭文,建议阅读我之前写的两篇文章《数学算法介绍和装备被动分析》和《编程思路和算法顺序》。的技能多为控制,物理\法术加成不明显。+360防御,护盾和血量都算减伤,就相当于+1000+200+120*level,为了简便,下文的交互界面里,直接算15级,以后会陆续改进,可以调节英雄等级。...

用户名:

微博 用户名: 萌新

这篇文章会分析综合伤害,相对速度,抗打击时间装备和铭文,建议阅读我之前写的两篇文章《数学算法介绍和装备被动分析》和《编程思路和算法顺序》。这两篇分析给出了基础的算法介绍,而本文会运用前两篇文章的结论做出更为准确的推论。

英雄分类

的技能多为控制,物理\法术加成不明显。

由于加成伤害不明显(多为控制或位移),一套带走的可能性非常小,这样就非常依赖平A

在程序中就应该使用(在附件中有源代码),这个函数来进行计算,最大吸血算法也是按照这个函数来跑

可以预见到,攻速,暴击率,暴击系数, 穿透的提升会很有帮助。

的技能多为伤害,物理\法术加成明显, 基本能一套带走,这样就非常依赖技能。

在程序中就要使用(在附件中有源代码),这个函数来算,吸血也要按照这个来算。

可以预见到,物理/法术攻击,技能冷却,穿透的提升会很有帮助

冷却缩短了40%(40%是上限,某些英雄除外如不知火舞30.5%)就意味着,设技能冷却为 cd

那么现在就是 0.6x。 原来单位时间内可以释放1/cd个技能,那么理论上现在就可以释放1/0.6cd= 1.6667/cd个技能,相当与单位时间内技能伤害提高了66.7%

3个技能一套能快速在1秒左右全部释放就属于爆发性(妲己)可以瞬间清理残血英雄降低对方输出单位

3个技能很难再几秒内全数释放(干将莫邪)释放需要瞄准,或者释放时间长。可以考虑吸血,慢慢消磨对方单位血量

这样有cd的武器就要考虑一下,因为每次释放都会有时间间隔,正好冷却了武器被动的cd。

技能伤害不高不低。这时就要考虑技能和平A的比率问题。我们可以假设一个英雄要么处于平A状态要么处于攻击状态,要么处于不能攻击状态(施法读条,释放时间,持续施法)。设冷却时间为cd,不能攻击状态所用时间为t,那么攻击时间 = cd –t。 (先不考虑控制类技能,眩晕等)。设冷却减缩为rcd。rcd [0, 40%/30.5%]。设单位时间为U(这里不能1代替)

单位时间内的施法个数= \frac{U}{(1-rcd)·cd}

(技能不会等法术完全结束才开始计算冷却,而是在按下的一瞬间开始计算)

攻击时间 = 单位时间- 单次施法消耗时间·施法次数

=U - t \cdot \frac{U}{(1-rcd)·cd}

然后我们可以看到"单位时间内的施法个数" 和 "攻击时间" 的比值与单位时间无关

单位时间内综合实际伤害

= 平A实际伤害 +技能实际伤害

=

攻击时间·单位时间内平A实际伤害 + 单位时间内施法个数·单个技能造成的实际伤害

《单位时间内平A实际伤害》和《单个技能造成的实际伤害》在第一篇文章《数学算法介绍和装备被动分析》里介绍过,这里就不反复写了

以上就是单一技能的实际伤害运算。(某些英雄可能会有比较鸡肋的技能以至于没什么使用价值,那么就可以直接算比较有用的技能)

但某些英雄3个技能都比较优质这时情况就需要考虑3技能同时使用的结果(非爆发,技能冷却结束就放),这时候就要用到综合实际伤害公式了。

综合实际伤害

还是设单位时间为U,冷却减缩为rcd

技能1 冷却为cd1,施法后不能攻击时间为t1

技能2 冷却为cd2,施法后不能攻击时间为t2

技能3 冷却为cd3,施法后不能攻击时间为t3

技能1施放个数 = \frac{U}{(1-rcd)·cd_1}

技能2施放个数 =\frac{U}{(1-rcd)·cd_2}

技能3施放个数 =\frac{U}{(1-rcd)·cd_3}

攻击时间 = U - t_1 \cdot \frac{U}{(1-rcd)·cd_1} - t_2 \cdot \frac{U}{(1-rcd)·cd_2} - t_3 \cdot \frac{U}{(1-rcd)·cd_3}

(这个我附上完整的公式,以便研究运算。)

这个公式非常重要,是以后个性化分析英雄的重要公式之一。

单位时间内综合实际伤害:

= 攻击时间 · 单位时间攻击伤害 + 技能1伤害 · 技能1个数 + 技能2伤害 · 技能2个数 + 技能3伤害 · 技能3个数

= (U - t_1 \cdot \frac{U}{(1-rcd)·cd_1} - t_2 \cdot \frac{U}{(1-rcd)·cd_2} - t_3 \cdot \frac{U}{(1-rcd)·cd_3})·物理攻击

× 攻击次数/单位时间1s(速度) × (1×(1 - 暴击率)+ 1×暴击系数×暴击率

×(1 - \frac{\text{物理防御 - 物理穿透}}{\text{600+ 物理防御 - 物理穿透}})

+ \frac{U}{(1-rcd)·cd_1}·(技能1伤害+法伤加成1×技能1加成比率)×(1 - \frac{\text{法术防御 - 物理穿透}}{\text{600+ 法术防御 - 物理穿透}})

+\frac{U}{(1-rcd)·cd_2}·(技能2伤害+法伤加成2×技能2加成比率)×(1 - \frac{\text{法术防御 - 物理穿透}}{\text{600+ 法术防御 - 物理穿透}})

+\frac{U}{(1-rcd)·cd_3}·(技能3伤害+法伤加成3×技能3加成比率)×(1 -\frac{\text{法术防御 - 物理穿透}}{\text{600+ 法术防御 - 物理穿透}})

哇!多么美丽的公式啊!一个简单的公式就涵盖了整个游戏的伤害体系!

很多英雄的有特殊效果如孙悟空,芈月,黄忠,诸葛亮,李白等

(这些英雄当然也可以使用如上公式,但为了找出更加完美的搭配方案,就需要根据不同英雄特别定制最佳公式进行计算)

相对速度分析:

设对方英雄基础速度 = Tv ( )

移动加成速度(鞋子) = Ta ( )

比例加成(铭文)= Tp ( )

比例影响(减速敌方技能或装备)= Ti( )(减速的话填负值, 没有填0)

我方英雄基础速度 = Sv (self )

移动加成 = Sa (self )

比例加成 = Sp (self )

比例影响(加速我方技能或装备) = Si (self )(加速填正值, 没有填0)

敌方英雄的最终速度 = (Tv +Ta)·(1+Tp+Ti)

我方英雄最终速度 = (Sv +Sa)·(1+Sp+Si)

相对速度 = (Sv +Sa)·(1+Sp+Si) - (Tv

+Ta)·(1+Tp+Ti)

比例速度(我方英雄比敌方快/慢百分之多少)

= \frac{(Sv +Sa)·(1+Sp+Si) - (Tv +Ta)·(1+Tp+Ti)}{(Tv +Ta)·(1+Tp+Ti)}

就拿射手和肉为例,鲁班速度360, 亚瑟390

两人都出鞋子+60,鲁班铭文加速10%,影刃加速5%,其他武器减速15%(不详征兆)

鲁班最终速度 = (360+60)·1.15 =483

亚瑟最终速度 = (390+60)·(0.85)=382.5

速度差 = 483 – 382.5 = 100.5 (当然亚瑟也有加速,使用技能后这个结果就会改变)

移动速度对于射手来说非常重要,如果速度快的话还可以风筝对手(边打边跑,让距离处于对方达不到你,你可以达到对手的范围内。)为了平衡性,射手的速度普遍较慢,防止风筝射手的出现。

用法:

假如你的一把武器能提升攻击力5%,或提高防御5%,而另一把能把相对速度提高10%。那么果断要选这个能提高相对速度的装备完美国际2剑灵怎么提高法术防御,哪怕是暂时提高。这样能有效的避免伤害或追击敌方,比起5%的攻击力,10%的相对速度更能扭转战局。

记住是相对速度,不是自身的速度

防御分析:

把血量在3000到12000, 防御在0到1400,每个考虑对手出不出穿透2种(直接穿透,就先在防御里减掉就好了),没有45%穿透时公式如下:

血条护甲综合抗打击加成% = (当前抗打击时间 - 原抗打击时间)/ 原抗打击时间

前两篇论文有详细公式,化简

设血量hp( point),加成血量ha( ),护甲a(armor),加成护甲aa(armor )

= \frac{(hp+ha)·(600+a+aa)}{hp·(600+a)} - 1

在对方有《破甲弓》或《虚无法杖》 +45%穿透, 先减去对方穿透再算45%穿透,公式如下:

血条护甲综合抗打击加成% =\frac{(hp+ha)·(600+0.55(a+aa))}{hp·(600+0.55a)} - 1

这里公式和其他稍有不同,普通攻击伤害减免15%。那么最好的情况是对方全用普通攻击,减免15%。最坏的的情况是对方3个技能连击一套,没有15%减免。

这就是为什么adc即便穿了《影忍之足》也很容易被刺客3连击打爆,因为只有普通攻击可以减伤15%。当然对以普攻为主的英雄有较好的克制作用,性价比超高

更具上面的算法

影忍之足的抗打击加成在(全技能) \frac{600+a+110}{600+a} -1 到(全普攻) \frac{600+a+110}{0.85(600+a)} - 1 之间

反伤刺甲:

(公式还是和影忍之足差不多,这里只考虑物理防御所以没有好坏情况)

抗击打时间提升% = \frac{600+a+420}{0.85(600+a)}

魔女斗篷:

这个问题有点复杂,就目前测算的结果来看,护盾也是要算减伤的。在附件中有如何测算的方法

+360防御,护盾和血量都算减伤,就相当于+1000+200+120*level,为了简便,下文的交互界面里,直接算15级完美国际2剑灵怎么提高法术防御,以后会陆续改进,可以调节英雄等级。

下面感谢由 数据知多少 - 知乎 提供的

交互界面,可以很方便的查找在不同情况下装备对英雄抗打击时间的加成比。

网站://yonge#!///

滑动血条来输入护甲,敌方穿透和血量。

由于中不能实时计算,只能提前算好,所以选择间隔不会太精确,以避免大量数据。我会编一个程序来自定义血量,防御,等级,这样更加精确的查看各类防御装备对抗性的提升,以及自动选取最优装备。目前程序会的idle运行版。)

所有有关程序会放到 (I Wont Tell You)

附件:护甲减伤么?

选取英雄,王昭君,对手鲁班,单人训练,关闭兵线,王昭君拿四个《贤者之书》去抗蓝爸爸或红爸爸伤害,一个格子护盾能抗5下 13.5%的减伤,装备两个《极寒风暴》减伤58.9%,一个格子护盾能抗12下,

5下,一格子/(伤害*(1-13.5%)) = 1.156格子/伤害

12下,一格子/(伤害*(1-59%))= 2.42 格子/伤害

12/5 =2.4

2.42/1.156 = 2.0

虽然误差很大,但是还是能明显看出,护甲对于抗打击时间的影响,一格从原来能抗5下攻击变成了能抗12下。由此得出对于护甲也是算减伤的。如果有不同观点,请设计实验,并列出实验数据

这是class hero里的一个文件,只是为了掩饰算法:

#计算实际伤害
    def real_attack_damage(self,target, with_equips= True, with_runes =True, after_skill=False, kind = "" ):
        """
    
        """

        pd = self.pd
        s = self.s
        r =  self.r
        i = self.i
        pp = self.pp
        pa =target.pa
        ma =target.ma
        hp = target.hp
        pvam = self.pvam
        mvam = self.mvam
        rcd = self.rcd
        if not with_runes:
            #原始数值
            rpd = pd*s*(r*i-r+1)*arm2dam(pa-pp)
            rblood = (rpd)*pvam
            if kind == "物理吸血":
                return rblood
            elif kind == "实际伤害":
                return rpd
        else:
            pd += sum_runes_f(self.runes, "pd")
            s += sum_runes_f(self.runes, "s")
            r += sum_runes_f(self.runes, "r")
            i += sum_runes_f(self.runes, "i")
            pp += sum_runes_f(self.runes, "pp")
            pvam += sum_runes_f(self.runes, "pvam")
            mvam += sum_runes_f(self.runes, "mvam")
            rcd += sum_runes_f(self.runes, "rcd")
        if not with_equips:
            #原始数值+铭文
            rpd = pd*s*(r*i-r+1)*arm2dam(pa-pp)
            rblood = (rpd)*pvam
            if kind == "物理吸血":
                return rblood
            elif kind == "实际伤害":
                return rpd
        else:
            pd += sum_equips_f(self.equips, "pd")
            s += sum_equips_f(self.equips, "s")
            r += sum_equips_f(self.equips, "r")
            i += sum_equips_f(self.equips, "i")
            pp += sum_equips_f(self.equips, "pp")
            pvam += sum_equips_f(self.equips, "pvam")
            mvam += sum_equipss_f(self.equips, "mvam")
            rcd += sum_equips_f(self.equips, "rcd")
            #开始唯一被动计算
            if self.have_the_equip("暗影战斧"):
                pp =pp+ 50 + 10*self.level
            #rpa: real physics armor
            rpa = pa - pp
            if self.have_the_equip("破甲弓"):
                rpa = (1- 0.45)*rpa
            if self.have_the_equip("秘法之靴"):
                mp+= 75
            if self.have_the_equip("痛苦面具"):
                mp+= 75
            # rma: real magic armor

            rma = ma - mp
            if self.have_the_equip("虚无法杖"):
                rma  = rma*(1-0.45)
            if self.have_the_equip("无尽战刃"):
                i +=0.5
            #bpd: buff physics damage
            bpd = 0
            if self.have_the_equip("巫术法杖"):
                bpd +=pd*cent(30) 
            if after_skill and self.have_the_equip("宗师之力"):
                bpd += pd
            if self.have_the_equip("末世"):
                bpd += cent(4)*hp
            if self.have_the_equip( "纯净苍穹"):
                bpd += 60
            pd += bpd
            if self.have_the_equip("影刃"):
                if after_skill:
                    s= s*r +(s+0.5)*(1-r)   
                else:
                    drop = (1-r)**(2*s+1)
                    s = s*drop+ (1-drop)*(s+0.5)
            #rpd: real physics damage
            #rmd: real magic damage
            rpd = pd*(   1-r + r*i   )*arm2dam(rpa)
            rmd =0
            if self.have_the_equip( "闪电匕首"):
                #这里就不考虑法术穿透了,物理英雄不会有的
                if s<2:
                    #rmd: real magic damage
                    rmd += 20*s*(   r*i     +  (1-r)   )*arm2dam(ma)
                else:
                    rmd += 40*s*(   r*i     +  (1-r)   )*arm2dam(ma)
            if self.have_the_equip("红莲斗篷"):
                rmd += 100*arm2dam(ma)
            #重要: after skill 计算一次伤害不算攻速
            if not after_skill:
                rpd=rpd*s
            #brmd: buff real magic damage
            #brpd: buff real physics damage
            brmd = 0
            brpd = 0
            if self.have+the_equip("博学者之怒"):
                brmd += rmd*cent(35)
            if self.have_the_equip("破军"):
                brpd += rpd * cent(15)
                brmd += rmd*cent(15)
            rpd += brpd
            rmd+= brmd
            rblood = (rpd)*pvam
            rd = rpd+rmd
            if kind == "物理吸血":
                return rblood
            elif kind == "实际伤害":
                return rd

在上会附上完整的版本,程序还在调试阶段,过几天会放出来3.0版本。

(I Wont Tell You)

相关推荐:
最新阅览:
推荐:
猜你喜欢: