劉 藝,趙 莉
(遼寧工業大學電子與信息學院,錦州 121001)
占卜(今預測學)是一門由來已久的學科,古代人在做事之前先進行占卜,但最初古人采用何種占卜方式我們不知。所能了解到的占卜方法大都源于秦漢時代。六爻之法先見于《京房易》,是象、理、數三種要素相融合而構造的系統。“易”乃日月之合體,代表著陰陽平衡,陰陽之法乃天地之法也,極到而變[1]。預測之法和我們共同度過了幾千年的歷史,融入我們的生活,大部分人認為這是一本玄而又玄的書籍,其實此書和數學有著密切的聯系,其占卜部分更是對數的典型應用。
爻是古代人進行占卜時記錄結果的一種符號,由三個陰陽爻組成的卦叫三畫卦(單卦),三爻有八種排列形狀故稱八卦。由兩個三畫卦組成的卦叫六畫卦,也叫復卦、成卦[2],復卦有六十四種排列方式,即六十四卦。
數字有奇偶,天地分陰陽,所以爻有陰爻和陽爻之說。陽爻用“——”代表,陰爻用“——”代表,世間萬物有靈,每卦有三爻,上為天下為地中間為人,即天地人,八卦蘊意宇宙萬物,八卦名稱如圖1所示。六爻有上卦和下卦之分,上面的叫上卦或外卦,下面的叫下卦或者內卦[3-4]。

圖1 八卦圖
搖卦以乾隆錢為最佳,我們現代可以用一元硬幣代替乾隆錢,有面值的為陰,有花一面為陽。三枚硬幣放于掌心,雙手合攏,右手在下左手在上,搖動幾次,拋于桌面或地面等處,如此反復六次共得六爻成一卦。如果一次投擲結果為兩陽一陰,叫少陰;兩陰一陽,叫少陽;三陽為老陽,三陰為老陰。其中少陰和少陽為靜爻、老陽和老陰為動爻,遇動必變,老陽變老陰,老陰變老陽[5]。
我們搖得的卦為本卦,動爻的變化產生的卦為變卦。全卦有一爻為靜爻叫獨靜卦,全卦有一爻為動爻叫獨發卦[6]。搖卦第一次為初爻,是卦的最下面一爻,依次往上,第六次為第六爻,即上爻。
搖卦得到的六爻如圖2 所示,此卦為上卦為離,下卦為兌,動爻為二爻,此為本卦;二爻變化由陽變陰乃為變卦,變卦上卦為離,下卦為震卦。

圖2 六爻
圖2 得到的結果是從本人的角度出發,看待事物的產生發展過程。如果我們把圖2倒過來看即由上往下看,就會形成新的卦,此卦叫綜卦(反卦),例如山水蒙和水雷屯就互為綜卦。圖2本卦的反卦為上卦為巽,下卦為離;變卦的反卦為上卦艮,下卦離。綜卦即是由事物的反面來看待問題,思考問題。錯卦就是將正卦陰爻和陽爻取反而得到的另一卦,通常代表轉機。看待問題的角度變了,結果就會不同,所以算卦也是具有哲學內涵,體現了對立統一的關系。
由圖2可知,搖卦得到的卦象和電腦中的二進制數有關聯。陽爻設為二進制中的1,陰爻設為二進制中的0,把搖卦得到的卦象和二進制數進行匹配,初爻為二進制的最低位,上爻為二進制的最高位,依次類推。
圖2 本卦對應的二進制數為101011,即轉換為十進制數為43(1×20+1×21+0×22+1×23+0×24+1×25),43+1 得到《周易》六十四卦中的第44卦。圖2 變卦對應的二進制數為101001,即轉換為十進制數為41(1×20+0×21+0×22+1×23+0×24+1×25),41+1 得到《周易》六十四卦中的第42卦。為什么六爻得到的十進制數要加1,因為六十四卦就是六爻陰陽符號的64 種排列方式,六爻得到的卦象由變化到,即十進制的0 變化到63,恰好是64 個數,則用1 代表第1 卦依次類推得64卦。
卦象和二進制數相匹配,計算機使用的就是二進制數,所以可以用計算機語言對六爻進行模擬測算。計算機語言目前流行的Python 語言、Java語言、C語言等。
Python 語言的顯著特點就是響應速度快,Python語言具有很多標準庫和第三方庫[7],并且是開源免費,因此本文選用Python 語言模擬六爻進行搖卦和解卦。
3.1.1 起卦
用Python 語言中的隨機數發生器來模擬搖銅錢起卦的過程。引入random 庫,設置一個空的列表result 用來存放產生的隨機整數。因為是六爻,則一次產生6 個0 到9 之間的隨機整數,整數可以重復,最先產生的為初爻,放入列表result[0]中,依次類推,程序如圖3所示。

圖3 起卦
3.1.2 解本卦
列表result 寫入數據后,就可以解本卦。本程序中的六十四卦卦辭來源于百度周易六十四卦卦辭,卦辭存放在程序相同的目錄下,名為guacici.txt 文件。定義解本卦函數,首先需要把6 個整數轉換為對應的二進制數,設整數0,1,2,3 對應少陰即二進制的0,整數4 為老陰二進制0,整數5 為老陽即二進制1,整數6,7,8,9 為少陽即二進制的1。假設result 獲得的值為[1,6,5,8,5,2],本卦為澤風大過,對應的六爻為,轉換為對應的二進制放入列表list1 中[0,1,1,1,1,0],通過循環求累加和轉換為對應的十進制數31 放入變量s中,打開guacici 文本文件,找到對應的卦辭輸出到屏幕上,如圖4所示。

圖4 解本卦
3.1.3 解變卦
如果在搖卦時出現了動爻,則會出現變卦。設標志位flag 為1,代表本卦無變卦,若列表result 中出現4 或者5 說明本卦有變卦,則標志位flag 變為0。本例中列表result 中出現了5,說明本卦有變卦。本卦有變卦就需要解變卦,變卦放到列表list2中,列表result中出現了5,5對應的是老陽即二進制的1,變化之后為老陰即二進制的0,則列表list2 的值為[0,1,0,1,0,0],對應的六爻為,即六十四卦中的第11卦,打開對應的文件輸出卦辭,程序如圖5所示。

圖5 解變卦
3.1.4 圖形界面
以上程序的每一部分通過函數進行定義,程序的運行結果都是基于命令行的模式執行,通過IDLE 交互模式輸出(類似于DOS 模式)。由于DOS 模式已基本被Window11 操作系統取代,所以上述的程序運行要以圖形界面的方式呈現出來,這就用到Python中的thinter GUI編程,圖形用戶接口是人機交互的重要技術手段,程序實現如圖6所示。

圖6 圖形界面代碼
3.1.5 主調界面
把上述函數組合在一起,通過Python 的Run Module 運行該程序就會得到六爻算卦的結果。在當前的狀態下,每次運行完程序后只有退出IDLE 環境再次運行程序才會得到下一個結果。對于玩家來講,該算卦程序的實用性很低。為實現在不退出程序的前提下可以反復抽取數據進行算卦的目的,本程序增加了一個主調的Python 程序,其功能就是用戶可以反復起卦直到選擇退出為止,即玩家自主選擇主調程序是否調用六爻程序,從而滿足用戶的要求。程序代碼如圖7所示。

圖7 主調界面代碼
3.2.1 主界面顯示效果
運行圖7 的代碼,得到的圖形界面結果如圖8 所示,用戶點擊"開始"按鈕即進入圖9 的六爻算卦程序,點擊"退出"按鈕則退出算卦程序。

圖8 主調界面

圖9 六爻界面
3.2.2 六爻界面顯示效果
在圖8 的界面上點擊“開始”按鈕進入圖9顯示窗口,點擊相應的按鈕完成起卦、解本卦和解變卦的顯示結果,當用戶點擊"退出"按鈕后系統回退到圖8 的界面環境。實驗結果表明,Python 編寫的算卦程序是正確的。為了證明卦辭文本文件中的六十四卦都能夠被抽出,我們進行了反復實驗驗證,證明了這六十四卦都有機會被抽出,說明Python 程序、卦辭文本文件格式正確有效。
3.2.3 程序打包
開發了圖形界面程序后,每次使用這個程序依然要求用戶自己來執行Python 命令的輸入,可見程序的復雜性并沒有降低。因此需要把程序打包成Windows 系統下的可執行文件,這樣可以隨時執行此文件,這就是程序的打包。在Python 環境中使用Pyinstaller 第三方庫把該程序和程序用到的所有外部資源文件一起打包成可執行文件,步驟如下:
(1)通過pip安裝pyinstaller組件;
(2)把所有資源文件映射成main.spec 配置文件;
(3)根據main.spec實現程序打包:pyinstaller-F main.spec;
(4)自動生成main.exe文件。
通過上面的分析可知爻是最早的二進制數,原比計算機中使用的二進制出現得早。六爻和計算機的工作原理如此相似,說明二者存在著必然的聯系。通過對六爻排列的數據分析推測出可以用計算機來模擬六爻,并通過實驗進行了驗證。用計算機來模擬六爻也存在不足,比如人在當時主觀情感,周圍環境對主體的影響,等等,這些都需要在后期的工作中進行完善,讓該模擬程序往智能化方向發展,模擬人類大腦思維則是非常重要的一個研究方向。