hsingko


八卦蓍草卜与铜钱卜概率差异研究

前言

易经中并没有记载具体的卜卦方法,于是后人就根据一些线索推断出了几套卜卦的方法。其中最出名的就是两套:铜钱卜法与蓍草卜法。

铜钱卜的具体做法是取三枚铜钱,正面为阳,反面为阴。投掷一次,有如下情况:

  • 三面都是正面,则为老阳
  • 三面都是反面,则为老阴
  • 只有一面是正,则为少阳
  • 只有一面是反,则为少阴

普通人可能并不知道“老少”的概念。简单来说,具体到每一卦,都由从上到下排列的六根线段组成,这些线段被称为“爻”。爻分阴阳,长横为阳,两短横为阴。如果占得老阴或者老阳,那么就形成了所谓的“变爻”:老阴变为少阳,而老阳则变为少阴。根据变爻的情况不同,解卦方式也不同,有时候只需要解读本卦(未变之前的卦项)上的变爻爻辞,有时候则需要看变爻之后形成的“变卦”卦辞。具体方法在这里不做讨论。

而蓍草法,又称大衍筮法,则更为复杂,耗时更久,会在下面的分节中具体讨论。

非常神奇的是,这两种占卜方法的得卦概率并不相同,今天这篇文章就是对此现象进行研究的一个尝试。

而无论是铜钱卜和蓍草卜,区别都在于生成单爻的概率分布,因此不需要考虑整卦,只要研究每爻中少阴、少阳、老阴、老阳各自的概率情况即可。

铜钱卜

铜钱卦的情形比较简单,简单的数学计算就可以得到每爻的概率。总共 1+3+3+1 = 8 种情形,老阴老阳的概率各为 1/8 , 少阴少阳的概率各为 3/8 。

蓍草卜

蓍草占卜需要 49 根蓍草。占卜出一爻需要 3 “变”,也就是三次循环。每次的步骤一致,都是先将一堆蓍草随意分成 2 叠,从任意一叠中拿走一根,然后对两堆分别进行对 4 取余,然后从相应的堆中取走和余数相等的蓍草,如果被 4 整除,那么就需要拿走 4 根。最后归并两堆重新开始,如此共进行三次循环1。然后对最终剩下的蓍草数量除以 4 ,得到的商必然是在 6,7,8,9 之中,各自对应:

  • 6: 老阴
  • 7: 少阳
  • 8: 少阴
  • 9: 老阳

首先我们来看进行蓍草卜三变后剩余情况有哪些可能性。为了讨论方便,首先我们来先看看两数的余数,与两数之和的余数的关联。

设有被除数 a,b ,除数 c; a,b 除 c 后的商与余数各自为 (k1,r1),(k2,r2) 则有:a+b=k1*c+r1+k2*c*r2=c*(k1+k2)+(r1+r2)。由此可知,和的余数与余数之和是同余的。举例:

  • 48=21+27, 48mod4=0, 21mod4=1, 27mod4=3
  • 35=14+21, 35mod4=3, 14mod4=2, 21mod4=1

考虑最初始的情形。总数为 49 ,取走一根后两堆数量之和为 48 ,能被 4 整除,按照之前对余数之和与和的余数进行的分析,可知无论两堆如何划分,其余数之和必定也能被 4 整除。那么从两堆中取走的蓍草数量的组合必定是:(4,4),(1,3),(3,1),(2,2) 中的一个,即共取走 4+4=8 根,或者 1+3=4 根。因此一变之后,剩余的蓍草数必然是 44 或者 40 根。按照同样的逻辑往下计算,可以得到如下的决策树:

假设分堆并抽 1 后,剩下每堆蓍草最小值为 1 ,并且每堆数量在区间 [1, 总数-1] 内概率分布相等,那么我们可以用简单的随机数进行概率模拟,容易写出如下代码:

import numpy as np

LEAST_AMOUNT = 1

def pick(x):
    if x%4 == 0:
        return 4
    return x%4

def simulate():
    amount = 49
    for _ in range(3):
        amount -= 1 # 先取 1 再分堆;先分堆再取 1, 本质上是一样的
        pile1 = np.random.randint(LEAST_AMOUNT, amount-LEAST_AMOUNT+1)
        pile2 = amount - pile1
        amount = amount - pick(pile1) - pick(pile2)
    return amount

def simulate_Ntimes(N):
    samples = []
    for _ in range(N):
        samples.append(simulate())
    unique, counts = np.unique(samples, return_counts=True)
    return dict(zip(unique, map(lambda x:x/N, counts)))

模拟一百万次后得到的结果分布是:

数值 含义 概率 百分比
24 老阴 0.05185 5.2%
28 少阳 0.288275 28.8%
32 少阴 0.448348 44.8%
36 老阳 0.211527 21.1%

其中阴阳比例大致相等。

上述模型的第一个缺陷,就是对 LEAST_AMOUNT 的选择,为了简便起见,在之前的模拟中,这个值的选择是任意的。为了更全面地进行考察,我们也可以尝试将这个值调大:

结果\LEAST_AMOUNT 1 2 3 4 5 6 7 8
24 5.2% 6.1% 7.2% 6.7% 4.9% 6.1% 7.7% 6.8%
28 28.8% 31.2% 33.5% 31.7% 28.2% 31.1% 34.2% 31.8%
32 44.8% 43.9% 42.7% 43.3% 45.1% 43.9% 42.1% 43.2%
36 21.1% 18.9% 16.5% 18.3% 21.8% 18.9% 16.0% 18.2%

我们可以发现一个奇特的现象,无论我们将每堆的最小值如何调整,老阴的概率总是比老阳的要低很多(阳更容易变阴,而阴却不容易变阳);而在铜钱卦中,比值则是均匀的 1:3:3:1 ,老阴和老阳有同样的机率。

这个模型的第二个缺陷,就是假定了在区间内每个数的概率均等,但是在现实中,有的人更倾向于均分,有的人则喜欢少取,还有的人完全凭一时的手气,不太可能出现像是这个模拟计算过程中如此均匀的概率分布。

在写这篇的时候,我去看了几个易学论坛以及两篇论文。他们都得出了类似的结论,即蓍草法可能并非历史上真正的占卜法,他们会如此推论,都是基于一个简单的信念,即从概率上看,老阴老阳出现频率应该大致相等。还有的人从春秋中记载的一百多个占卜记录中找到证据,计算出了老阴老阳出现的概率,同样支持了这一信念。

我对于《易经》的态度,大约等同于我对《圣经》的看法:其本身未必真有什么玄妙之处,但是历史上了无数人如此确信,因而各自成了研究相应文化现象中不可缺少的工具。引一个不恰当的比喻,正如《鬼吹灯》中,风水未必确有其事,但是既然墓主人依靠风水选址,那么摸金校尉们当然就可以反过来利用风水分金定穴。

我在读《周易江湖》的时候,看到了这个问题,并对其背后的数学原理产生了兴趣。至于最原始的八卦究竟如何得卦,我并不太在意,或许它们的概率本就不同吧,以此为基础进行解读,也可以得出一些有趣的猜想。


  1. 在对第二、第三次循环中是否还要取 1 ,学界有所争论,这里只讨论每次都要取 1 的情况。 ↩︎