Thuật Toán Mô Phỏng Gieo Quẻ Kinh Dịch: CSPRNG, Markov Chain Và Entropy

Thuật Toán Mô Phỏng Gieo Quẻ Kinh Dịch: CSPRNG, Markov Chain Và Entropy

Phân tích dưới góc nhìn Khoa học Máy tính

Bài viết này phân tích chi tiết các thuật toán đằng sau việc mô phỏng gieo quẻ Kinh Dịch trên máy tính — từ nguồn entropy, phân phối xác suất đến mô hình Markov Chain.

1. Tại Sao Không Dùng Math.random()?

Math.random() trong JavaScript sử dụng thuật toán Xorshift128+ — là PRNG (Pseudo-Random Number Generator), có thể đoán trước nếu biết seed. Đối với ứng dụng bói dịch, người dùng kỳ vọng tính ngẫu nhiên thực sự, nên cần CSPRNG.

Giải pháp: crypto.getRandomValues() (Web Crypto API)

// Sinh 1 byte ngẫu nhiên mật mã học
const buf = new Uint8Array(1);
crypto.getRandomValues(buf);

const coinFlip = buf[0] % 2; // 0 hoặc 1

2. Mô Phỏng Ba Đồng Xu — Binomial Distribution

Gieo 3 đồng xu, mỗi đồng xu ngửa (3) hoặc sấp (2). Tổng ∈ {6, 7, 8, 9}. Đây là phân phối nhị thức B(3, 0.5) dịch chuyển.

function throwThreeCoins() {
  const bytes = new Uint8Array(3);
  crypto.getRandomValues(bytes);
  let sum = 0;
  for (let i = 0; i < 3; i++) {
    sum += (bytes[i] % 2 === 0) ? 3 : 2; // ngửa=3, sấp=2
  }
  return sum; // 6, 7, 8, hoặc 9

}

Phân phối: P(6)=1/8, P(7)=3/8, P(8)=3/8, P(9)=1/8 — tổng entropy = 1.81 bit/hào.

3. Cỏ Thi — Markov Chain Với Trạng Thái Ẩn

Phương pháp Cỏ Thi (蓍草) gồm 18 bước (3 biến × 6 hào). Mỗi biến (變) tạo dư số phụ thuộc vào kết quả biến trước — đây chính là chuỗi Markov.

Thuật toán Đại diễn pháp (大衍法):

Bắt đầu với 49 cọng (bỏ 1 tượng Thái Cực)

Chia 2 nhóm ngẫu nhiên (Lưỡng Nghi — Thiên-Địa)

Rút 1 cọng từ nhóm phải (Tam Tài — Nhân)

Đếm nhóm trái theo nhóm 4, giữ dư (Tứ Tượng — bốn mùa)

Đếm nhóm phải theo nhóm 4, giữ dư

Tổng dư = 4 hoặc 8 → "biến" (一變)

Lặp 3 biến → 1 hào, 18 biến → 6 hào

Entropy của cỏ thi: ~1.87 bit/hào (thấp hơn đồng xu do phân phối lệch yin-biased).

4. Mai Hoa — Deterministic Hashing

Mai Hoa Dịch Số không sử dụng nguồn ngẫu nhiên mà dùng thời gian Can Chi hoặc số nhập vào làm input. Về bản chất, đây là hàm hash deterministic:

upperTrigram = (year + month + day) % 8
lowerTrigram = (year + month + day + hour) % 8

movingLine = (year + month + day + hour) % 6

Cùng thời điểm sẽ luôn cho cùng quẻ — đây là đặc tính, không phải bug. Thiệu Ung tin rằng "cảm ứng" (感應) nằm ở thời điểm khởi ý hỏi.

5. So Sánh Thuật Toán

Phương pháp Kiểu thuật toán Entropy/hào Độ phức tạp
Ba đồng xu Binomial B(3,0.5) 1.81 bit O(3) per hào
Cỏ thi Markov Chain 1.87 bit O(18) per hào
Mai Hoa giờ Deterministic hash 0 bit O(1)
Mai Hoa số Deterministic hash 0 bit O(1)
Nhập tay User input N/A O(6)

Kết luận

Việc mô phỏng Kinh Dịch trên máy tính đặt ra nhiều bài toán thú vị: từ nguồn entropy mật mã học, mô hình Markov, đến hàm hash deterministic. Mỗi phương pháp cổ đại đều có mô hình toán học tương ứng — chứng tỏ người xưa đã hiểu sâu về xác suất và tổ hợp dù chưa có ngôn ngữ hình thức.