劉 藝,趙 莉
(遼寧工業(yè)大學電子與信息學院,錦州 121001)
占卜(今預測學)是一門由來已久的學科,古代人在做事之前先進行占卜,但最初古人采用何種占卜方式我們不知。所能了解到的占卜方法大都源于秦漢時代。六爻之法先見于《京房易》,是象、理、數(shù)三種要素相融合而構(gòu)造的系統(tǒng)?!耙住蹦巳赵轮象w,代表著陰陽平衡,陰陽之法乃天地之法也,極到而變[1]。預測之法和我們共同度過了幾千年的歷史,融入我們的生活,大部分人認為這是一本玄而又玄的書籍,其實此書和數(shù)學有著密切的聯(lián)系,其占卜部分更是對數(shù)的典型應用。
爻是古代人進行占卜時記錄結(jié)果的一種符號,由三個陰陽爻組成的卦叫三畫卦(單卦),三爻有八種排列形狀故稱八卦。由兩個三畫卦組成的卦叫六畫卦,也叫復卦、成卦[2],復卦有六十四種排列方式,即六十四卦。
數(shù)字有奇偶,天地分陰陽,所以爻有陰爻和陽爻之說。陽爻用“——”代表,陰爻用“——”代表,世間萬物有靈,每卦有三爻,上為天下為地中間為人,即天地人,八卦蘊意宇宙萬物,八卦名稱如圖1所示。六爻有上卦和下卦之分,上面的叫上卦或外卦,下面的叫下卦或者內(nèi)卦[3-4]。
圖1 八卦圖
搖卦以乾隆錢為最佳,我們現(xiàn)代可以用一元硬幣代替乾隆錢,有面值的為陰,有花一面為陽。三枚硬幣放于掌心,雙手合攏,右手在下左手在上,搖動幾次,拋于桌面或地面等處,如此反復六次共得六爻成一卦。如果一次投擲結(jié)果為兩陽一陰,叫少陰;兩陰一陽,叫少陽;三陽為老陽,三陰為老陰。其中少陰和少陽為靜爻、老陽和老陰為動爻,遇動必變,老陽變老陰,老陰變老陽[5]。
我們搖得的卦為本卦,動爻的變化產(chǎn)生的卦為變卦。全卦有一爻為靜爻叫獨靜卦,全卦有一爻為動爻叫獨發(fā)卦[6]。搖卦第一次為初爻,是卦的最下面一爻,依次往上,第六次為第六爻,即上爻。
搖卦得到的六爻如圖2 所示,此卦為上卦為離,下卦為兌,動爻為二爻,此為本卦;二爻變化由陽變陰乃為變卦,變卦上卦為離,下卦為震卦。
圖2 六爻
圖2 得到的結(jié)果是從本人的角度出發(fā),看待事物的產(chǎn)生發(fā)展過程。如果我們把圖2倒過來看即由上往下看,就會形成新的卦,此卦叫綜卦(反卦),例如山水蒙和水雷屯就互為綜卦。圖2本卦的反卦為上卦為巽,下卦為離;變卦的反卦為上卦艮,下卦離。綜卦即是由事物的反面來看待問題,思考問題。錯卦就是將正卦陰爻和陽爻取反而得到的另一卦,通常代表轉(zhuǎn)機??创龁栴}的角度變了,結(jié)果就會不同,所以算卦也是具有哲學內(nèi)涵,體現(xiàn)了對立統(tǒng)一的關(guān)系。
由圖2可知,搖卦得到的卦象和電腦中的二進制數(shù)有關(guān)聯(lián)。陽爻設(shè)為二進制中的1,陰爻設(shè)為二進制中的0,把搖卦得到的卦象和二進制數(shù)進行匹配,初爻為二進制的最低位,上爻為二進制的最高位,依次類推。
圖2 本卦對應的二進制數(shù)為101011,即轉(zhuǎn)換為十進制數(shù)為43(1×20+1×21+0×22+1×23+0×24+1×25),43+1 得到《周易》六十四卦中的第44卦。圖2 變卦對應的二進制數(shù)為101001,即轉(zhuǎn)換為十進制數(shù)為41(1×20+0×21+0×22+1×23+0×24+1×25),41+1 得到《周易》六十四卦中的第42卦。為什么六爻得到的十進制數(shù)要加1,因為六十四卦就是六爻陰陽符號的64 種排列方式,六爻得到的卦象由變化到,即十進制的0 變化到63,恰好是64 個數(shù),則用1 代表第1 卦依次類推得64卦。
卦象和二進制數(shù)相匹配,計算機使用的就是二進制數(shù),所以可以用計算機語言對六爻進行模擬測算。計算機語言目前流行的Python 語言、Java語言、C語言等。
Python 語言的顯著特點就是響應速度快,Python語言具有很多標準庫和第三方庫[7],并且是開源免費,因此本文選用Python 語言模擬六爻進行搖卦和解卦。
3.1.1 起卦
用Python 語言中的隨機數(shù)發(fā)生器來模擬搖銅錢起卦的過程。引入random 庫,設(shè)置一個空的列表result 用來存放產(chǎn)生的隨機整數(shù)。因為是六爻,則一次產(chǎn)生6 個0 到9 之間的隨機整數(shù),整數(shù)可以重復,最先產(chǎn)生的為初爻,放入列表result[0]中,依次類推,程序如圖3所示。
圖3 起卦
3.1.2 解本卦
列表result 寫入數(shù)據(jù)后,就可以解本卦。本程序中的六十四卦卦辭來源于百度周易六十四卦卦辭,卦辭存放在程序相同的目錄下,名為guacici.txt 文件。定義解本卦函數(shù),首先需要把6 個整數(shù)轉(zhuǎn)換為對應的二進制數(shù),設(shè)整數(shù)0,1,2,3 對應少陰即二進制的0,整數(shù)4 為老陰二進制0,整數(shù)5 為老陽即二進制1,整數(shù)6,7,8,9 為少陽即二進制的1。假設(shè)result 獲得的值為[1,6,5,8,5,2],本卦為澤風大過,對應的六爻為,轉(zhuǎn)換為對應的二進制放入列表list1 中[0,1,1,1,1,0],通過循環(huán)求累加和轉(zhuǎn)換為對應的十進制數(shù)31 放入變量s中,打開guacici 文本文件,找到對應的卦辭輸出到屏幕上,如圖4所示。
圖4 解本卦
3.1.3 解變卦
如果在搖卦時出現(xiàn)了動爻,則會出現(xiàn)變卦。設(shè)標志位flag 為1,代表本卦無變卦,若列表result 中出現(xiàn)4 或者5 說明本卦有變卦,則標志位flag 變?yōu)?。本例中列表result 中出現(xiàn)了5,說明本卦有變卦。本卦有變卦就需要解變卦,變卦放到列表list2中,列表result中出現(xiàn)了5,5對應的是老陽即二進制的1,變化之后為老陰即二進制的0,則列表list2 的值為[0,1,0,1,0,0],對應的六爻為,即六十四卦中的第11卦,打開對應的文件輸出卦辭,程序如圖5所示。
圖5 解變卦
3.1.4 圖形界面
以上程序的每一部分通過函數(shù)進行定義,程序的運行結(jié)果都是基于命令行的模式執(zhí)行,通過IDLE 交互模式輸出(類似于DOS 模式)。由于DOS 模式已基本被Window11 操作系統(tǒng)取代,所以上述的程序運行要以圖形界面的方式呈現(xiàn)出來,這就用到Python中的thinter GUI編程,圖形用戶接口是人機交互的重要技術(shù)手段,程序?qū)崿F(xiàn)如圖6所示。
圖6 圖形界面代碼
3.1.5 主調(diào)界面
把上述函數(shù)組合在一起,通過Python 的Run Module 運行該程序就會得到六爻算卦的結(jié)果。在當前的狀態(tài)下,每次運行完程序后只有退出IDLE 環(huán)境再次運行程序才會得到下一個結(jié)果。對于玩家來講,該算卦程序的實用性很低。為實現(xiàn)在不退出程序的前提下可以反復抽取數(shù)據(jù)進行算卦的目的,本程序增加了一個主調(diào)的Python 程序,其功能就是用戶可以反復起卦直到選擇退出為止,即玩家自主選擇主調(diào)程序是否調(diào)用六爻程序,從而滿足用戶的要求。程序代碼如圖7所示。
圖7 主調(diào)界面代碼
3.2.1 主界面顯示效果
運行圖7 的代碼,得到的圖形界面結(jié)果如圖8 所示,用戶點擊"開始"按鈕即進入圖9 的六爻算卦程序,點擊"退出"按鈕則退出算卦程序。
圖8 主調(diào)界面
圖9 六爻界面
3.2.2 六爻界面顯示效果
在圖8 的界面上點擊“開始”按鈕進入圖9顯示窗口,點擊相應的按鈕完成起卦、解本卦和解變卦的顯示結(jié)果,當用戶點擊"退出"按鈕后系統(tǒng)回退到圖8 的界面環(huán)境。實驗結(jié)果表明,Python 編寫的算卦程序是正確的。為了證明卦辭文本文件中的六十四卦都能夠被抽出,我們進行了反復實驗驗證,證明了這六十四卦都有機會被抽出,說明Python 程序、卦辭文本文件格式正確有效。
3.2.3 程序打包
開發(fā)了圖形界面程序后,每次使用這個程序依然要求用戶自己來執(zhí)行Python 命令的輸入,可見程序的復雜性并沒有降低。因此需要把程序打包成Windows 系統(tǒng)下的可執(zhí)行文件,這樣可以隨時執(zhí)行此文件,這就是程序的打包。在Python 環(huán)境中使用Pyinstaller 第三方庫把該程序和程序用到的所有外部資源文件一起打包成可執(zhí)行文件,步驟如下:
(1)通過pip安裝pyinstaller組件;
(2)把所有資源文件映射成main.spec 配置文件;
(3)根據(jù)main.spec實現(xiàn)程序打包:pyinstaller-F main.spec;
(4)自動生成main.exe文件。
通過上面的分析可知爻是最早的二進制數(shù),原比計算機中使用的二進制出現(xiàn)得早。六爻和計算機的工作原理如此相似,說明二者存在著必然的聯(lián)系。通過對六爻排列的數(shù)據(jù)分析推測出可以用計算機來模擬六爻,并通過實驗進行了驗證。用計算機來模擬六爻也存在不足,比如人在當時主觀情感,周圍環(huán)境對主體的影響,等等,這些都需要在后期的工作中進行完善,讓該模擬程序往智能化方向發(fā)展,模擬人類大腦思維則是非常重要的一個研究方向。