欢迎光临散文网 会员登陆 & 注册

【原神】暴率 : 暴伤 = 1 : 2为最优?完全错误!编程穷举带你目睹最细结论

2021-04-06 00:43 作者:Louis翔  | 我要投稿

说明

1:2这个结论在我看来是极不准确的,于是才有了这次编程穷举

好吧,其实是这个游戏太长

此图便是所谓1:2的由来:

1:2的由来

此推导通过引入“资源单位”的概念,以“主词条最高是0.466攻击力、0.311暴击率或者0.622暴击伤害”为依据,定义“一个资源单位(记作M)”:

1 M = 0.015攻击力 = 0.01暴击率 = 0.02暴击伤害  (就很像数学上的一种消元方法)

前提假设:一名角色最多拥有S个M,即资源是有上限的

若暴击率 = x , 暴击伤害 = y ,则有 x/0.01 + y/0.02 = C  (即有C个M是与暴击有关的)

2x + y = K (K为常量)

于是EX = a [1 + x (K - 2x)]

由二次函数知识可得: x = K/4    y = K/2  时 EX 最大。

之后,再考虑余下的(S - C)个资源单位的分配

在这个算法中,我们忽略了很多问题:

1. x是不能超过1的,x可能取不到K/4,这种算法并未对x的定义域做出限制

2. 百分比攻击的效用是受白字影响的,是无法用来定义单位资源的

3. 风伤作为一个独立乘区,其效用非常大,该算法是忽略了的


不得不提的是,在米游社有大佬对这种算法进行了优化,其作者并未给出结论,仅是让大家作为参考、提供思路,笔者才疏学浅,需要大二才能看懂,无法向大家进行更深层次的解析,深感抱歉。

但以笔者大一的修为,编程穷举亦能解决。耗时3天,耗资100大洋,头发数根,若能得到各位老婆三连支持,笔者将不胜感激。

若想要所有数据、程序用作学习、引用或以此为根据指导自己的圣遗物、武器搭配,请私信联系。

明码标价,只要2元,童叟无欺。


摘要

本算法将以80级已突破的携带90级武器为例,计算风伤,忽略技能倍率、元素抗性,毕竟只是多乘一个系数(天赋999时,第一下低空是5.7,高空是7.125),此外,因为大家都没见过魈堆精通,所以不考虑精通。

至于圣遗物,考虑二风二角斗士的buff,因为四件套对风伤没有加成的。

主词条的选择具有多样性的圣遗物,比如:攻击杯和风伤杯;攻击头、暴伤头和暴击头。

(ps:up我觉得充能才是永远的神,但此例考虑充能沙就太难了,所以只考虑攻击沙)

约定:以G表示数值攻击力BG表示百分比攻击力BL表示暴击率BS表示暴击伤害F表示风元素加成

(不同乘区,颜色不同)

暴击率最高为1

武器暂时只考虑90级精一决斗、黑岩(被动满启动)、西风、流月、千岩、试做buff叠满时的伤害,之后会首先排除西风、流月、试做,详见正文。

因为匣里是加精通的,不考虑;

五星武器过于bug,而且平民玩家一般只有一把,不用做选择,不考虑,且根据四星武器的情况大概也能大致做出选择。

列表内容及其含义:

某圣遗物副词或武器属性 =

 [数值攻击力(G),百分比攻击力(BG),暴击率(BL),暴击伤害(BS),风元素伤害(F),备注]

(若只想看结论,请跳过程序部分)

程序部分

人生苦短,我用python

一、将90级精一武器的属性输入列表:

在输入的过程中,我们便可以排除西风、流月针、以及试做,因为其没有与千岩一战。而决斗之枪和黑岩刺枪则与千岩长枪有较大的区别。

二、生成所有圣遗物副词条:

咱每次强化都只取二三档的平均值,太离谱46.8%暴伤副词条不在考虑之内

说明:所谓二三档是指强化圣遗物时副词条提升的量有四个档(详见CV8098960

关于初始词条:咱只考虑了4词条,初始词条相当于没有副词条的圣遗物强化新增了4个词条,初始档位和强化的提升档位是一样的。

三、生成圣遗物:

CT 表示 词条

其他位置的圣遗物也类似以这种方法生成,同一位置的所有圣遗物放进同一列表中,即某圣遗物是某圣遗物列表里的一个元素,类型为list,它其中的元素包含了主词条和副词条。

四、定义计算面板的函数:

statistics是面板属性的意思

输入武器、五个圣遗物、杯子和冠的类型返回总面板级对应的圣遗物搭配,其中总面板的数值攻击力只包括圣遗物提供的数值攻击力,不包括角色和武器提供的白字攻击力。

第3行的i0指的角色自带0.05暴击率,0.5暴击伤害,圣遗物套装效果0.18百分比攻击,0.15风元素伤害加成。

并通过条件语句保证暴击率不超过1

返回的sta为:

[[[1号位],[2号位],[3号位],[4号位],[5号位],[总面板,'杯子类型和头类型']],[和上一项一样],[和上一项一样],……]

六、定义伤害函数:

dam指伤害

返回的result为:

[[sta,dam],[sta,dam],[sta,dam],……]    #dam的类型为float,sta是一个二维列表

七、不同武器计算不同圣遗物类型的伤害期望:

(以决斗为例,黑岩、千岩同理)

倒数第三行插入标注

得到的result是

[[[[1号位],[2号位],[3号位],[4号位],[5号位],[总面板]],'武器',dam],[和上一项一样],[和上一项一样]]

八、以伤害为依据从大到小排序:

九、删除圣遗物不同但面板相同导致的伤害相同的元素;

十、定义一个函数,将副词条的属性汇总成一句话(因为没有必要把所有副词条分开说):

同时,保留两位小数

此时的结果result1中的一个元素是

["圣遗物提供x数值攻击力,x百分比攻击力,x暴击率,x暴击伤害,x元素伤害加成,总面板为[xx, xx, xx, xx, xx, 'xx杯和xx头']", '武器名', 伤害期望]

十一、输出为txt:

结论

得到了36638组数据

第一页:(每页34行)

第一页的所有结果的选择均给到了千岩长枪和风伤杯

毕竟千岩白字565,四璃月阵容还有55.6%的物攻加成,12%的暴击率加成

暴击率 : 暴击伤害 =  1 :2.2039

1:2这种说法的误差接近10%

第一页的两个数据

至于头的选择则是平分秋色

来到第二页

第二页

第二页则是花样繁多

暴击率 : 暴击伤害 =  1 :2.3164

1:2这种说法的误差约为15%

我们能清晰的看到一些堆百分比攻击的(红色)

一些小小赌狗(蓝色),虽然人家有八十几的暴击率,但比第一页的几乎满暴要低很多

第二页的最后一个的期望已经比第一低了200了,乘上倍率(低空5.7)已经低了1140了。

第三页:

第3页的一个较为离谱百分比攻击

第三页冠的选择依然没有定论

但出现了几个百分比攻击离谱的搭配

第四页:


第四页首现黑岩刺枪(叠满buff状态下)

此外,第二三四页均有一些歪了一次小攻击的

第N页:

第五页首现一个歪了两次小攻击的
第255行的对比之下的小小赌狗,80暴击率
第256行出现一个百分比攻击200%的

此时伤害已经降低了428 * 5.7 = 2440

攻击头在582行站了起来,没有跌出前600


此时伤害已经降低了3739

决斗在1180行迎来首秀

因为决斗非常容易导致满暴,所以数量少。

决斗枪前三搭配指定搭配暴伤头

然而,这个排位的千岩圣遗物的小攻击都已经歪到430去了

攻击杯的出现已经是10581行了
31898行最后的风伤杯,下限要比攻击杯高一些

最后一页:

全歪的小攻击,一枪仍有35967

这个故事告诉我们,只要咱升的是攻击类,咱们都有光明的未来。

由于咱假设的都是不算歪的,所以伤害都是比较离谱的,这里得到的绝绝绝大部分情况都已经可以称得上毕业了。

介于此,笔者截取了伤害为毕业60000,即期望值是60000/5.7 = 10526;伤害为略毕业50000,即期望为8771的部分;小毕业40000,即期望7017部分分析

注意:这里说的是期望伤害为这么多,不是暴击的伤害;其实也到差不差,毕竟暴击率高嘛。

60000:

暴击伤害和暴击率的比分别是2.3、1.72、4.68、2.83、2.33

与1:2大相径庭

50000:

60000与50000之间差了14695行,是所有数据的40%

暴击伤害和暴击率的比分别是3.14、3.53、3.34、5.75、2.08、5.53、2.68、1.25、2.9、6、3.3

依旧与1:2大相径庭

40000:

35267行,与50000档相差11368行,跨过了总行数的31%


暴击伤害和暴击率的比分别是0.95、4、1.5、0.93、6、4.2

依旧与1:2大相径庭

总结

以我的结论来看,1:2对追求极限的普通人来说最优是完全错误的。

当然,在究极毕业开大第一下便有72583的左右的“极限”期望伤害时(笔者的算例中每一次强化都是取的平均档,也就是没有出现46.8%暴伤这样的离谱圣遗物)1:2.2左右是最优选择,与1:2较为接近。



改进空间

1.笔者得到的最终数据中,后半部分出现了很多小攻击歪满的圣遗物,这在现实中是不会有人去把圣遗物小攻击歪满的。可以考虑在生成圣遗物时设定必歪非攻击词条的次数。这样可以得到更低伤害时的面板数据。

2.算法优化空间巨大,因为笔者python只学到第四章,所以还不会传说中的“动态规划”“剪枝算法”,结果就是这个程序跑起来巨痛苦。

3. 五星武器中和璞鸢启动过慢、护摩受生命影响,受限于硬件等因素,无法考虑。

后话

本文耗费了笔者清明节3天假期,程序初成时在自己的i7 16G内存的电脑上跑了一次,提示memory error,开20G的虚拟内存又跑了一次,依旧如此,开100G虚拟内存跑了一晚上,第二天起床半小时后虚拟内存再次占满,电脑直接重启。

本来想放弃了,但想起了“现代信息科学技术概论”课上讲的大数据和云计算,就想着放云上跑一跑。

但由于才大一,就没法用自己学校的云,只好选择了阿里云。

清明假期的第二天,体验了一下阿里云注册送的7天4G内存服务器,果断占满。

于是充了115租了一个16核128G内存的,6元一个小时,好贵。

但快是真的快

10分钟不到跑了178行,15分钟就把我最后的bug发现了。

对比一下5元一小时的网吧,真的良心价。

这里BB一下,不要去租什么云电脑云游戏了,直接阿里云租服务器,多棒啊。服务器也有windows系统的,延迟也很低,打字基本感觉不到的延迟,浏览器就可以用,跟4399开全屏似的。

回归正题,bug跑出来的时候,内存已经占到95%了,这时连排序那一步都还没有到。

直接升级了24核198G内存的服务器,一小时8块多。

一不小心选的Linux系统的服务器,命令行操作根本不会。但凭借我在cmd里pip的经验,我还是打开了服务器的python3。

用了一天时间修bug,完善,优化输出结果,学习如何把结果输入文档,如何从服务器把文件下载到本地…………到了睡觉的时候,看了一下别人写的1:2是如何算出来的,意外发现了我没有加角色初始便有的0.05暴击率和0.5暴击伤害!!!

有点绝望,主要是服务器有点小贵,但没办法,程序要用160G的内存。

于是为了加上这点暴击,又是一顿暴改。因为我不会自动关闭服务器,如果让服务器跑着去睡觉的话,那钱包就会哭泣,所以等到了第二天。

我终于得到了结果,但发现风伤算了两次,改!

没法得到圣遗物的面板,只能得到总面板,改!!

有错别字,改!!!

当我用python改txt里的错别字时我绝望了(细心的你一定发现了我的图片前面几张的“暴”字写成“爆”了),我傻乎乎地用read(),replace(),无限报,全然忘记了txt阅读器就有的对文本进行批量修改地功能!!!我是憨憨。


既然都看都这儿了,求给个三连吧——

当然了,如果你对我的数据感兴趣,想要用数据给自己的魈老婆搞一套优质的圣遗物,欢迎私信,明价2元

【原神】暴率 : 暴伤 = 1 : 2为最优?完全错误!编程穷举带你目睹最细结论的评论 (共 条)

分享到微博请遵守国家法律