WIKI冒险团明确声明不支持涉及代练和账号买卖的现金交易活动。
参与者应自行承担对应后果。
Wiki版标准属性表技术文档
阅读
2025-02-17更新
最新编辑:踩雷专业户PLUS
阅读:
更新日期:2025-02-17
最新编辑:踩雷专业户PLUS
Wiki版标准属性表技术文档
前言
本文作者:欣酱,未经作者允许禁止转载
本页面内容较为硬核,看不懂也没关系,只需要知道这部分是探讨一个可行的计算属性标准线和出货率,以及相应的资源消耗的办法
后续会对属性表进行一次较大的更新,以符合本页面办法计算出的属性值
注意!本页面部分内容可能会与现有的部分大众对于地堡的认知相悖,如果你觉得不对,请用专业有效的办法收集数据并成体系且逻辑自洽的反驳,而不是“我感觉”“我觉得”
补充:依据新算法模型,算出来的数值部分过于夸张,有数据量不足的原因,这张草稿放这里有需要的自己取用,外面的标准表先不更新。
Wiki版不标准属性表的草稿
看此表的风险:
- 你在赌我嫖的时候属性没有记录错
- 你在赌我嫖的时候既没有欧也没有非
- 你在赌我的算法没有问题
- 而事实上他肯定是有问题的还不止一处
- 你在赌我01234的概率猜得没问题
- 你在赌我的代码没有bug
看此表的注意点:
- 同职业除非体质高,否则取最大值!娜娜体不比女巫高,但线低,那就是娜娜这个模型烂,不能因为模型烂就迁就他,所以娜娜的线要对齐到女巫的线。
- 而精灵体高,所以自己有自己的线。
- 友情提示: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万魂左右的层级
表的一部分
未进行尾数修正的表
代码开源
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表的框架,后面只要增加数据、跑代码就可以。当前的表还是需要人工筛选调整的。