易經起卦模擬演算法:CSPRNG、Markov Chain(馬可夫鏈)與 Entropy(熵)

從電腦科學角度解析

本文從電腦科學的角度,介紹易經起卦在電腦上的模擬方式,包括隨機來源機率分布以及演算法模型


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 bitEntropy(熵)


3. 蓍草法:Markov Chain(馬可夫鏈)

蓍草法(蓍草起卦) 共需進行:

  • 6 爻
  • 每爻 3 變
  • 共 18 次操作

由於每一次「變」的結果都會影響下一次操作,因此整個過程可視為 Markov Chain(馬可夫鏈)

大衍法流程

  1. 從 49 根蓍草開始(去掉一根象徵太極)。
  2. 隨機分為左右兩組,象徵兩儀。
  3. 從右側取出一根,象徵三才中的「人」。
  4. 左右兩組各以四根為一組計數。
  5. 保留餘數。
  6. 合計餘數形成一次「變」。
  7. 重複三次得到一爻。
  8. 六爻共完成十八變。

由於每一步都依賴上一個狀態,因此可用 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 正是利用這些模型,在保留傳統起卦流程的同時,以可驗證且可重現的方式於電腦上完成模擬。