回顾
伪随机分布 是指魔兽争霸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)
具体过程是通过马尔科夫链进行计算的。