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

全站通知:

Wiki版标准属性表技术文档

阅读

    

2025-02-17更新

    

最新编辑:踩雷专业户PLUS

阅读:

  

更新日期:2025-02-17

  

最新编辑:踩雷专业户PLUS

来自地下城堡2WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
欣酱是萌欣吖
踩雷专业户PLUS
鲲仑派掌门

Wiki版标准属性表技术文档

前言

  本文作者:欣酱,未经作者允许禁止转载

  本页面内容较为硬核,看不懂也没关系,只需要知道这部分是探讨一个可行的计算属性标准线和出货率,以及相应的资源消耗的办法

  后续会对属性表进行一次较大的更新,以符合本页面办法计算出的属性值

  注意!本页面部分内容可能会与现有的部分大众对于地堡的认知相悖,如果你觉得不对,请用专业有效的办法收集数据并成体系且逻辑自洽的反驳,而不是“我感觉”“我觉得”

  补充:依据新算法模型,算出来的数值部分过于夸张,有数据量不足的原因,这张草稿放这里有需要的自己取用,外面的标准表先不更新。

Wiki版不标准属性表的草稿

  看此表的风险:

  • 你在赌我嫖的时候属性没有记录错
  • 你在赌我嫖的时候既没有欧也没有非
  • 你在赌我的算法没有问题
  • 而事实上他肯定是有问题的还不止一处
  • 你在赌我01234的概率猜得没问题
  • 你在赌我的代码没有bug

  看此表的注意点:

  • 同职业除非体质高,否则取最大值!娜娜体不比女巫高,但线低,那就是娜娜这个模型烂,不能因为模型烂就迁就他,所以娜娜的线要对齐到女巫的线。
  • 而精灵体高,所以自己有自己的线。

100%

  • 友情提示:kurtosis列越接近3.0越正常,只要不是3就说明有问题,至于哪里有问题,无可奉告(摊手手)
  • 表格计算顺序:
    • 统计嫖酒馆结果,取得级均期望和方差
    • 乘293得到日10的期望方差,查Phi表得日10线
    • 去除转职和初始部分,*284/293得月百线
    • 据级均期望和方差瞎猜+0+1+2+3+4
    • 用+0+1+2+3+4和四星五星月百日十线算Loss,调整五星四星线使得Loss取最小。
    • 调整日10线重复上述步骤,直到loss尽量接近预设的值
    • 哦还有个问题,因为某个强迫症的原因,尾数全取0或5,大概影响的资源消耗在10万魂左右的层级

表的一部分

100%

未进行尾数修正的表

100%

代码开源

https://github.com/201220022/Wiki_Standard_Attribute_Table

当前数据集支撑到的精度

  • 已记录4星50属性数量:3408
  • 日十极品线(1%):
    • 30%的线与真正满足定义的数值相差5以上
    • 15%的线与真正满足定义的数值相差10以上
    • 5%的线与真正满足定义的数值相差15以上
  • 日十大极品线(0.01%):
    • 35%的线与真正满足定义的数值相差5以上
    • 22%的线与真正满足定义的数值相差10以上
    • 13%的线与真正满足定义的数值相差15以上
  • 日十镇堡线(0.0001%):
    • 38%的线与真正满足定义的数值相差5以上
    • 28%的线与真正满足定义的数值相差10以上
    • 20%的线与真正满足定义的数值相差15以上
  • 数学的手段只能做到分析计算出的日十线有多少误差,要是有办法知道是哪条线差了、差了多少,早就改了。
  • 镇堡线也就图一乐,1e金币尽力了。

及格线与极品线的定义

  定义1 - 日十及格线 : 0氪玩家使用不小于此属性的冒险者,加上保底魔石、保底环、60-65%饱和度战利品,可以通关的属性。

  定义2 - 日十极品线 : 此职业使用合适的模型转职升级到日10后,日十属性概率分布的前p处的分位点。(p较小)

  及格线是过图的属性要求,游戏中boss越强,及格线越高。而极品线是一个完全不同的概念,仅仅关注模型本身的倾向。从定义本身来说,并没有排除极品线 < 及格线的发生,不过这并不会出现——真有这种情况游戏也就活不下去了。但是我们将会看到极品线和及格线的差值,不会固定在某个数值或者遵循某种比例。

  及格线的定量计算几乎是不可能的,目前主要靠多周目毕业玩家的经验制定。此文档接下来会排除对日十及格线的讨论,仅给出其他各个标准的计算过程。

日十线与月百五星四星线的定义

  上面两个定义已经给出了日十线。

  月百五星线则是截然不同的概念了。因为月百五星多少属性本身并不重要,唯一重要的是日十属性。我们对于它们的定义是:

  定义3 - 月百线,五星线,四星线 : 给定职业、模型、日十线,按照(四星线,五星线,月百线)的分解标准升级,使得升出一个日十过线冒险者的资源消耗期望取得最小值的(四星线,五星线,月百线)组合,称为该职业、模型、日十线对应的四星线、五星线、月百线。

  这三条线的定义的核心在于“资源消耗量最小”,只要能帮助以最小的资源代价拿到日十过线冒险者,就是最合适的线。

  为什么线的指定会与资源消耗量挂钩?以五星线为例,我们用极端值考虑:如果五星线为0,任意的冒险者都被升到月百,垃圾也被浪费资源升到了月百,那么最终升个极品出来之前消耗的资源量是非常大的。而如果五星线为无穷大,所有的冒险者都被杀了,永远都升不出极品,资源消耗量为无穷大。可见,随五星线的增加,资源消耗量期望的变化至少是:先减少,后增加。一个合适的五星线会在这里取得最小值。不过,资源消耗量是由四星,五星,月百三条线共同决定的,需要同时改变这三个变量最终达到最小值。

  下面考虑一种(四星线,五星线,月百线)的计算方式:日十一共升级293次,其中到4星50共126次,到五星60共185次,到月百共284次。使用 \( \frac{四星线-到四星的固定部分}{126} = \frac{日十线-到日阶的固定部分}{ 284 } \)的关系式计算四星线,五星,月百线同理。

  此方法是不合理的,因为它和定义没有任何的联系。并不是按照比例平均分,就能保证资源消耗最小了。不过,这个方案有一定的作用:它计算出来的结果和最终的结果,并不会相差太多。我们在计算时,就是以这个计算作为起点以设置三条线的初始值,然后逐步微调,收敛到最小值的。

  到这里我们发现了一个巨大的问题:月百到日10只有9级,大数定律的保护失效,如果不使用准确的+0+1+2+3+4计算,将会得到非常灾难性的结果。因此我决定做一个trade off,以使用不合理的月百线为代价,换取大数定律的全程保驾护航,同时节省算力用于更好的日十极品线。

  定义4 - 更差的月百极品线 (当前使用):

  \( \frac{日十线-初始属性-转职加成}{293} = \frac{月百线-初始属性-转职加成}{284} \)

  定义5 - 更好的日十极品线 (当前使用): 给定职业、模型,使用当前定义和使用的(四星线,五星线,月百线)的组合分解标准升级,使得升出一个日十过线冒险者的资源消耗期望取得最小值,并且所有职业的最小值相等的线。

  我们使用定义2中的日十线作为调整的开始:

   一般 = 10%出货率
   极品 = 1%出货率
   大极 = 0.015%出货率
   镇堡 = 0.0001%出货率

  计算月百五星四星,并不断调整日十,循环调整,直到:

   一般 尽量接近 300w折合金币损耗
   极品 尽量接近 1000w折合金币损耗
   大极 尽量接近 5e折合金币损耗
   镇堡 尽量接近 500e折合金币损耗

  损耗是指,拉起来一个冒险者本来就要花的部分不算。

分布规律概览

独立性

  公理1 - 独立性 : 《地下城堡2》所有随机结果之间全部都是独立的。

  每一级升级和其他等级的升级没有任何联系,这是一切理论计算的基础。(你如果不同意可以自己收集数据证伪,不过我觉得能不同意的人都不知道需要怎样才能证伪,只会说“我感觉......”)

  推论1 - “滑档”现象 : 越是极品、镇堡的线,5星过线的冒险者月百保持过线的概率越低。

  这是因为五星到月百的结果与之前的升级是没有任何联系的,并不会因为前面五星属性高了,月阶也会加得多。而观察属性表我们会发现,越是极品线,月百线到五星线的差值就越大,而模型成长倾向还是同一个,这就是为什么“极品”的五星月百经常就不极品了。这里极品打引号是因为,五星极品线的定义是按照这个线解雇画的资源少,从来没有说过这个过线的冒险者就是极品了。

  推论2 - 地堡没有垫子 : 冒险者的升级结果和之前的冒险者无关。

分布规律与日十线

  每次升级以一定概率+0-+4,这是一个离散分布。不过,这几百级的升级,数量足够大,其升级结果的总和近似为正态分布。有关系式:

多次升级总体期望 = 升一级的期望 * 升级次数

多次升级总体方差 = 升一级的方差 * 升级次数

  在统计时我们只统计了若干1星到4星50的数据,将这些数据的期望和方差除以126,就得到每级升级的情况,再乘293,就是日十的分布情况了。对于已知期望和方差的正态分布,可以将其标准化后查表计算其分位点(这一句不知道可复制问AI)。日十线就是这么来的,算出分位点之后加上固定部分。

分布规律与月百五星四星线

  考虑到月百五星四星线后,分布规律就复杂了。升到四星五十,此时是一个正态分布,然后解雇了不过线的冒险者,此时这个正态分布的后面一部分被截断了,只剩前面部分,再进行下一次分布,这一来后面就不是正态分布了,就极其复杂了。只能舍弃公式解,仅仅从数值上解出结果。

  给定一组线,怎样计算分布结果?如果拥有每次升级的+0,+1,+2,+3,+4概率,记为p0,p1,p2,p3,p4,这件事情是非常简单的。假设升k级的属性为i的概率为dist[k][i],有递推关系式:

\( dist[k+1][i] = \sum_{j=0}^{4} dist[k][i-j] \cdot p_j \)

  上面的递推关系式需要每级的+0到+4的概率,不过现在只有期望和方差。下面有一个非常重要的基本假设:

  公理2 - 微观对宏观的影响 : 每次升级的+0,+1,+2,+3,+4概率,只要满足下述三条公式,可以任意取值而不影响四星五星月百线的计算结果。

\( \sum_{i=0}^{4} p_i = 1 \)

\( \sum_{i=0}^{4} p_i \times i = 升一级的期望 \)

\( \sum_{i=0}^{4} p_i \times (i - \bar{p})^2 = 升一级的方差 \)

  p0到p4一共5个变量,这里只有3个约束方程,还有两个自由度,我们在一定程度上任意选取了p0到p4的数值进行计算。此操作不会影响计算结果。因为实际上不可能升级一次就记录一次加了几,这样的操作在工程上是兼顾准确率和可行性的。

月百五星四星线的计算方法

损失函数

  记招募到四星、再到五星、再到月阶、再到日阶的资源消耗分别为cost4, cost5,costM, costS,记升级到四星、五星、月百、日十的过线比例分别为rate4,rate5, rateM, rateS。损失函数(升出一个日十过线英雄需要的资源消耗量期望)为:

\( Loss = \frac{cost4 + rate4 \times cost5 + rate5 \times costM + rateM \times costS }{ rateS }\)

  其中的rate就是要使用上一节中的递推公式计算分布、截断不达标部分、求和达标部分的概率和(rate)、再进行下一轮递推,如此往复。

  而cost的计算,又有复杂度在其中。

  招募用金币,升级要魂和纹章还有转职道具,这些资源必须都转化成同一种标准,才能用于计算。需要一个金币-魂,秘银-魂,强者血-魂的兑换比例。这件事情不同人有不同的见解。我们只能大致采用一个相对通用的标准。

  还有一个问题,一个能升的英雄需要多少金币获取呢?这里还涉及一个有用的模型出现的比例问题,不同模型出现的比例还是不一样的。

  我们暂时性的采用了以下参数:

  cost = [52354, 16206, 293096, 928400]

  这一组参数有很大的商榷空间,你如果在此有什么好的参数设置建议,尽管在评论区提出。

参数计算

金币-魂兑换比例

  金币 - 耀魔岩 - 人民币 - 耀源晶 - 魂:按照战力资源自选箱,2500w金币=3600w魂,1金币 = 1.5魂。

  金币 - 沙子 - 红石 - 魂:16w金币 = 1沙 = 20w魂,1金币 = 1.25魂。

  金币 - a礼盒 - 贤者礼盒 - 魂:100w金币 = 200w魂,1金币 = 2魂。

  金币 - 冒险金币 - 冒险魂 - 魂:(52109+63689)金币 + (27791+33967)魂 = (104248+127377)魂,1金币 = 1.46魂。

  打蚊子:魂无限不值钱。

  综上所述,众口难调,调和折中,1金币 = 1.5魂。

金币-月转材料兑换比例

  月转材料可以用红石换,但是不会有人换这个吧~暂时按月转材料不要钱算得。

金币-秘银兑换比例

  材料价格按市场价算,1秘银 = 0.45金币。

金币-强者血兑换比例

  材料价格按市场价算,但是加上市场刷新代价,因为市场卖的太少了。市场一共5个大型5个小型4个材料,卷轴稿子透镜,17选8,3000一抽,抽出来的金币期望6375,和买铁平摊一下,一种商品平摊3187金币的刷商店费用,1血 = (3187+3840)/24 = 292金币。

金币-纹章兑换比例

  专家:1000*0.45+3*292 = 1326金币。

  大师:10000*0.45+6*292 = 6252金币。

  英雄:30000*0.45+15*292 = 17880金币。

  传奇:50000*0.45+25*292 = 29800金币。

嫖一个可升模型的资源消耗

  模型出现概率相对比例假设为:{"乌鸦枪手":1,"云之国刺客":1,"云之国剑士":1,"亚马逊":2,"佣兵":2,"剑士":2,"半身人":2,"卓尔刺客":2,"古森林贤者":1,"圣职":2,"圣骑士"2:,"女刺客"2:,"女剑士"2:,"女巫":2,"巫医":2,"幽灵剑士"1:,"异族":1,"怪盗":2,"战士":2,"星之国剑士":1,"法师":2,"游侠":2,"潜行者":2,"火枪手":2,"白袍贤者":1,"皇家枪手":1,"矮人战士"2:,"神侍":1,"神官":2,"神谕祭司":1,"精灵法师":2,"部落法师":1,"野蛮人":2}

  其中可用模型占比63%。注意到双倍酒馆的概率,27778金币一红,单倍酒馆55555金币一红,列方程:

  27778 + 6000 = 1券 + 0.63可升模型

  10券 + 6000 = 1可升模型

联立消去券,解得1可升模型 = 47093金币

类似地计算单倍酒馆概率

  55555 + 6000 = 1券 + 0.63可升模型

  10券 + 6000 = 1可升模型

联立消去券,解得1可升模型 = 85144金币

cost4: 4星50

  首先要一个可升模型,47093或85144。

  然后升级的魂:(90+642+3560+13230)*0.3 = 5257魂 = 3505金币。

  消耗专家纹章:1326

  转职:30+100+300 = 430

  总计:52354(双倍),90405(单倍)

cost5: 5星60

  升级的魂:44770*0.3 = 13431魂 = 8954金币。

  消耗大师纹章:6252

  转职:1000

  总计:8954+6252+1000 = 16206

costM: 月百

  月转材料:一个材料1红石 = 66666金币,分解返还是1000秘银 = 450金币。所以一个材料按照66216金币计算。

  升级的魂:1020000*0.3 = 306000魂 = 204000金币。

  消耗英雄纹章:17880

  转职:5000

  总计:293096

  不计入月转材料时为226880(if row[col["职业"]] in ["传奇法师", "圣龙将军", "狂战神", "圣枪侠", "教宗", "夜莺", "毁灭者"])

costR: 日十

  日转材料+沙:1200000魂 = 800000金币。

  升级的魂:243000*0.3 = 72900魂 = 48600金币。

  转职:50000

  总计:800000+48600+50000 = 898600

综上所述

  cost = [52354, 16206, 293096, 898600]

寻找最优参数

  不断调整参数、计算Loss,直到Loss不再变小为止。此算法比较原始,有好算法也可以分享。

统计数据

  当前的数据量是严重不足的,我这里只统计了1e多的金币,在计算1%分位点时只能让约70%的数据与真实值的误差小于5。更后面的线误差就更大了。我们会逐步往里面增加数据。这一次主要是做好了自动生成SS表的框架,后面只要增加数据、跑代码就可以。当前的表还是需要人工筛选调整的。