关于Dota2以及魔兽的伪随机机制的一些简单研究

回顾

伪随机分布 是指魔兽争霸III引擎中为某些百分率攻击修正的动力可能性计算。这个概率不是取一个静态百分数,而是开始 设为一个很小的初始值,然后如果连续的攻击修正没有发生,他会渐渐地变大。但攻击修正起作用时,概率会降回 为初始值。这样系统不可能实现一连串的成功修正,也会让整个游戏至少有一个攻击修正,最终概率会超过100 %并“强制”在下一个攻击中实现修正。所以攻击修正的分布不是真正的随即,也即称之为 伪随机分布。 一般来讲,魔兽争霸III中依循这个概率分布的技能概率在最接近的5%的边界之内

python如何通过已知概率计算出初始概率:

from numpy.linalg import eig
import numpy as np


def get_c(target_pro):
    assert target_pro >0 and target_pro < 1
    C = 0.30210 # initial value of C
    pro = 0.5
    while (abs(target_pro - pro) > 10**-5):
        C = C + (target_pro - pro) / 16
        
        
        MaxAttack = int(np.ceil(1/C))
        ##print C, MaxAttack
        P = np.mat(np.zeros((MaxAttack, MaxAttack)))
        for n in range(int(MaxAttack)):
            if (n + 1) * C <1:
                P[n,0] = (n + 1) * C
            else:
                P[n,0] = 1

        for n in range(int(MaxAttack - 1)):
            P[n,n + 1] = 1 - P[n,0]

##        print P
        EigenValue, EigenVectors = eig(P.T)
        StableState = EigenVectors[:,0].real
        
        StableState = StableState / np.sum(StableState)
##        print StableState
        pro = StableState[0,0]
        
        print target_pro - pro
##        return StableState

    return C

if __name__ == '__main__':
    c = get_c(0.05)
    

具体过程是通过马尔科夫链进行计算的。

你可能感兴趣的:(关于Dota2以及魔兽的伪随机机制的一些简单研究)