WIKI冒险团明确声明不支持涉及代练和账号买卖的现金交易活动。
参与者应自行承担对应后果。

全站通知:

极品英雄升级攻略

阅读

    

2023-02-02更新

    

最新编辑:欣酱是萌欣吖

阅读:

  

更新日期:2023-02-02

  

最新编辑:欣酱是萌欣吖

来自地下城堡2WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
欣酱是萌欣吖
这一定是有毒


  为什么会没数据呢?因为在这次双倍之前,我们(基建组)弄不清楚要统计什么。如果英雄升一级记录一次,升一级记录一次,然后再慢慢处理,这样的过程是多么漫长且枯燥!
  于是,我的研究进入了错误的方向,我试图用计算机自动识别属性,自动统计和处理数字。我没有失败,在双倍的最后一天实现了自动统计。拿着自动统计的结果,我才发现极品线只要有级均和初始,就能计算得非常精确,而不必纠结于p1p2p3。
  事实上,自动统计程序也差点胎死腹中。数学系大佬PB计算出p1p2p3对极品线的扰动非常大,我计算机系差点就不准备继续肝了。现在我们发现,计算出的扰动是因为改变了级均引起的。
  上天眷顾,级均的统计只要记录最终属性,和初始一减,就是几百个数据。这样统计就变成了可能。PB计算得到需要10亿金币,可以给出一张精确的极品表。
  我们的“大数据”虽然远超10e,但是是攻略组富哥十几e的嫖酒馆经验,而没有落实到初始和级均的记录上。现在我们只有用这10个e的经验先出表,然后再结合计算器和10个e的数据,最终完善。

关于极品线

  注:从这里开始,所有的分析只对极品线有效,对及格线无效!
  英雄,魔石,环,说到底是同一个算法。只要理解了就都融会贯通了。

酒馆中的独立同分布

  接下来,我们使用计算机系的方式打开酒馆。不用紧张,嫖酒馆用不到高等数学,但如果你的高中数学的概率部分没学好,这就让我很为难啊......
  摸鱼冒险团对于嫖酒馆的研究,基于独立同分布假设。

独立性

  每一级升级,+0+1+2+3+4的概率都是固定的。不会因为4星多,5星就会加得多;也不会因为4星少,5星就会加得少。
  独立性假设还可以推出,连升10级得概率分布,和10次升1级得分布是一样的。
  如果你对独立性这一点存疑,那么非常遗憾,你需要自己收集统计数据,并利用证明独立性的公式p(xy)=p(x)*p(y),来反驳我们的假设。

同分布

  我们说的同分布,有好几层意思。
  首先,同一个职业,同一个模型,同一个阶位,从1级升到2级的+0+1+2+3+4的概率分布(以后简称分布),和从2级升到3级的分布是一致的。
  其次,比较公认的是,同一个模型,同一个阶位,不同职业,升级的分布一致。
  有一定争议的是,同一个模型,不同阶位,升级的分布是否一致。在接下来的研究中,我们姑且先假定它们一致。

分布规律

一次升级的分布规律

  我们把升级+0+1+2+3+4的概率,分别记为p0,p1,p2,p3,p4。
  显然,有p0+p1+p2+p3+p4=1.
  倘若我们了解了模型每次升级的平均成长,记为average,
  则又有了一条约束式: p1+2p2+3p3+4p4 = average
  也就是说假定级均已知,那么我们有两个公式,还缺3个数据。为什么假定级均已知呢?因为级均是比较容易统计的,用5星的减去初始的和转职的,再除以升级次数,就一下子获得了上百个数据,而只要观察两个数!

多次升级的分布规律

  多次升级,分布满足5项分布,并且要对5项分布求和,计算量超越了数学范畴。计算机可不怕!
  计算机的计算方法是:记升到i级,属性为j的概率为dp[i][j],则
  dp[i][j] = dp[i-1][j]*p0 + dp[i-1][j-1]*p1 + dp[i-1][j-2]*p2 + dp[i-1][j-3]*p3 + dp[i-1][j-4]*p4.
  通过这个关系式,计算机就可以从i等于1星1级到i等于日阶10级,逐步推算概率分布。

对极品的理解

  我们首先要明确极品的概念。只有日10极品,才叫极品。前面再怎么优秀,都是假的。因此,月百,5星,和4星的极品线存在的意义,不是用来说明达到这个线,你的英雄就是极品了,而是一种止损的策略——为了升出来一个日10的极品,需要怎样的止损策略,能够让我们的资源消耗期望最小化。
  这个概念非常重要,我们停顿几秒,好好思考领会




  现在我们用这个理念来考虑表格。能够日10全部加20吗?不能,因为以日10减20减日阶加成为月百线,和让资源消耗期望最小化之间,没有任何联系!
  有很多老玩家对英雄升级有独到的见解。他们提出这样的算法:维持级均一致。用月百线减去五星线减去月阶转职、除以月阶升级次数,这个数值要等于五星线减去四星线减去五星转职、除以5星升级次数,还等于......跟据这个用级均算线的算法,他们算出了全部的极品线。我们收到了不止一份用这个算法得出的表格,看得出来花了很长时间,但是非常遗憾,这么算也不对——因为维持级均要求一致,和资源消耗最小化之间,同样没有任何联系!
  注意这是极品线,我们只讨论毕业嫖级品。及格线的设置,和这里完全不是一套体系。五星及格线的设置标准是什么?应该是月百的时候大概率能够顺利地过娜娜。
  那么,怎样得出极品线呢,这就要先弄清楚资源消耗的问题。

升级成本

  升级成本分为3个部分,嫖英雄花的金币,升级的魂,和转职的部分。我们一一计算。

嫖英雄的金币

  要嫖就是双倍嫖,平时嫖的我可救不了你噢!SS概率0.0072,每个冒险者要嫖200/0.0072 = 27777金币。
  嫖英雄是一码事,能升的英雄是另一码事。如果认为34个模型中有24个模型能用,我们有:
  27777金币 + 6000金币 = 24/34能升模型 + 1券
  10券 + 6000金币 = 1能升模型 + 1券
  联立消去券,解得1能升模型 = 42160金币

升级的魂

  分解返还70%,所以只消耗了30%。升一个月阶100级的损耗,不是102魂,而是三十几万。

转职材料

  转职材料也有返还。所以升4星,消耗的是一个专家纹章;升5星,消耗的是一个大师纹章。

升级成本

  按照1强者血=160金币,1秘银=0.45金币,1金币=1.25魂,1月材料=1红石=10w魂,1日材料=10w魂,可以算出:所有材料折合成魂,
  招募至四星: 59657
  四星至五星: 21566
  五星至月百: 332125+500000
  月百至日十: 1306000
  月百不需要转职材料的职业,不用加那50w.我们把这4个消耗记为cost4,cost5,costy,costr

总成本

  假设一个模型在手,到4星50一定概率不达标分解,保留的概率out4。到5星60,月百,和最终日10极品,保留的概率分别为out5,outy, outr。则每获得一个日10极品,整个过程的消耗是这样的:
  4星部分,1个4星50升出来outr个极品,所以每个outr需要1/outr个4星50。为了拿出1/outr个四星,就消耗了cost4*(1/outr)的魂。
  掏出了1/outr个四星,保留的概率为out4,所以被升到5星的数量是out4/outr,消耗了cost5*(out4/outr).
  同理,月阶部分消耗costy*(out5/outr),日阶部分消耗costr*(outy/outr)。
  总消耗为:cost4*(1/outr)+cost5*(out4/outr)+costy*(out5/outr)+costr*(outy/outr)。
  最终极品的那一个,没有分解。我们不妨把最终极品的那一个的消耗减掉不看。最后你可以自己加上一个英雄的升级代价,现在我们要对比的是极品线的设置,不妨大家都不加这个,看的清楚点。
  总消耗为:cost4*((1/outr)-1)+cost5*((out4/outr)-1)+costy*((out5/outr)-1)+costr*((outy/outr)-1)。

out是多少

  假设4星50,5星60,月百,日10线target4,target5,targety,targetr.
  out4 = 对满足j>target4的j,求和dp[4星50][j]。

资源消耗计算代码

  最终计算代码(c++)如下:初始化

   float out4 = 0, out5 = 0, outy = 0, outr = 0;
   for (int i = 0; i < 300; i++)for (int j = 0; j < 1200; j++)dp[i][j] = 0;
   dp[0][0] = 1;

  1级至4星50:

   for (int i = 1; i <= 126; i++) {
       //为了清楚,去掉了防止下标越界的部分
       for (int k = 0; k <= 4 * i; k++) {
           dp[i][k] = dp[i - 1][k] * p0 + dp[i - 1][k - 1] * p1 + dp[i - 1][k - 2] * p2 + dp[i - 1][k - 3] * p3 + dp[i - 1][k - 4] * p4;
       }
   }
   //代码中去掉了初始和转职加成,计算之后固定的部分加上就行
   for (int i = 0; i < target4; i++) dp[126][i] = 0;      //不达标,分解
   for (int i = target4; i < 1200; i++) out4 += dp[126][i]; //达标,求和得到out4

  后面的同理。最后:

   float ret = cost4 * (1.0 / outr) + cost5 * (out4 / outr) + costy * (out5 / outr) + costr * (outy / outr) - cost4 - cost5 - costy - costr;

极品线计算

  已知极品线,能计算资源消耗了。但是,我们想知道的是什么样的线能使资源消耗最小。
  把上面的代码封装成DP(target4,target5,targety,targetr),要在已知targetr时,求target4,target5,targety,使得targetr尽量小。
  能够遍历全部的target4,target5,targety吗?计算量太大,计算机吃不消。我·采取了贪心算法,让他们自己进化:
  用级均一致做初始化(target我就写t了)

   int ty = (284.0 / 293.0) * tr, t5 = (185.0 / 293.0) * tr, t4 = (126.0 / 293.0) * tr;
   float mindp = DP(t4, t5, ty, tr);

  尝试更改t4,t5,ty,如果获得了更小的资源消耗,就更新。否则结束循环。

   while (1) {
       float curdp;
       curdp = DP(t4 + 1, t5, ty, tr); if (mindp > curdp) { mindp = curdp; t4++; continue; }
       curdp = DP(t4 - 1, t5, ty, tr); if (mindp > curdp) { mindp = curdp; t4--; continue; }
       curdp = DP(t4, t5 + 1, ty, tr); if (mindp > curdp) { mindp = curdp; t5++; continue; }
       curdp = DP(t4, t5 - 1, ty, tr); if (mindp > curdp) { mindp = curdp; t5--; continue; }
       curdp = DP(t4, t5, ty + 1, tr); if (mindp > curdp) { mindp = curdp; ty++; continue; }
       curdp = DP(t4, t5, ty - 1, tr); if (mindp > curdp) { mindp = curdp; ty--; continue; }
       curdp = DP(t4 + 1, t5 + 1, ty, tr); if (mindp > curdp) { mindp = curdp; t4++; t5++; continue; }
       curdp = DP(t4 - 1, t5 - 1, ty, tr); if (mindp > curdp) { mindp = curdp; t4--; t5--; continue; }
       curdp = DP(t4, t5 + 1, ty + 1, tr); if (mindp > curdp) { mindp = curdp; t5++; ty++; continue; }
       curdp = DP(t4, t5 - 1, ty - 1, tr); if (mindp > curdp) { mindp = curdp; t5--; ty--; continue; }
       curdp = DP(t4 + 1, t5, ty + 1, tr); if (mindp > curdp) { mindp = curdp; t4++; ty++; continue; }
       curdp = DP(t4 - 1, t5, ty - 1, tr); if (mindp > curdp) { mindp = curdp; t4--; ty--; continue; }
       curdp = DP(t4 + 1, t5 + 1, ty + 1, tr); if (mindp > curdp) { mindp = curdp; t4++; t5++; ty++; continue; }
       curdp = DP(t4 - 1, t5 - 1, ty - 1, tr); if (mindp > curdp) { mindp = curdp; t4--; t5--; ty--; continue; }
       break;
   }

  待到循环结束时,
  极品线在t4,t5,ty中笑!

极品线计算器

初始,average,p1,p2,p3

  这5个量只和模型有关。
  我们上面的表格还没有应用此计算器——因为它们还没统计出来,我也不确定是多少。
  p4=(average-p1-2p2-3p3)/4, p0=1-p1-p2-p3-p4.
  p1,p2,p3具有初始值average/10,进而p4也等于average/10。这是我个人的猜测。

成本,即cost

  cost4默认59657
  cost5默认21566
  costy没有月转材料的默认332125,要材料的832125
  costr默认1306000
  如果你理解了这一部分,你就可以跟据自己的情况设置cost值,进而由计算器为你量身打造升级线。

线,即target

  targety: 适合自己的才是最好的——如果已经极品了、再难寸进,现在你不用设置为表格的线,可以设置成自己当前的属性+1,也是可以见到量身打造的结果。
  targetr, target5, target4: 极品线模式下,由计算器计算。及格率模式下,自定义4个target,计算器只计算出货率和消耗。

运行模式  :
选择职业类型:
选择日阶职业:
平均初始属性:
平均级均成长:
日十线:
月百线:
五星线:
四星线:
折合消耗期望:
到四星存活率:
到五星存活率:
到月百存活率:
到日十存活率:
=== 精细参数设置 ===
升级加1概率:
升级加2概率:
升级加3概率:
招募至四星成本:
四星至五星成本:
五星至月百成本:
月百至日十成本:

初始与级均投稿

  我们现在不知道初始和准确的级均,发挥不出这个计算器的威力。让我们携手统计,共同出货。评论区投稿统计数据,10个一组,要求3星4星不分解,直升5星60,记录初始和5星60的主属性。

未完待续

  从这里到极品表,中间还需要一些进一步思考,和对计算器的拓展。计算器要拓展到支持双属性计算,并且能够针对不同模型分别给出极品线。然后根据outr*模型数 一致的原则调整日10线,得到表格。具体等到有数据了再说。