随机数
请注意,部分内容可能尚未完成或存在错误。您也可以编辑页面帮助我们完善内容。
随机方式
骰子(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)确实是随机整数逻辑能产生的最大整数。
取用随机整数同样属于一次取随机数行为。
权重随机(随机选择)
除了数字上的随机,明日方舟还存在不少事件上的随机,常见的有处理集成战略是否出怪、天赋产生多个效果中的随机一个、敌人从随机兔子洞出口钻出等。这被称为权重随机,或者更大众化一点,随机选择。
进行权重随机时,会先求和所有事件配置的权重得到总权重,随后生成一个大于等于0、小于总权重的随机数X
随后会从事件列表中依次让X减去该事件的权重值,直至X首次小于/等于0时,选用该事件作为本次权重随机的结果(类似于转轮盘的逻辑)
因此进行权重随机时,必定会发生一个事件(哪怕那个事件为“什么也不发生”),其中每个事件的发生概率等同于 其权重 / 总权重;如果每个事件的权重均相等,那么一次权重随机就相当于“在这几个选项中随机选择一项”。
- 未精英化的阿的天赋有四个效果(简述):回血、加倍率、停顿、眩晕
- 四个选项均为1权重,总权重为4,因此单次随机中每个效果各拥有25%的概率触发
- 特米米专精三级的二技能有三个效果:眩晕、加倍率、群体伤害
- 三个选项均为1权重,总权重为3,因此单次随机中每个效果各拥有约33.33%的概率触发
进行一次权重随机同样属于一次取随机数行为。
- 特别的,如果权重随机的项数只有一个(通常是事件列表不确定的情况),那不论其权重如何(哪怕其是0权重)也会直接采用该事件,且此时不再属于一次取随机数的行为。
列表洗切
权重随机补足了选项数量不确定的“多选一”处理,而在权重均相等的情况下,需要选择多个项时,会使用列表洗切(shuffle)。列表随机是UnityEngine中自带的逻辑,其本质上是将已有的列表按照特定
这里以敌方单位霜星的“冻结”技能举例:
- 霜星先将周围所有“未部署封印的地面的可部署地块”加入候选列表,将列表进行洗切,随后从洗切后的列表中选择两项作为技能目标地块。
- 该技能在代理中被设为特殊对待,代理中会出现非随机性的选择。
待补充
随机数轴
轴与频道
待补充
不可控的“随机”
除了上述这些明确用到了随机逻辑的内容外,游戏内还存在不少实际上不可控的“随机”事件。
从程序的角度来看,它们并非随机,但从实际观测的角度来看,它们是无法预测、无法复现的。
这些不可控“随机”均不属于取随机数行为,因此均不受随机数轴影响。
同时碰撞
较为知名的一个“随机”行为。表现为不死的黑蛇释放的火球雨同时碰撞到多个单位(乌萨斯平民)时,哪个单位受伤对于玩家而言是随机的。
待补充
临时碰撞
在维什戴尔因其天赋而对于处理顺序具有的高度需求下,其被观测到的攻击命中顺序实际上完全无序且不可预测。
待补充
无序施加Buff
在死芒三技能的机制实现中,使用到了 CreateBuffInRange 方法,并让第一个处理的单位“消耗”,用于实现“消耗一个悲叹的仆役”
但此方法的处理顺序对于玩家而言也是不可预测的。
待补充