從電腦科學角度解析
本文從電腦科學的角度,介紹易經起卦在電腦上的模擬方式,包括隨機來源、機率分布以及演算法模型。
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 正是利用這些模型,在保留傳統起卦流程的同時,以可驗證且可重現的方式於電腦上完成模擬。