最后再说计算方法,
首先用一个二维变量X=(x1, x2)来表示在某次调谐后,以经开出的声骸的情况,其中x1表示暴击词条数,x2表示甜品词条数,需要确定一个函数f(X),它会把每个状态与这个状态上的最低抛弃时间作对应,实际上f(X)就是我们的策略,之所以计算出来是一张3×(b+1)的表格因为它正好可以用来表示所有X取值上的f(X)。
因此接下来的问题就变成了,在已知f(X)的条件下,怎样求出,在每强化一个声骸的时候,分别在开出第1,2,3,4,5个孔后抛弃该声骸的概率,也就是qn,n取1到5的整数,当你得出qn之后,用1-q1-q2-q2-q4-q5就得出了这个声骸毕业的概率,那么平均每毕业一个声骸所付出的总代价就是
Loss=(q1*cost1 + q2*cost2 + q3*cost3+q4*cost4 +q5*cost5)/(1-q1-q2-q2-q4-q5),其中costn表示的是在开第n个孔之后抛弃该声骸的代价,也就是从0级升到第5n级所总共消耗的经验/贝币,或者是开n个孔所消耗的开孔器,以及抛弃这个声骸所失去的胚子(就是1)。
现在介绍怎样求出qn,对于每次升级来说,要做两件事,
1,在游戏内抛出骰子,获得一个新的词条,这可能会使X发生改变,如果本身讨论的就是当前回合处在每个X上的概率p(X),那么这一步操作就会使p(X)发生变化,也就是说,这一步会对每个p(X)应用一次状态转移矩阵,遗憾的是它不是时齐的,对不同的n来说状态转移矩阵也不一样,X=(s, t)向右移动一格的概率是(a-t)/(13-n),或者当它右边没有点的时候是0,向下移动一格的概率是(2-s)/(13-n),或者当它下面没有点的时候是0,用1减去这两者就是它保持不动的概率,这样你就可以求出每回合的状态转移矩阵Rn
2,在获得词条后,根据我们定好的规则,也就是通过比较当前回合数n与X上对应的最低抛弃时间f(X),决定是否要抛弃位于X的声骸,这相当于对p(X)应用一次过滤矩阵,让它的每个元素乘以1或者0,是1还是0由n和f(X)决定
当第二步结束的时候,你会发现p(X)的总和变少了,那是因为有一些声骸遭到了抛弃,因此在第n回合抛弃声骸的概率就等于p(X)的总和变少的部分,这样就顺利求出了qn。
所以总的来说,需要做的事情就是,先枚举出所有的策略函数f(X),把它放进一个M*3*(b-1)的numpy数组里,M表示的是合法的策略的总数(枚举的过程其实也有一点小技巧,需要提前排除掉一些冗余或矛盾的情况,否则暴力枚举的话当b等于3的时候你的电脑会遭不住),然后求出每个回合的状态转移矩阵R,也就是5个3*(b-1)*3*(b-1)的数组,再求出过滤矩阵Q,它是5个M*3*(b-1)的数组,最后再写出初始状态的p(X),其实也就是除了(0,0)这个点是1以外其它都是0,但是需要把它写成一个1*3*(b-1)的数组方便后面的计算,这样就可以用上面说的方法计算出qn了,计算结果应该是5个M维的数组,最后再应用到三种不同的costn,也就是上面提到的三种资源在第n次谐调后抛弃一个声骸的消耗代价,得到一个3*M的数组,这其实就是最后的结论了,也就是我们想要的代价函数。针对这个代价函数,你可去找到它们每一行的最小值,从而得出在只考虑一种资源时的最优策略,也可以从里面排除掉存在绝对上位替代的方案之后,把剩下的少量方案拿出来用肉眼做比较,这两者的结果我也都以表格的形式放在楼上了。