随机数

来自PRTS
跳转到导航 跳转到搜索
这个页面或章节尚在编辑中。
请注意,部分内容可能尚未完成或存在错误。您也可以编辑页面帮助我们完善内容。
这个页面或章节尚在编辑中。
请注意,部分内容可能尚未完成或存在错误。您也可以编辑页面帮助我们完善内容。

随机方式

骰子(Dice)

当系统需要“判断一个概率”时,通常使用一个特定的随机数生成器——一枚虚构的“百面骰子”来进行概率判定,其使用类似于《克苏鲁的呼唤》(Call of Cthulhu,简称COC)规则中的检定逻辑(本页面将沿用这一称呼):

随机生成一个0.0~100.0之间的浮点数(不包括100.0),若 该数值 < 概率×100,则视为通过(成功);反之则视为不通过(失败)。

  • 明日方舟中的骰子仅以数值作为检定结果,不包含额外的“大成功”/“大失败”规则。
  • 游戏中大部分以“X%”标注的概率均为“进行一次骰检定,若成功则...”的逻辑,其中包括但不限于概率闪避(如贝洛内)、概率晕眩(如)、概率格挡(如星熊)、概率回费(如齐尔查克)等。
※例:贝洛内拥有80%概率的闪避效果(也即检定成功的阈值为80)。当其受到合适的伤害时,他会进行一次骰子检定。
假设“骰子”的结果为82.0,82.0 > 80,检定失败,继而导致闪避不触发;若结果为20.3,20.33 < 80,则检定成功,继而触发闪避效果,将此次伤害闪避(若可能)。
※部分不标注“X%”的事件也存在使用骰子检定的情况。

丢骰子属于一次取随机数行为。因此在代理作战中如果两个取骰子的事件顺序互换,其结果也会发生互换(详见#随机数轴)。

  • 概率为0时为特殊情况:此时将不会尝试投掷骰子,直接视为检定失败,因此不会占用随机数。

伪随机分布式骰子(DicePRD)

伪随机分布(Pseudo Random Distribution),简称 PRD,是一种确保一个事件的概率不会过度连续发生,也不会过度连续不发生的算法。

其原理简单来说就是“依照连续失败的次数,增加成功的概率”。

游戏中存在两种伪随机分布式的随机数生成器,且都被称为 DicePRD,因此此处以使用者为区别进行解释。

虽然名字也叫“骰子”,但伪随机分布式骰子的算法是复合的,其实际占用的随机数数量会根据算法的不同产生变化。

澄闪式DicePRD

可能是为了确保天赋不会频繁连续触发,同时也不至于始终触发,游戏内为澄闪的第一天赋自爆概率设计了一套伪随机分布式随机数,它具有以下参数:

  • 初始概率:即首次丢“骰子”时的概率,单位为100%
  • 累加概率:即每次失败时累加的概率,单位为100%
  • 保底次数:即连续失败即将达到一定次数后,必定成功的保底机制
  • 连续失败次数将记录在使用 DicePRD 的单位身上(每次失败时+1,成功时归零)

每次遇到调用此 DicePRD 的事件时,会执行下列计算:

  • 若 连续失败次数+1 ≥ 保底次数,则跳过后续计算步骤,直接判定成功。
  • 否则,计算 实际概率:\(\text{实际概率}=\text{初始概率}+\text{连续失败次数}\times\text{累加概率}\)
    之后以实际概率,使用骰子进行一次检定
    ※特别的,如果 实际概率 ≥ 100%,也不会使用骰子检定,直接判定成功。

作为用例参考,在澄闪的例子中:

  • 初始概率 及 累加概率 = 0.015
  • 保底次数 = 40
  • 使用 DicePRD 的单位 = 自身
  • 调用事件 = 浮游单元攻击时

卫戍协议式DicePRD

在卫戍协议:盟约 下半期中,可能是为了确保一些概率不至于低到一整局无法触发,游戏内为【叙拉古】盟约的再部署概率使用了一套新的伪随机分布式骰子。该骰子也被用于新版的【不屈】盟约。

它具有以下参数:

  • 期望概率:即 DicePRD 最终希望给玩家带来的事件发生的宏观综合概率
  • 基础概率:使用乘以100随后就近取整后的期望概率进行表格查询,使用表格中对应的值作为计算用的基础概率
  • 连续失败次数将记录在全局黑板上,在同一场战斗内的不同干员、不同玩家间互通(每次失败时+1,成功时归零)

每次遇到调用此 DicePRD 的事件时,会执行下列计算:

  • 根据预设对照表,以期望概率为基准获取要使用的基础概率
期望概率与基础概率对照表
期望概率(就近取整至1%) 对应的基础概率
0 0.0
1 0.00016
2 0.00062
3 0.00139
4 0.00245
5 0.0038
6 0.00544
7 0.00736
8 0.00955
9 0.01202
10 0.01475
11 0.01774
12 0.02098
13 0.02448
14 0.02823
15 0.03222
16 0.03645
17 0.04092
18 0.04562
19 0.05055
20 0.0557
21 0.06108
22 0.06668
23 0.07249
24 0.07851
25 0.08474
26 0.09118
27 0.09783
28 0.10467
29 0.11171
30 0.11895
31 0.12638
32 0.134
33 0.14181
34 0.14981
35 0.15798
36 0.16633
37 0.17491
38 0.18362
39 0.19249
40 0.20155
41 0.21092
42 0.22037
43 0.2299
44 0.23954
45 0.24931
46 0.25987
47 0.27045
48 0.28101
49 0.29155
50 0.3021
51 0.31268
52 0.32329
53 0.33412
54 0.34737
55 0.3604
56 0.37322
57 0.38584
58 0.39828
59 0.41054
60 0.42265
61 0.4346
62 0.44642
63 0.4581
64 0.46967
65 0.48113
66 0.49248
67 0.50746
68 0.52941
69 0.55072
70 0.57143
71 0.59155
72 0.61111
73 0.63014
74 0.64865
75 0.66667
76 0.68421
77 0.7013
78 0.71795
79 0.73418
80 0.75
81 0.76543
82 0.78049
83 0.79518
84 0.80952
85 0.82353
86 0.83721
87 0.85058
88 0.86364
89 0.8764
90 0.88889
91 0.9011
92 0.91304
93 0.92473
94 0.93617
95 0.94737
96 0.95833
97 0.96907
98 0.97959
99 0.9899
100 1.0
  • 计算 实际概率:\(\text{实际概率}=(\text{连续失败次数}+1)\times\text{基础概率}\)
    之后以实际概率,使用骰子进行一次检定

作为用例参考,在【叙拉古】盟约的例子中:

  • 期望概率 = 3%(这使得基础概率 = 0.00139)
  • 首次触发事件(【叙拉古】6人盟约激活情况下,【叙拉古】盟约/【调和】盟约干员造成普通伤害)时,有0.139%概率通过检定(造成真实伤害与恐惧效果);检定未通过情况下,概率增加为0.278%。
  • 后续每次检定失败都将再增加0.139%概率,直至检定成功时,概率回落至初始的0.139%。

随机整数

除了骰子以外,游戏内还存在许多概率分布并不能直接以100整数分割,或概率权重不平均的随机数。

艾雅法拉天赋的“部署后立即随机获得7~15点技力”为例:

  • 其数据内的随机范围下限为7,上限为16。
  • 当每次调用随机整数时,系统会生成一个 下限 ≤ x < 上限 的随机小数,随后再对其向下取整。
    因始终无法到达上限,因此游戏内显示的15(也即16-1)确实是随机整数逻辑能产生的最大整数。

取用随机整数同样属于一次取随机数行为。

随机选择

除了数字上的随机,明日方舟还存在不少事件上的随机。这里以天赋的“随机选择”举例:

  • 待补充

取用随机整数同样属于一次取随机数行为。

随机数轴

轴与频道

待补充

不可控的“随机”

除了上述这些明确用到了随机逻辑的内容外,游戏内还存在不少实际上不可控的“随机”事件。

从程序的角度来看,它们并非随机,但从实际观测的角度来看,它们是无法预测、无法复现的。

这些不可控“随机”均不属于取随机数行为,因此均不受随机数轴影响。

同时碰撞

较为知名的一个“随机”行为。表现为不死的黑蛇释放的火球雨同时碰撞到多个单位(乌萨斯平民)时,哪个单位受伤对于玩家而言是随机的。

待补充

临时碰撞

维什戴尔因其天赋而对于处理顺序具有的高度需求下,其被观测到的攻击命中顺序实际上完全无序且不可预测。

待补充

无序施加Buff

死芒三技能的机制实现中,使用到了 CreateBuffInRange 方法,并让第一个处理的单位“消耗”,用于实现“消耗一个悲叹的仆役”

但此方法的处理顺序对于玩家而言也是不可预测的。

待补充