Random
| abbr. | stand for | cn |
|---|---|---|
| PRNG | Pseudo-Random Number Generator | 伪随机数生成器 |
| LCG | Linear Congruential Generator | 线性同余生成器 |
| en | cn |
|---|---|
| random | 随机 |
| uniform | 均匀分布 |
| normal | 正态分布 |
| exponential | 指数分布 |
| poisson | 泊松分布 |
| gamma | 伽马分布 |
| 场景 | 分布 | 原因 |
|---|---|---|
| 抽卡/抽奖 | Uniform | 公平随机 |
| 角色属性 | Normal | 大部分普通,少数极端 |
| 掉落间隔 | Exponential | "无记忆性",每次独立 |
| 刷怪数量 | Poisson | 离散计数 |
| 总伤害量 | Gamma | 多次攻击累计 |
这些是概率分布函数,在模拟、游戏、数据科学中很常用。
各分布详解
Uniform - 均匀分布
[0, 1)之间每个值概率相等- 用途:最基础的随机,抽奖、随机选择、洗牌等
Normal / Gaussian - 正态分布
- 钟形曲线,中间多,两边少
- 用途:
- 游戏伤害浮动:基础伤害 100,实际 90-110 波动,大多数接近 100
- 身高/体重模拟:生成 NPC 属性,大部分正常,少数极端
- 射击精度:子弹落点围绕准心分布
- 股票价格波动:价格变化模拟
// 伤害 = 100 + normal() * 10
// 大多数在 90-110,偶尔 80 或 120
Exponential - 指数分布
- 开始高,快速衰减,无记忆性
- 用途:
- 等待时间:下一个顾客多久到达、下一次事件间隔
- 物品掉落:打怪多久掉一次稀有物品
- 设备寿命:灯泡什么时候坏
- 放射性衰变:模拟粒子衰变
// 平均 5 分钟来一个顾客
const waitMinutes = exponential(1 / 5);
Poisson - 泊松分布
- 离散的计数分布,适用于单位时间内事件次数
- 用途:
- 单位时间内事件次数:每小时收到多少邮件
- 游戏刷怪:这一波刷几只怪
- 网站访问:每分钟多少请求
- 错别字数量:一页纸上有几个错字
// 平均每小时 10 封邮件,这小时收到几封?
const emailCount = poisson(10); // 可能是 8, 11, 10, 12...
Gamma - 伽马分布
- 可调节的偏态分布,多个指数事件的总和
- 用途:
- 多个指数事件的总和:完成 3 个任务的总时间
- 保险理赔金额:大多数小额,少数巨额
- 降雨量:某地区月降雨量分布
- 排队系统:服务 N 个顾客的总时间
// 完成 3 个独立任务,每个平均 2 分钟
const totalTime = gamma(3, 2);