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

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

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

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

圖4 解本卦
3.1.3 解變卦
如果在搖卦時(shí)出現(xiàn)了動(dòng)爻,則會(huì)出現(xiàn)變卦。設(shè)標(biāo)志位flag 為1,代表本卦無變卦,若列表result 中出現(xiàn)4 或者5 說明本卦有變卦,則標(biāo)志位flag 變?yōu)?。本例中列表result 中出現(xiàn)了5,說明本卦有變卦。本卦有變卦就需要解變卦,變卦放到列表list2中,列表result中出現(xiàn)了5,5對(duì)應(yīng)的是老陽即二進(jìn)制的1,變化之后為老陰即二進(jìn)制的0,則列表list2 的值為[0,1,0,1,0,0],對(duì)應(yīng)的六爻為,即六十四卦中的第11卦,打開對(duì)應(yīng)的文件輸出卦辭,程序如圖5所示。

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

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

圖7 主調(diào)界面代碼
3.2.1 主界面顯示效果
運(yùn)行圖7 的代碼,得到的圖形界面結(jié)果如圖8 所示,用戶點(diǎn)擊"開始"按鈕即進(jìn)入圖9 的六爻算卦程序,點(diǎn)擊"退出"按鈕則退出算卦程序。

圖8 主調(diào)界面

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