第四章、 改良基因重整繁衍法
4.3. 驗證重複盤面
由於任一數獨盤面擁有 1218998108160 個重複盤面[3],本章節會提出 盤面特徵式來代表這個盤面的特徵,即使是重複但不完全相同的兩個盤面,
25
的數字個數,共計 3x9 = 27 個數字作為特徵式,如圖 21 上方的數字列,
共分為 Digit Pattern、Column Pattern、Row Pattern。由於提示數字有 17 個,所以這三個 Pattern 內的數字和都是 17。
圖 21 盤面特徵式
根據重複盤面的定義,當發生區域對調時,對特徵式的影響僅順序上發 生改變,如圖 22。利用這個特性排序特徵式(由左至右,從大到小),作 為這個盤面的代表。先以這個特徵式與其他盤面的特徵式進行比對,如果 不相同,就表示這個盤面是新盤面。
圖 22 具有代表性的特徵式
0 2 2 3 2 2 2 2 2 1 2 2 1 2 2 2 3 2 2 1 3 2 0 2 1 1 5
Digit Pattern Column Pattern Row Pattern
1111 2222 2222 1111 2222 2222 2222 3333 2222
2222 9 2
1111 3
3333 6 5 4
2222 2 7
0000
2222 5 4
1111 4
1111 8
5555 8 7 3 6 9
Column Pattern
Row Pattern Digit Pattern
1 : 0 2 : 2 3 : 2 4 : 3 5 : 2 6 : 2 7 : 2 8 : 2 9 : 2
3 2 2 2 2 2 2 2 0
7 6 4 7 5 5
5 1 1 3 2 1 2 2 0 3 2 2 2 2 1 2 2 1
Digit Pattern Column Pattern Row Pattern
0 2 2 3 2 2 2 2 2
5 5 7 6 4 7
1 2 2 1 2 2 2 3 2 2 1 3 2 0 2 1 1 5
Digit Pattern Column Pattern Row Pattern
26
如果特徵式相同,就根據內容找出所有符合特徵式的盤面,再進行比對。
以圖 23 為例,在不影響特徵式的前提下,建立如表 3 的巢狀迴圈來執行 相互對調,進而產生 7! x (2!)6 ,共 322560 個重複盤面。
圖 23 以特徵式產生迴圈
表 3 迴圈產生範例 迴圈
迴圈迴圈
迴圈 相互對調動作相互對調動作相互對調動作相互對調動作 組合個數組合個數 組合個數組合個數 Loop 1 數字 2~8 相互對調 7!
Loop 2 行 2 / 3 相互對調 2!
Loop 3 行 7 / 8 相互對調 2!
Loop 4 列 2 / 3 相互對調 2!
Loop 5 列 4 / 5 相互對調 2!
Loop 6 列 7 / 8 相互對調 2!
Loop 7 列 456 / 列 789 相互對調 2!
5040 = 1! * (1 * 5040 * 1)
1 5040 = 7! 1
3 2 2 2 2 2 2 2 0
64 = 1! * (4 * 16)
4 = 1! * (2 * 1 * 2) 16 = 2! * (2 * 2 * 2)
2 = 2! 1 = 1! 2 = 2! 2 = 2! 2 = 2! 2 = 2!
5 1 1 3 2 1 2 2 0 3 2 2 2 2 1 2 2 1
Digit Pattern Column Pattern Row Pattern
27
第五章 第五章 第五章
第五章、 、 、 、實驗結果 實驗結果 實驗結果 實驗結果
本研究之實驗環境軟、硬體規格如下:
表 4 系統規格
以 36628 個提示數 17 盤面為測試對象,及根據一般候選數解題法所建 立的解題器,全部解題後產生如表 5(a)的數據。再根據候選個數解題法,
產生相對的集合架構,並搭配位元運算的技巧,最後產生如表 5 (b)的數 據。其中。大部分的解題法都集中在 Naked 1 及 Hidden 1,使用率上差異 不大,但受到新的架構及位元運算的影響,整體的計算速度仍有提昇。由 於其中 Naked 3 出現比率很低且耗時,所以如果略過這個解題程序,平均 解題時間會從原本的 0.767 ms 增快至 0.576 ms。
項次 規格名稱 規格描述
1 程式開發語言 Visual C++ 6.0
2 作業系統 Windows XP Professional (Service Pack 2) 3 主機 CPU Pentium-4(3GHz)
4 記憶體 RAM 512 MB RAM 5 硬碟容量 80 GB
6 測試盤面 36628個提示數17盤面
7 取得來源 2006年,取自於Gordon的Minimum Sudoku網頁
28
表 5 候選數解題法 比較表
(a) 候選數解題法
(b) 候選個數解題法
在實驗改良基因重整繁衍法時,可以利用分散式運算的方式,增加整體 處理的速度,例如多核 PC 或是多部 PC,系統架構如圖 24。以下利用多部 PC,分別針對改變提示數字個數 1 及 2 進行實驗,結果如表 6、表 7。
項目名稱 項目描述
1. 總共時間 38.5692 秒 2. 平均時間 1.053 毫秒 3. 解題法平均使用率
3.1 Naked 1 51.617 % 3.2 Hidden 1 45.376 % 3.3 Locked 2.569 % 3.4 Naked 2 0.192 % 3.5 Hidden 2 0.119 % 3.6 Naked 3 0.005 % 3.7 Hidden 3 0.002 % 3.8 X-Wing 2 0.003 % 3.9 X-Wing 3 0.003 % 3.10 Guess 0.113 %
項目名稱 項目描述
1. 總共時間 28.0945 秒 2. 平均時間 0.767 毫秒 3. 解題法平均使用率
3.1 Naked 1 96.297 % 3.2 Naked 2 2.097 % 3.3 Naked 3 0.105 % 3.4 Locked 1.389 % 3.5 Guess 0.112 %
29
當改變數字個數為 1 時,共花了 3.5 天的時間處理 36628 個盤面,雖然 產生了第一代新生子 74271 個,但經過重複盤面的檢驗後,僅 9 個是不重 複的新生提示數 17 盤面。如果以 2008 年取得的 47386 個盤面重新測試,
產生的新生盤面都是重複的,若要增加新生盤面的差異性,就要增加改變 數字個數,產生更大量且差異更大的盤面。
然而,當改變數字個數為 2 時,因為大量的多重解發生,使檢驗所需時 間大幅增加,用兩週的時間也僅能完成前 26 個盤面的統計數據,雖然單一 母體產生的唯一解盤面數量大增,但都是重複盤面。
圖 24 分散式系統架構
36628個原始盤面
PC1 產生新盤面 檢驗是否唯一解
PC n 產生新盤面 檢驗是否唯一解
PC 檢驗是否重複
資料庫 新盤面
36628個代表性盤 面,含特徵式
30
表 6 改良基因重整繁衍法之實驗結果 1
表 7 改良基因重整繁衍法之實驗結果 2
項目名稱 項目描述 (針對單一盤面)
1. 改變的數字個數 1
2. 處理所需時間 8.346 秒 3. 新生盤面 個數 9928 3.1 預先排除 個數 5993 3.2 多重解 個數 3909 3.3 無解 個數 24 3.4 唯一解 個數 2
預先排除 多重解 無解 唯一解
項目名稱 項目描述 (針對36628個盤面)
1. 總共所需時間 3.5 天 2. 唯一解盤面 總數 74271
3. 新生盤面 總數 9(以2008年的47386個盤面重測,新生數 0)
項目名稱 項目描述 (針對單一盤面)
1. 改變的數字個數 2
2. 處理所需時間 40261.71 秒 (11.18 小時) 3. 新生盤面 個數 23470336
3.1 預先排除 個數 17799881 3.2 多重解 個數 5221630 3.3 無解 個數 448814 3.4 唯一解 個數 11
項目名稱 項目描述 (針對26個盤面)
1. 總共所需時間 12.1 天 (36628個盤面約需17068天 ≒ 47年) 2. 唯一解盤面 總數 286
3. 新生盤面 總數 0
預先排除 多重解 無解 唯一解
31
第六章 第六章 第六章
第六章、 、 、 、結論與未來展望 結論與未來展望 結論與未來展望 結論與未來展望
本章綜合研究結果,針對兩個研究問題:(1)提出新的數獨解題法,使 其能在更短時間內求解,並驗證是否具備唯一解;(2)改善以前的基因演算 法,使有效且快速的產生提示數 17 的題目,並驗證是否重複,研究結果整 理如下。
新的候選個數解題法幾乎僅用Naked 1 就完成解題,解題所需時間較 傳統的候選數解題法更少。實作上也只需要製作一套解題法、一個統一的 架構,避開發生錯誤時,必須在不同的解題法間相互偵錯的困難。
改良後的基因重整繁衍法,除了應用候選個數解題法,預先過濾掉大量 規則抵觸的盤面,也可以濾掉部分具有多重解的盤面,大幅減少需要考慮 的盤面個數。在重複盤面的驗證上,也有了快速且完整的檢驗。
實驗的最後結果的確有產生新的提示數 17 盤面,所以證明改良基因重 整繁衍法的確可以產生新的盤面,但數量有限。而新產生的盤面中,依舊 沒有找到提示數 16 的盤面。而且當繼續下一步研究時,增加改變的提示數 字個數為 2 時,因為多重解的情況大量出現,使唯一解的檢查變得相當耗 時。所以,這實驗衍生了一個新的研究方向,那就是「如何快速辨識具有 多重解的盤面?」。
此外,若改以證明提示數 16 盤面不存在為目的,改良基因重整繁衍法 並沒有辦法證明是否能找出全部的提示數 17 盤面,進而證明這些盤面中沒 有提示數 16 盤面的存在。反之,如果先找出所有的數獨的解盤面,進而找 出每個盤面的最少提示數及題目盤面,這是證明最少提示數的另一個研究 方向。
32
參考文獻
[1] 林育匡,「現今最少提示數之數獨盤面產生器研究」,國立臺灣師範 大學,碩士論文,民國 96 年。
[2] Tom Davis, The Mathematics of Sudoku. Retrieved October 2008, from www.geometer.org/mathcircles/sudoku.pdf
[3] Bertram Felgenhauer, Frazer Jarvis, Enumerating possible Sudoku grids. Retrieved June 20, 2005, from
http://www.afjarvis.staff.shef.ac.uk/sudoku/sudoku.pdf
[4] Gordon Royle, Minimum Sudoku. Retrieved June 1, 2006, from
http://www.csse.uwa.edu.au/~gordon/sudokumin.php
[5] Sudoku. (n. d.). Retrieved June 1, 2006, from
http://en.wikipedia.org/wiki/Sudoku
[6] Latin square Wikipedia. Retrieved June 1, 2006, from
http://en.wikipedia.org/wiki/Latin_square
[7] Gary McGuire‘s Minimum Sudoku Page, Sudoku Checker
http://math.ie/checker.html
[8] 尤怪之家. Retrieved June 1, 2006, from
http://oddest.nc.hcc.edu.tw/
附錄
本附錄將以範例說明重複盤面之定義 式,可以得到不同盤面的方法
相同的,所以將透過以下相互對調方式所產生的盤面
行列對調行列對調行列對調行列對調
座標位置上的行與列相互對調 盤面的翻轉。
1 x 9 1 x 9 1 x 9 1 x 9 區域間區域間區域間區域間,,,, 第 1 列、第 2 列 第 4 列、第 5 列
8 列、第 9 列,彼此間
行與列相同,所以 調;第 4 行、第 第 8 行、第 9 行等
33
附錄 A 重複盤面之範例說明
以範例說明重複盤面之定義,以下介紹幾種透過相互對調的方 可以得到不同盤面的方法。雖然盤面不相同,但由於盤面的特性都是
所以將透過以下相互對調方式所產生的盤面,都視為重複盤面
座標位置上的行與列相互對調,相當於沿著左上右下的斜線
,
,,
,彼此相互對調彼此相互對調彼此相互對調 彼此相互對調
列、第 3 列等 1x9 區域,彼此間相互對調 列、第 6 列,彼此間可以相互對調;及
彼此間也可以相互對調。
所以第 1 行、第 2 行、第 3 行,彼此間 第 5 行、第 6 行,彼此間可以相互對調 行等 1x9 區域,彼此間可以相互對調。
透過相互對調的方 但由於盤面的特性都是
都視為重複盤面。
相當於沿著左上右下的斜線,做
相互對調。同理,
及第 7 列、第
彼此間可以相互對 相互對調;第 7 行、
。
3333 x 9 x 9 x 9 x 9 區域間區域間區域間區域間,,,, 第 1~3 列、第 4~6 互對調。
與列相同,所以第 彼此也可以相互對調
數字數字數字數字 1~91~91~91~9 相互對調相互對調相互對調相互對調 針對盤面上出現的數字 調。
34
,,,
,彼此相互對調彼此相互對調彼此相互對調 彼此相互對調
4~6 列、第 7~9 列等 3x9 的大區域,彼此間
第 1~3 行、第 4~6 行、第 7~9 行等 3x9 相互對調。
相互對調
相互對調 相互對調 相互對調
針對盤面上出現的數字 1~9,任選兩種數字,將他們完全相互對
彼此間可以相
3x9 的大區域,
將他們完全相互對