从电脑科学角度解析
本文从电脑科学的角度,介绍易经起卦在电脑上的模拟方式,包括随机来源、机率分布以及演算法模型。
1. 为什么不用 Math.random()?
JavaScript 的 Math.random() 一般采用 PRNG(Pseudo-Random Number Generator,伪随机数产生器)。
这类演算法速度快,但若已知初始种子(Seed),便有可能推测后续产生的数值。
对于易经起卦这类需要高度随机性的应用,通常希望使用真正具有密码学安全性的随机来源,因此 Quizzman 采用 CSPRNG(Cryptographically Secure Pseudo-Random Number Generator,密码学安全伪随机数产生器)。
使用 Web Crypto API
const buf = new Uint8Array(1);
crypto.getRandomValues;
const coinFlip = buf[0] % 2;
crypto.getRandomValues() 直接由作业系统提供熵来源,因此比一般 PRNG 更适合需要公平随机性的应用。
2. 三枚铜钱法:Binomial Distribution(二项分布)
三枚铜钱法每次掷出三枚铜钱。
每枚铜钱只有两种结果:
- 正面(3)
- 反面(2)
三枚相加后,可能得到:
- 6
- 7
- 8
- 9
可视为 Binomial Distribution(二项分布) B(3, 0.5) 经过位移后得到的结果。
function throwThreeCoins() {
const bytes = new Uint8Array(3);
crypto.getRandomValues;
let sum = 0;
for let i = 0; i < 3; i++ {
sum += ? 3 : 2;
}
return sum;
}
其机率分布为:
| 结果 | 机率 | |------|------| | 6 | 1/8 | | 7 | 3/8 | | 8 | 3/8 | | 9 | 1/8 |
每一爻约具有 1.81 bit 的 Entropy(熵)。
3. 蓍草法:Markov Chain(马可夫链)
蓍草法(蓍草起卦) 共需进行:
- 6 爻
- 每爻 3 变
- 共 18 次操作
由于每一次「变」的结果都会影响下一次操作,因此整个过程可视为 Markov Chain(马可夫链)。
大衍法流程
- 从 49 根蓍草开始(去掉一根象征太极)。
- 随机分为左右两组,象征两仪。
- 从右侧取出一根,象征三才中的「人」。
- 左右两组各以四根为一组计数。
- 保留余数。
- 合计余数形成一次「变」。
- 重复三次得到一爻。
- 六爻共完成十八变。
由于每一步都依赖上一个状态,因此可用 Markov Chain(马可夫链) 描述整体流程。
蓍草法每爻约具有 1.87 bit 的熵,其分布较偏向阴爻,因此与三枚铜钱法不同。
4. 梅花易数:Deterministic Hashing(确定性杂凑)
与前两种方法不同,梅花易数 不依靠随机数。
它以时间或数字作为输入,再经过固定公式产生卦象,因此属于 Deterministic Hashing(确定性杂凑)。
例如:
upperTrigram = (year + month + day) % 8
lowerTrigram = (year + month + day + hour) % 8
movingLine = (year + month + day + hour) % 6
相同的输入一定得到相同的卦象。
这是梅花易数的重要特性,而非程式错误。
依照邵雍的思想,真正重要的是「起念的时间」,因此相同时间得到相同结果符合其理论基础。
5. 各种起卦演算法比较
| 方法 | 演算法 | 每爻熵 | 时间复杂度 | |------|---------|---------|------------| | 三枚铜钱 | Binomial Distribution(二项分布) | 约 1.81 bit | O(3) | | 蓍草法 | Markov Chain(马可夫链) | 约 1.87 bit | O(18) | | 梅花(时间) | Deterministic Hashing(确定性杂凑) | 0 bit | O(1) | | 梅花(数字) | Deterministic Hashing(确定性杂凑) | 0 bit | O(1) | | 手动输入六爻 | User Input(使用者输入) | 不适用 | O(6) |
结论
从电脑科学的角度来看,易经起卦涉及许多有趣的演算法概念,包括:
- CSPRNG(Cryptographically Secure Pseudo-Random Number Generator,密码学安全伪随机数产生器)
- Entropy(熵)
- Binomial Distribution(二项分布)
- Markov Chain(马可夫链)
- Deterministic Hashing(确定性杂凑)
不同的传统起卦方法,其背后都可以用现代资讯科学的数学模型来描述。Quizzman I-Ching Engine 正是利用这些模型,在保留传统起卦流程的同时,以可验证且可重现的方式于电脑上完成模拟。