易经起卦模拟演算法: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 正是利用这些模型,在保留传统起卦流程的同时,以可验证且可重现的方式于电脑上完成模拟。