信息熵与八卦:从香农到伏羲的跨时空对话,信息论解读易经
信息熵与八卦:从香农到伏羲的跨时空对话,信息论解读易经
一、信息论的"东方回响":为什么八卦与二进制如此相似?
莱布尼茨在 1703 年看到伏羲六十四卦方圆图时,惊叹于其中蕴含的二进制思想。三百年后,香农用数学语言定义了信息熵,将"不确定性"量化为可计算的数值。当我们用信息论的视角重新审视易经八卦时,会发现一个惊人的对应:八卦的阴阳爻与二进制的 0/1 同构,六十四卦的排列组合与 6-bit 信息编码等价,卦象的变化与马尔可夫链的状态转移有着数学上的同构性。
这不是牵强附会的类比,而是数学结构的深层共振。信息论研究的是"不确定性的度量与消除",而易经研究的是"变化的模式与规律"——两者面对的是同一个问题:如何在不确定性中找到确定性。
二、八卦的信息论模型与卦象编码
八卦由三个阴阳爻组成,每个爻有两种状态(阴/阳),因此八卦的信息量为 3 bit,共 2³ = 8 种组合。六十四卦由六个爻组成,信息量为 6 bit,共 2⁶ = 64 种组合。这与现代信息编码完全等价。
flowchart TD A[阴阳爻<br/>2 种状态] --> B[八卦<br/>3 bit = 8 种组合] B --> C[六十四卦<br/>6 bit = 64 种组合] subgraph "八卦 → 二进制映射" D["乾 ☰ → 111 → 7"] E["兑 ☱ → 110 → 6"] F["离 ☲ → 101 → 5"] G["震 ☳ → 100 → 4"] H["巽 ☴ → 011 → 3"] I["坎 ☵ → 010 → 2"] J["艮 ☶ → 001 → 1"] K["坤 ☷ → 000 → 0"] end B --> D B --> E B --> F B --> G B --> H B --> I B --> J B --> K subgraph "信息熵视角" L["H(X) = -Σ p(x) log₂ p(x)"] M["等概率八卦:H = 3 bit"] N["等概率六十四卦:H = 6 bit"] end C --> L L --> M L --> N关键数学对应:
- 阴阳爻 ↔ 二进制位:阴爻(断线)= 0,阳爻(连线)= 1
- 八卦 ↔ 3-bit 编码:从坤(000)到乾(111),恰好覆盖 0-7
- 六十四卦 ↔ 6-bit 编码:从坤坤(000000)到乾乾(111111),覆盖 0-63
- 卦变 ↔ 状态转移:爻变(阴→阳或阳→阴)对应 bit 翻转
三、卦象变化的信息论分析
# i_ching_information.py — 易经的信息论分析 # 设计意图:用信息论工具量化分析卦象变化的熵、互信息和马尔可夫性质, # 验证传统易经理论中的统计规律 import numpy as np from collections import Counter, defaultdict from typing import List, Dict, Tuple import math # ---- 八卦与二进制映射 ---- TRIGRAM_BINARY = { "坤": "000", "艮": "001", "坎": "010", "巽": "011", "震": "100", "离": "101", "兑": "110", "乾": "111", } TRIGRAM_NATURE = { "坤": "地", "艮": "山", "坎": "水", "巽": "风", "震": "雷", "离": "火", "兑": "泽", "乾": "天", } # 六十四卦名称(上卦-下卦组合) HEXAGRAM_NAMES = {} upper_trigrams = ["乾", "兑", "离", "震", "巽", "坎", "艮", "坤"] lower_trigrams = ["乾", "兑", "离", "震", "巽", "坎", "艮", "坤"] for i, upper in enumerate(upper_trigrams): for j, lower in enumerate(lower_trigrams): hex_code = TRIGRAM_BINARY[upper] + TRIGRAM_BINARY[lower] hex_num = i * 8 + j + 1 HEXAGRAM_NAMES[hex_code] = f"第{hex_num}卦({upper}上{lower}下)" class IChingInformationTheory: """易经的信息论分析""" def __init__(self): self.trigram_probs = self._init_trigram_probabilities() self.hexagram_probs = self._init_hexagram_probabilities() def _init_trigram_probabilities(self) -> Dict[str, float]: """初始化八卦概率分布(基于先天八卦序的对称性假设)""" # 先天八卦假设等概率分布 return {name: 1.0 / 8 for name in TRIGRAM_BINARY} def _init_hexagram_probabilities(self) -> Dict[str, float]: """初始化六十四卦概率分布""" # 假设上下卦独立,联合概率为边缘概率之积 probs = {} for upper in upper_trigrams: for lower in lower_trigrams: code = TRIGRAM_BINARY[upper] + TRIGRAM_BINARY[lower] probs[code] = self.trigram_probs[upper] * self.trigram_probs[lower] return probs def compute_trigram_entropy(self) -> float: """计算八卦的信息熵""" entropy = 0.0 for prob in self.trigram_probs.values(): if prob > 0: entropy -= prob * math.log2(prob) return entropy def compute_hexagram_entropy(self) -> float: """计算六十四卦的信息熵""" entropy = 0.0 for prob in self.hexagram_probs.values(): if prob > 0: entropy -= prob * math.log2(prob) return entropy def compute_yao_change_entropy(self) -> float: """计算爻变的信息熵(单个爻从阴变阳或从阳变阴的不确定性)""" # 爻变概率:老阳→阴 = 1/4,老阴→阳 = 1/4,少阳不变 = 1/4,少阴不变 = 1/4 # 简化模型:每个爻有 p 的概率变化 p_change = 0.25 # 传统揲蓍法中变爻概率 p_stay = 1 - p_change # 二元熵函数 if p_change == 0 or p_change == 1: return 0.0 return -p_change * math.log2(p_change) - p_stay * math.log2(p_stay) def compute_mutual_information( self, upper_prob: Dict[str, float], lower_prob: Dict[str, float] ) -> float: """计算上下卦之间的互信息""" # 如果上下卦独立,互信息为 0 # 如果存在依赖关系(如某些卦象组合更常见),互信息 > 0 # 这里用理论值(独立假设)= 0 h_upper = -sum(p * math.log2(p) for p in upper_prob.values() if p > 0) h_lower = -sum(p * math.log2(p) for p in lower_prob.values() if p > 0) h_joint = self.compute_hexagram_entropy() # I(X;Y) = H(X) + H(Y) - H(X,Y) mutual_info = h_upper + h_lower - h_joint return mutual_info def analyze_hexagram_transition( self, transition_data: List[Tuple[str, str]] ) -> Dict: """分析卦象转移的马尔可夫性质""" # 统计转移概率 transition_counts = defaultdict(Counter) for from_hex, to_hex in transition_data: transition_counts[from_hex][to_hex] += 1 # 计算转移概率矩阵 transition_probs = {} for from_hex, counts in transition_counts.items(): total = sum(counts.values()) transition_probs[from_hex] = { to_hex: count / total for to_hex, count in counts.items() } # 计算转移熵(条件熵的平均值) transition_entropy = 0.0 from_probs = Counter(from_hex for from_hex, _ in transition_data) total_transitions = len(transition_data) for from_hex, probs in transition_probs.items(): from_prob = from_probs[from_hex] / total_transitions conditional_entropy = -sum( p * math.log2(p) for p in probs.values() if p > 0 ) transition_entropy += from_prob * conditional_entropy return { "transition_entropy": transition_entropy, "num_states": len(transition_probs), "avg_branching_factor": np.mean([ len(probs) for probs in transition_probs.values() ]), } def hamming_distance_analysis(self) -> Dict: """分析卦象之间的汉明距离(爻变数量)""" hex_codes = list(self.hexagram_probs.keys()) distances = [] for i in range(len(hex_codes)): for j in range(i + 1, len(hex_codes)): # 计算两个卦象之间的汉明距离 dist = sum( 1 for a, b in zip(hex_codes[i], hex_codes[j]) if a != b ) distances.append(dist) return { "min_distance": min(distances), "max_distance": max(distances), "avg_distance": np.mean(distances), "distance_distribution": dict(Counter(distances)), } def full_analysis(self) -> Dict: """执行完整的信息论分析""" return { "trigram_entropy": self.compute_trigram_entropy(), "trigram_max_entropy": math.log2(8), # 3 bit "hexagram_entropy": self.compute_hexagram_entropy(), "hexagram_max_entropy": math.log2(64), # 6 bit "yao_change_entropy": self.compute_yao_change_entropy(), "mutual_information": self.compute_mutual_information( self.trigram_probs, self.trigram_probs ), "hamming_distance": self.hamming_distance_analysis(), } # ---- 运行分析 ---- if __name__ == "__main__": analyzer = IChingInformationTheory() results = analyzer.full_analysis() print("=== 易经信息论分析 ===") print(f"八卦信息熵: {results['trigram_entropy']:.4f} bit " f"(最大 {results['trigram_max_entropy']:.4f} bit)") print(f"六十四卦信息熵: {results['hexagram_entropy']:.4f} bit " f"(最大 {results['hexagram_max_entropy']:.4f} bit)") print(f"爻变信息熵: {results['yao_change_entropy']:.4f} bit") print(f"上下卦互信息: {results['mutual_information']:.4f} bit") print(f"卦象汉明距离: 最小={results['hamming_distance']['min_distance']}, " f"最大={results['hamming_distance']['max_distance']}, " f"平均={results['hamming_distance']['avg_distance']:.2f}") print(f"汉明距离分布: {results['hamming_distance']['distance_distribution']}")四、信息论解读易经的 Trade-offs
等概率假设的局限:当前分析假设八卦和六十四卦等概率出现,但传统易经中不同卦象的出现频率并不均等——某些卦象(如乾、坤)在经典文献中出现的频率远高于其他卦象。使用真实语料统计的频率分布会得到不同的熵值,但核心结论(八卦 3 bit、六十四卦 6 bit)不变。
符号与语义的鸿沟:信息论分析的是符号的统计性质,而非语义内容。两个汉明距离为 1 的卦象(仅一爻不同),在信息论上差异很小,但在易经语义上可能代表截然不同的含义(如泰卦与否卦,仅上爻不同,含义天壤之别)。信息论无法捕捉这种语义差异。
历史文本的统计偏差:易经经文的卦象分布受历史和文化因素影响,不代表"自然"的分布。用现代统计方法分析古代文本,需要考虑文本的编纂目的和时代背景。
科学严谨性的边界:信息论与易经的对应是数学结构的同构,而非因果关系的证明。八卦与二进制的相似性源于"两种状态的组合"这一基本数学结构,不能因此断言古人已经理解了信息论。保持学术严谨性,避免过度解读。
五、总结
信息论为易经提供了一个全新的数学视角。八卦与 3-bit 编码、六十四卦与 6-bit 编码、爻变与 bit 翻转、卦象转移与马尔可夫链——这些对应关系揭示了两种知识体系在数学结构上的深层同构。信息熵量化了卦象系统的不确定性,互信息度量了上下卦之间的依赖关系,汉明距离描述了卦象之间的差异程度。但等概率假设的局限、符号与语义的鸿沟、历史文本的统计偏差和科学严谨性的边界是需要注意的约束。信息论解读易经的价值不在于"证明古人懂信息论",而在于"用现代数学语言重新理解古老智慧的结构之美"。
