屠龙宝刀,点击就送:10分钟教你学会装备强化计算
必须在开篇解释一下,工具是服务于设计目标的,写作本篇的目的,只是希望能帮大家节约工作时间,减少计算量,而并非鼓吹工具的重要性(但如果有同学因此喜欢上mathematica,我还是很高兴的);后续将整理一些常用概率、统计公式或是其它可被数值设计工作使用的基础知识。
某游戏有一种稀有武器——屠龙刀,屠龙刀可以强化到10级(初始1级),对应的强化规则如下:
等级 | 成功等级 | 失败等级 | 成功概率 | 失败概率 | |
1→2 | 1 | 2 | 1 | 0.7 | 0.3 |
2→3 | 2 | 3 | 1 | 0.6 | 0.4 |
3→4 | 3 | 4 | 1 | 0.5 | 0.5 |
4→5 | 4 | 5 | 2 | 0.4 | 0.6 |
5→6 | 5 | 6 | 3 | 0.3 | 0.7 |
6→7 | 6 | 7 | 4 | 0.25 | 0.75 |
7→8 | 7 | 8 | 5 | 0.2 | 0.8 |
8→9 | 8 | 9 | 6 | 0.15 | 0.85 |
9→10 | 9 | 10 | 7 | 0.1 | 0.9 |
求得到一把+10的屠龙刀所需的强化次数
这个问题,涉及到随机过程——马可夫过程的计算,步骤较复杂,容易出错。相对于这个计算和学习的成本,其应用场景又较单一,一般仅用于装备强化或是占星猎命。
但这个问题又必须有一个解决的方法,无论是用于面试还是满足项目的实际需求。通常,大部分数值策划,会选择编写VBA进行模拟运算,少部分人使用excel矩阵运算。前者通常不便于复用(少部分vba达人可以写出较通用的代码),后者要求具备一定的数学功底。
于是,我推荐大家使用mathematica来解决这个问题。解答步骤仅3步,完整解答如下(详细步骤及解释见下文):
STEP1:
列出状态转移矩阵:
STEP2:
在Mathematica中读取表格数据:
xlsxPath= "C:\\Users\\Administrator\\Desktop\\屠龙刀强化.xlsx";
m =Import[xlsxPath, "Data"][[1]][[16 ;; 25, 2 ;; 11]]
STEP3:
定义一个马尔科夫过程:
markovProcess = DiscreteMarkovProcess[1,m];
一句话的计算:
Mean[FirstPassageTimeDistribution[markovProcess,10]]
Mean用于计算分布的期望值
FirstPassageTimeDistribution是求首次通过指定状态的时间分布的函数,接受2个参数:马可夫过程和最终状态(这里的最终状态是10,)
计算如下:
也可以求出在各状态的停留次数(1~9):
在定义了马可夫过程之后,也可以进行模拟,如图模拟了10个分别强化10次的过程:
可以统计一下1000把屠龙刀分别强化10次后停留等级的分布:
也可以计算100次强化到+10的概率:
还可以计算每个等级不同的花费下,强化到+10的总费用,或是指定总费用,到达各等级的分布等等,有兴趣的同学可以自行研究。
揭露游戏圈现实的打油诗 ,读到第几句你哭了
游戏这个行业
干久了
爹妈认为你不孝
总是忙
亲友觉得你不亲
少有时间来往
朋友觉得你很装
经常不联系
未婚的以为你有问题
已婚的以为你有外遇
离婚的以为你有目的
其实我们只是
努力工作,养活自己
晚上下班后
要是同学朋友中有在做游戏的
那就请他们吃个饭吧
反正他们也
去不了……
近期热文