随机分布用电脑的模拟都是很近似的,跟真实的随机有差别。除非大量的实验,我的专业是核工程,有同学在用软 件模拟中子的随机行程,往往需要大量的重复实验。
[QUOTE=Adra;101206]
回顾
A 伪随机分布 是指魔兽争霸III引擎中为某些百分率攻击修正的动力可能性计算。这个概率不是取一个静态百分数,而是开始 设为一个很小的初始值,然后如果连续的攻击修正没有发生,他会渐渐地变大。但攻击修正起作用时,概率会降回 为初始值。这样系统不可能实现一连串的成功修正,也会让整个游戏至少有一个攻击修正,最终概率会超过100 %并“强制”在下一个攻击中实现修正。所以攻击修正的分布不是真正的随即,也即称之为 伪随机分布。 一般来讲,魔兽争霸III中依循这个概率分布的技能概率在最接近的5%的边界之内。
伪随机性技能
下面列出的是现在已知的依循这种随机系统的技能,该表 不包含 激发性技能。
∙致命一击 (例: 幻影刺客 的恩赐解脱)
∙重击 (例: 虚空假面 的时间锁定. 但白牛的巨力挥击 不 遵循这个分布。)
∙粉碎 (例: 地狱火 Flaming Fists, 潮汐 的锚击)
∙减速之球 (例:残废, 漩涡)
∙强化外壳 (例:圆盾,先锋盾)
概率机制
致命一击为例
假设20%的概率发生致命一击。 如果游戏中是真实随机,那么任一个能实现致命一击的单位每一次攻击触发的概率都是20%,不管在过去的攻击 中是否触发了致命一击。一个简单的工具在1到100之间随机选一个整数,如果这个整数小于或等于20,那么引擎会让这个攻击成为致 命一击 (这通常由激发概率技能来构建)。那么从长远来看,这个工具会使攻击成为致命一击的概率为20 %,但不能阻止无尽的连续致命一击,或者相反,在整个游戏中都没有致命一击,尽管这两种情况的概率 很小。为了不让玩家因此抱怨并平衡这种随机的游戏机制,魔兽争霸III的开发者实现了 伪随机概率分布。
并不是每一次攻击出现致命一击的概率都是20%,第一次攻击出现致命一击的概率是5.57%。如果第一次没 出现,那么第二次出现的概率是11.14%。并且如果前两次都不是,第三次出现的概率是16. 71% 。依次下去,每次的概率增加5.57%。但当致命一击出现的时候,下一次攻击出现的概率就会被重置为5.5 7%,长远来看,致命一击的数目除以整个的攻击次数大约就是所说的20%,但是现在很难出现一系列的致命一 击,也很难出现17次攻击没有一次致命一击的情况,但第18次攻击(假设前17次连续不出现致命一击)出现 致命一击的概率是100.26%。结果,游戏让没出现一次致命一击的攻击次数为1/20%=5,最多次数为17。
下面的部分介绍伪随机分布的特殊机制。很长也可能很无聊,除非你喜欢数学或编码。其他人就略过到最后的的总 结部分吧。
概率公式
上面所说的概率技能,魔兽争霸III中的引擎采用了一个初始百分率值,如果攻击修正不实现,那概率就会随攻 击次数线性增加。因此攻击修的实现的概率公式为:
Code:
P(N) = C * N
在这个公式中, P(N) 是在第N次攻击中实现修正的百分率, N 是自上次修正后的攻击次数(最小值1), C是一个初始的常数,也是每次概率增加的数值。因为这是个线性的公式,当N到达一个足够大的值时,P(N) 就会超过1,并且下一次攻击中一定有攻击修正。简单的代数可知这个N就是1/C。C值就跟那个技能的概率有关;在下面的文章中,那个技能所激发的概率成为P(E),就是期望 概率值。
伪随机分布常数
下面显示了两个C值表。 P(E) 是期望概率值, C 是常数值,并且不发生攻击修正的最大连续攻击次数不超过 最大值 N。所以如果致命一击的概率值是45%,连续4次正常攻击有可能发生,但第五次攻击会触发。第一个表有每个5 %倍数的理论C值,是用数值方法计算的(感谢 ICallBotSolo 和 Cano Tolto).
理论概率常数
P(E) | C | Max N |
----- | -------- | ------ |
5% | 0.00380 | 263 |
10% | 0.01475 | 67 |
15% | 0.03222 | 31 |
20% | 0.05570 | 17 |
25% | 0.08474 | 11 |
30% | 0.11895 | 8 |
35% | 0.15798 | 6 |
40% | 0.20155 | 4 |
45% | 0.24931 | 4 |
50% | 0.30210 | 3 |
55% | 0.36040 | 2 |
60% | 0.42265 | 2 |
65% | 0.48113 | 2 |
70% | 0.57143 | 1 |
75% | 0.66667 | 1 |
80% | 0.75000 | 1 |
85% | 0.82353 | 1 |
90% | 0.88889 | 1 |
95% | 0.94737 | 1 |
暴雪并没有采用上面表中的任何一个理论概率常数,但下面会搞清楚这点。下面这个表列出了WC3引擎采用的C 值,相对应真实的概率。这些值由上百万次的攻击实验估测。
真实概率常数
P(E) | C | Max N | P(Actual) |
----- | -------- | ------ | -------- |
5% | 0.00380 | 263 | 5% |
10% | 0.01475 | 67 | 10% |
15% | 0.03221 | 31 | 15% |
20% | 0.05570 | 17 | 20% |
25% | 0.08475 | 11 | 24.9% |
30% | 0.11895 | 8 | 29.1% |
35% | 0.14628 | 6 | 33.6% |
40% | 0.18128 | 5 | 37.8% |
45% | 0.21867 | 4 | 41.6% |
50% | 0.25701 | 3 | 45.7% |
55% | 0.29509 | 3 | 49.4% |
60% | 0.33324 | 3 | 53.0% |
65% | 0.38109 | 2 | 56.4% |
70% | 0.42448 | 2 | 60.1% |
75% | 0.46134 | 2 | 63.2% |
80% | 0.50276 | 1 | 66.7% |
85% | 0.57910 | 1 | 70.3% |
90% | 0.67068 | 1 | 75.0% |
95% | 0.77041 | 1 | 81.3% |
下面的表有一列比较理论值和真实值:
编译概率常数
P(E) | 理论 C | 真实 C | 理论最大 N | 真实最大 N | P(Actual) |
----- | ------------- | --------- | ----------------- | ------------ | -------- |
5% | 0.00380 | 0.00380 | 263 | 263 | 5.0% |
10% | 0.01475 | 0.01475 | 67 | 67 | 10.0% |
15% | 0.03222 | 0.03221 | 31 | 31 | 15.0% |
20% | 0.05570 | 0.05570 | 17 | 17 | 20.0% |
25% | 0.08474 | 0.08475 | 11 | 11 | 24.9% |
30% | 0.11895 | 0.11895 | 8 | 8 | 29.1% |
35% | 0.15798 | 0.14628 | 6 | 6 | 33.6% |
resized40% | 0.20155 | 0.18128 | 4 | 5 | 37.8% |
45% | 0.24931 | 0.21867 | 4 | 4 | 41.6% |
50% | 0.30210 | 0.25701 | 3 | 3 | 45.7% |
55% | 0.36040 | 0.29509 | 2 | 3 | 49.4% |
60% | 0.42265 | 0.33324 | 2 | 3 | 53.0% |
65% | 0.48113 | 0.38109 | 2 | 2 | 56.4% |
70% | 0.57143 | 0.42448 | 1 | 2 | 60.1% |
75% | 0.66667 | 0.46134 | 1 | 2 | 63.2% |
80% | 0.75000 | 0.50276 | 1 | 1 | 66.7% |
85% | 0.82353 | 0.57910 | 1 | 1 | 70.3% |
90% | 0.88889 | 0.67068 | 1 | 1 | 75.0% |
95% | 0.94737 | 0.77041 | 1 | 1 | 81.3% |
上表来看,真实C与理论C在30%以内很接近, 但接下来分开的较大。也就是说,随着P(E)的增大,真实的攻击修正概率远比期望概率小,这是暴雪要改正的 东西。
概率偏差
很明显,总体上的攻击修正实现概率应该尽可能接近P(E)。也就是说,经过无限次连续攻击后,攻击修正的次 数除以总的攻击次数理想值时P(E)。但是魔兽争霸III的伪随机分布实际上的总体概率小于P(E)。在P (E)很小的时候,负偏差并不大,P(E)=30%的时候是个分界点,以后的偏差会有显著的增大:P(E) =80%时实际的概率值大约只有66.7%。这种偏差可能源自以下两种因素:
1.C值位数的省略。能提供的C值并不能是一个无限位数的值,对现行概率公式几乎不可能精确的模拟给出P( E)值的随机分布。简单的计算C值都需要大量的计算时间,考虑到需要将整个概率分布匹配成一个常数。这就是 为什么上面讲的技能都在最近的5%之内;所以也并不计算C值,那将占据大量的CPU资源,开发 者为5%, 10%, 15%, ...95%设计了固定的C值,
这些值代替上面的公式来确定P(N)。这些数位省略的定义值比真实值小,这 也导致了实际概率值小于P(E)。这种影响对大的C值可以忽略,但这不能解释对于大的P(E)值时有大的偏 差。
2. 阶梯P(E)值。暴雪把魔兽争霸修正为阶梯型,不是传统的那种形状,最大的P(E)值是牛头人的粉碎,概率 25%。P(E)在该点以后显著增大不像是个巧合。当暴雪实现了伪随机分布,他们可能只计算了他们要用到的 百分率的C值,其他值只是由这些值简单的估算(例如用一个调整过的指数曲线)。显然他们没有验证这些值是否 有用,才导致了现在的情况。
随机分布
为了让伪随机分布和真实随机分布之间的差别更明显,我们考虑一个P(E)=10%的技能。下面的图显示的是 在上次攻击修正后,第N次攻击修正的概率,这里是真实的随机。要注意在真实的随机分布中每一次攻击发生攻击 修正的概率总是10%,很简单,第N次攻击没有修正的概率是(1 - P(E))^(N - 1) 。对于N=2,概率是0.09:90%的概率第一次攻击没有攻击修正,乘以第二次的概率(对于真实随机机制 这个值是10%)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论