柯春梅
(廈門海洋職業(yè)技術(shù)學院公共教育學院,福建 廈門 361101)
數(shù)和是一種根據(jù)數(shù)字之和作為推理線索的智力謎題,解題者不僅要觀察題目中提示的數(shù)字之和,分析其數(shù)字組合,還要根據(jù)數(shù)字不能重復(fù)的條件進行排除、剩余等推理出答案,是一種非常具有趣味性的智力謎題[1]。例如圖1 是一道簡單6×6 數(shù)和謎題[1],圖2是它的解。數(shù)學建模是聯(lián)系數(shù)學與應(yīng)用的重要橋梁,是數(shù)學走向應(yīng)用的必經(jīng)之路[2]。數(shù)和游戲是一種智力游戲,我們在解數(shù)和游戲題時,知道這種游戲題實際上也是一種數(shù)學應(yīng)用,如果引入變量,根據(jù)填數(shù)規(guī)則,可以建立數(shù)學模型,再利用數(shù)學軟件進行求解。將此類問題作為數(shù)學建模培訓的實例,會引起學生的興趣。

圖1 數(shù)和游戲題1

圖2 數(shù)和游戲題1的解
已有不少利用數(shù)學建模思想方法求解益智游戲的研究與討論,如許曉寧[3]用類比圖論染色問題對數(shù)獨問題進行建模,給出了一種用多項式組表示數(shù)獨問題的方法;繆克俊等[4]基于Lab VIEW 軟件設(shè)計了一款求解9×9 金字塔數(shù)獨的系統(tǒng);吳濤[5]建立一種排除法填充數(shù)獨的數(shù)學模型;柯春梅[6]建立武士數(shù)獨和花型數(shù)獨的數(shù)學模型并給出LINGO 求解程序;胡英武[7]對“開關(guān)”游戲的控制問題進行了一般性推廣,給出了其基于有限域上的線性方程組的數(shù)學模型及求解;曹建莉等[8]利用二進制代數(shù)學給出了一個關(guān)燈游戲的數(shù)學模型。而利用數(shù)學建模的思想方法求解數(shù)和游戲題尚少見。本文對此作實踐探索,期望能起到拋磚引玉的作用。
數(shù)和是一種根據(jù)數(shù)字之和作為推理線索的智力謎題,數(shù)和的每道謎題都由一個空白網(wǎng)格組成,該網(wǎng)格中散布著很多代表數(shù)字之和的提示數(shù)字。其填寫規(guī)則是:①用數(shù)字1-9將所有空白方格填滿;②每一水平方格區(qū)所填數(shù)字之和等于其左側(cè)的提示數(shù)字,而每一垂直方格區(qū)所填數(shù)字之和等于其上方的提示數(shù)字;③一個水平(或者垂直)方格區(qū)內(nèi)不能重復(fù)出現(xiàn)同一數(shù)字[9]。文獻[1,9,10]給出了各種難度的數(shù)和游戲題,圖1是一道簡單6×6數(shù)和謎題[1],而圖3是一道專家級13×21 數(shù)和謎題[10],可以讓學生在求解數(shù)和謎題時思考:能否用數(shù)學建模的思想方法來解數(shù)和游戲題?如何建立模型?用什么方法求解模型?

圖3 數(shù)和游戲題2
針對數(shù)和游戲題,根據(jù)數(shù)和的解題規(guī)則,按照問題分析、符號假設(shè)、模型建立、模型求解等數(shù)學建?;静襟E,建立數(shù)學模型,并編制相應(yīng)的Lingo 求解程序求解。
為便于建立數(shù)學模型,我們將連續(xù)的水平空白方格組稱為行區(qū)組,連續(xù)的垂直空白方格組稱為列區(qū)組。假設(shè)數(shù)和是s×t 的,有m 個行區(qū)組,n 個列區(qū)組,行區(qū)組序號按從上往下,從左往右順序,計為A1,A2,…,Am,第p個行區(qū)組數(shù)字和為cp(p=1,2,…,m),列區(qū)組序號按從左往右,從上往下順序,計為B1,B2,…,Bn,第q個列區(qū)組數(shù)字和為dq(q=1,2,…,n)。
直觀的,我們可以設(shè)數(shù)和空格總數(shù)為r 個,分別按照從上往下,從左往右順序計,第i 個空格填入的數(shù)字為xi,i=1,2,…,r。圖1 所示數(shù)和引入變量xi后得到圖4。

圖4 引入變量xi的數(shù)和游戲題1
設(shè)數(shù)和空格總數(shù)為r,第i 個空格填入的數(shù)字為xi,i=1,2,…,r。根據(jù)數(shù)和填數(shù)規(guī)則,空白處要么填寫數(shù)字k,要么不填數(shù)字k,只能有一種狀態(tài),引入0-1變量:

根據(jù)符號假設(shè)及數(shù)和的填數(shù)規(guī)則可得該數(shù)和的數(shù)學模型為:

其中:
⑴表示每個空白格子必須填1-9中的一個數(shù)字;
⑵表示每一行區(qū)組所填數(shù)字之和等于其左側(cè)的提示數(shù)字;
⑶表示每一列區(qū)組所填數(shù)字之和等于其上方的提示數(shù)字;
⑷表示一個行區(qū)組內(nèi)不能重復(fù)出現(xiàn)同一數(shù)字,即每個數(shù)字在每個行區(qū)組最多填一次;
⑸表示一個列區(qū)組內(nèi)不能重復(fù)出現(xiàn)同一數(shù)字,即每個數(shù)字在每個列區(qū)組最多填一次;
⑹表示每個變量為0-1變量。
Lingo 軟件是求解優(yōu)化問題的專業(yè)軟件包,主要用于求解規(guī)劃問題、線性及非線性方程組等問題。它內(nèi)置建模語言,提供幾十個內(nèi)部函數(shù),包括很有特色的“集合”概念,從而能以較少的語句,較直觀的方式描述大規(guī)模的優(yōu)化問題,因為使用了集合以及@for、@sum 等集合操作函數(shù)以后可以用簡潔的語句表達出常見的模型中的目標函數(shù)和約束條件,即使模型有大量決策變量和大量數(shù)據(jù),組成模型的語句并不隨之增加,Lingo 程序運算速度快,計算結(jié)果可靠[11-12]。我們利用Lingo軟件,編制圖1所示數(shù)和的求解程序。


x(i,k)=1 表示xi=k,將結(jié)果填入圖1 即得到數(shù)和游戲題1的解如圖2。
可以看出,這種設(shè)題方法很直觀,但對于空格數(shù)量多的數(shù)和游戲題,如圖3 所示數(shù)和游戲題有220 個空格,由于變量序號沒有規(guī)律,編程容易出錯。對此我們重新假設(shè)變量:
設(shè)處于第i 行、第j 列的格子記為(i,j),它所填的數(shù)字記為xij,圖1所示數(shù)和引入變量xij后得到圖5。

圖5 引入變量xij的數(shù)和題1
數(shù)和的空白方格(i,j)處,或填寫數(shù)字k,或不填寫數(shù)字k,只能有一種狀態(tài),引入三維0-1變量:

可以得到數(shù)學模型為

對于圖1 所示數(shù)和,可以根據(jù)圖5 編寫對應(yīng)的Lingo求解程序,使用Lingo12運行程序,輸出如下:

對于數(shù)和盤面上不是空白的格子(灰色陰影),由于它們的數(shù)字沒有參與計算,系統(tǒng)自動分配了一個數(shù)字,我們需要在輸出的結(jié)果中將他們刪除。本題需刪除以下16 個格子上的數(shù)字:(1,1)、(1,2)、(1,5)、(1,6)、(2,1)、(3,3)、(3,4)、(4,3)、(4,4)、(5,1)、(5,2)、(5,6)、(6,1)、(6,2)、(6,5)、(6,6)。刪除后結(jié)果如下:

(i,j,k)=1 表示xij=k,將結(jié)果填入圖1 即得到數(shù)和的解圖2。
數(shù)和的數(shù)學模型和求解程序具有普遍適用性,對于每一個數(shù)和題目,數(shù)學模型是相同的,由于每個題的大小、行區(qū)組、列區(qū)組、提示數(shù)都存在不同,在編寫求解程序時,應(yīng)根據(jù)具體題目編寫相應(yīng)程序。Lingo中@for、@sum 等語句并沒有指定循環(huán)或求和的上下限,如果在集合定義部分增加集合成員的個數(shù),則循環(huán)或求和自然擴展。請每位同學從文獻[9,10]中選取題目,據(jù)題目所給行區(qū)組、列區(qū)組和提示數(shù),修改lingo求解程序,進行求解。從同學們的求解結(jié)果看出,圖3所示的13×21 專家級題運行時間為1 分54 秒,文獻[10]的游戲題的運行時間均不足2分鐘。
數(shù)學游戲是一種很好的學習方式,當學生被數(shù)學游戲所吸引,他們就會去思考其中的奧妙,當他們了解到數(shù)學的神奇與魅力,就不會厭惡數(shù)學、疏遠數(shù)學。數(shù)和作為一款挑戰(zhàn)智力的數(shù)學游戲,既具有邏輯性,又具有數(shù)字和的運算性。我們通過實踐探索,利用數(shù)學建模的思想方法快速準確求解數(shù)和游戲題,讓學生在游戲中學習數(shù)學建模和軟件使用技巧,既激發(fā)學生的學習興趣,又培養(yǎng)學生的多種能力,對提高教學效果起到促進作用。