Nonogram解題方法之研究與實作
45
0
0
全文
(2) 摘要 Nonogram 解題方法之研究與實作. 陳璿伊. Nonogram 是一種邏輯解謎遊戲,在 1987 年由日本人西尾徹也發明。 Nonogram 的基本玩法是會先給定一個空白的網格,其中每一行和每一列都給定 一組數字當作提示,玩家需根據這些提示找出線索來選擇填滿或留空格子。 Nonogram 是一種約束滿足問題(Constraint satisfaction problem),也已經有論文 證明是 NP-complete 問題,對於這些不確定是否能在多項式時間內解決的問題, 執行時間和答案的正確性都是研究演算法效率和可靠度的最重要的指標。 目前一些相關論文提出了不同方法來實作,大多傾向於從空白盤面根據提示 線索來找尋答案,利用邏輯規則先推導出部分格子的答案,最後再使用 Backtracking 方法來窮舉求解。本研究提出的解題方法是仿效破解 n 皇后問題的 Random-restart hill climbing 作法,先將所有滿足列提示的線段隨機排列,再去移 動各線段以滿足所有行提示的限制。若陷入局部最佳解則會重啟盤面,再由另一 種起始盤面來移動線段,找出滿足所有行提示的盤面。. 關鍵詞:以數繪畫、約束滿足問題、NP 完全、回溯法、隨機重啟爬山法. i.
(3) Abstract The Study and Implementation of the Methods for Solving Nonogram Puzzles. Shiuan-Yi Chen. Nonogram is a logic puzzle game, invented in 1987 by a Japanese named Tetsuya Nishio. The basic method of playing Nonogram puzzle is that, at the beginning a fixed-sized blank board will be given, where each row and each column will be given a set of numbers (clues) as a reminder to the players who need these clues to set or unset the squares. Nonogram is a Constraint satisfaction problem, which has also been proven to be an NP-complete problem. We are uncertain whether it can be solved in polynomial time, but the execution time and the correctness of the answer are the most important indications in the study of efficiency and reliability for designing its algorithms. At present, some relevant papers have proposed different methods to solve the problem. Most of them tend to find the answer based on the prompted clues from a blank board using the logic rules to deduce the set/unset states to part of the squares, and finally using the Backtracking method to solve all the squares exhaustively. Problem-solving approach proposed in this study is to follow the example of n queens problem using Random-restart hill climbing method. First of all, we randomly arrange all lines so that they meet the requirements of all the row clues. Then we randomly select a line and horizontally move it to a new position in order to further meet the. ii.
(4) requirements of the column clues. This process will be repeated many times. If it finally falls into local optimal solution, we will again restart filling the board randomly, and then move the lines to new positions, until we find out a solution that meets the requirements of all the column clues.. Keywords: Nonogram, Constraint satisfaction problem, NP-complete, Backtracking, Random-restart hill climbing. iii.
(5) 誌謝. 首先要感謝指導教授林順喜博士的教導,在兩年的碩班日子裡不時的討論並. 指點我正確的方向,讓此篇論文得以完成。. 另外也要感謝兩位同學俊緯和昱廷的協助和關照,以及學長姐和學弟妹給予. 的建議和分享。有了各位的幫忙,讓我在研究上能有所突破,也能見識到各位專. 精的領域,並且獲益良多。. 最後,也不忘感謝父母和家人的一直以來的支持和鼓勵,勉勵我完成學業。. iv.
(6) 目錄 摘要.................................................................................................................................. i Abstract ........................................................................................................................... ii 誌謝................................................................................................................................ iv 目錄................................................................................................................................. v 圖目錄........................................................................................................................... vii 表目錄.......................................................................................................................... viii 第1章. 緒論............................................................................................................. 1. 1.1. 研究背景..................................................................................................... 1. 1.2. 研究動機及目的......................................................................................... 4. 1.3. 研究意義..................................................................................................... 5. 第2章. 文獻探討..................................................................................................... 7. 2.1. 相關論文及程式介紹................................................................................. 7. 2.2. 搜尋演算法................................................................................................. 9. 2.3. 2.2.1. 深先搜尋法、廣度優先搜尋......................................................... 9. 2.2.2. Divide and Conquer ...................................................................... 11. 2.2.3. Prune and Search........................................................................... 11. 2.2.4. Backtracking ................................................................................. 12. 最佳化問題與演算法............................................................................... 12 2.3.1. 八皇后問題................................................................................... 12. 2.3.2. 局部搜索....................................................................................... 13. 2.3.3. Random-restart hill climbing ........................................................ 13. 第3章. 研究方法................................................................................................... 15. 3.1. 整體架構(隨機重啟爬山法)............................................................... 15. 3.2. 整體架構(Backtracking) ..................................................................... 18. 3.3. 演算法設計(隨機重啟爬山法)........................................................... 20 3.3.1. 隨機生成盤面............................................................................... 20. 3.3.2. 局部搜索最佳解........................................................................... 20. 3.3.3. 計算提示差值與全域最佳解....................................................... 21. 3.3.4. 重啟機制....................................................................................... 22. 3.3.5. 改進方案....................................................................................... 23. 3.4. 演算法設計(Backtracking) ................................................................. 24. 第4章. 實驗結果................................................................................................... 27 維度為 10 的實驗數據;黑格比例:0.5~0.35 ...................................... 28 v.
(7) 維度為 10 的實驗數據;黑格比例:0.5................................................ 29 維度為 15 的實驗數據;黑格比例:0.5~0.35 ...................................... 30 維度為 15 的實驗數據;黑格比例:0.5................................................ 31 維度為 20 的實驗數據;黑格比例:0.5~0.35 ...................................... 32 維度為 20 的實驗數據;黑格比例:0.5................................................ 32 維度為 25 的實驗數據;黑格比例:0.5~0.35 ...................................... 33 維度為 25 的實驗數據;黑格比例:0.5................................................ 33 第5章. 結論與分析............................................................................................... 34. 參考文獻....................................................................................................................... 35. vi.
(8) 圖目錄 圖 1- 1 NONOGRAM 遊戲題目與作答區 .................................................................................2 圖 1- 2 提示數組「3 1 2」在行數的限制為 10 的情況下的 10 種可能的組合 ..................4 圖 2- 1 深度優先搜索樹的節點拜訪順序 ............................................................................10 圖 2- 2 廣度優先搜尋樹的節點拜訪順序 ............................................................................10 圖 2- 3 DIVIDE AND CONQUER 示意圖 .................................................................................. 11 圖 2- 4 八皇后問題的其中一種解 ........................................................................................13 圖 2- 5 各種狀態下所對應的目標值 ....................................................................................14 圖 3- 1 以隨機重啟爬山演算法實作 NONOGRAM 解題程式概念流程圖 ..........................16 圖 3- 2 隨機生成盤面與隨機移動線段之示意圖 ................................................................17 圖 3- 3 圖中標示為灰色線段所佔的行範圍為第 1 行至第 3 行 ........................................20 圖 3- 4 灰色線段的移動位置和移動後所造成的行提示變化(標記為網底) ................21 圖 3- 5 陷入區域最佳解時目標值會在區域最佳解附近震盪 ............................................22 圖 3- 6 BACKTRACKING 處理步驟示意圖 1 .........................................................................24 圖 3- 7 BACKTRACKING 處理步驟示意圖 2(接續圖 3-6) ...............................................25 圖 3- 8 BACKTRACKING 處理步驟示意圖 3(接續圖 3-7) ...............................................26. vii.
(9) 表目錄 表 1- 1 2015 年 TCGA 的比賽結果 ........................................................................................2 表 1- 2 2015 年 TAAI 的比賽結果 .........................................................................................2 表 1- 3 2015 年 ICGA 的比賽結果 .........................................................................................3 表 1- 4 2016 年 TCGA 的比賽結果 ........................................................................................3 表 1- 5 2016 年 ICGA 的比賽結果 .........................................................................................3 表 1- 6 依照提示數組的特徵所計算出來的所有可能的組合個數 ......................................6 表 2- 1 DFS 與 BFS 的比較 ..................................................................................................10 表 3- 1 列提示為{3, 1, 2} ,盤面維度為 10 的條件下,可滿足的組合 ..........................18 表 4- 1 維度為 10 的測試資料(單位為秒) ;黑格比例:0.5~0.35 ..................................28 表 4- 2 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5~0.35(#1 RUN)........28 表 4- 3 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5~0.35(#2 RUN)........28 表 4- 4 維度為 10 的測試資料(單位為秒) ;黑格比例:0.5 ...........................................29 表 4- 5 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5(#1 RUN) .................29 表 4- 6 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5(#2 RUN) .................29 表 4- 7 維度為 15 的測試資料(單位為秒) ;黑格比例:0.5~0.35 ..................................30 表 4- 8 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5~0.35(#1 RUN)........30 表 4- 9 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5~0.35(#2 RUN)........30 表 4- 10 維度為 15 的測試資料(單位為秒);黑格比例:0.5 .........................................31 表 4- 11 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5(#1 RUN) ...............31 表 4- 12 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5(#2 RUN) ...............31 表 4- 13 維度為 20 的測試資料(單位為秒);黑格比例:0.5~0.35 ................................32. viii.
(10) 表 4- 14 維度為 20 的測試資料(單位為秒);黑格比例:0.5 .........................................32 表 4- 15 維度為 25 的測試資料(單位為秒);黑格比例:0.5~0.35 ................................33 表 4- 16 維度為 25 的測試資料(單位為秒);黑格比例:0.5 .........................................33. ix.
(11) 第1章. 緒論. 1.1 研究背景 Nonogram 是一種邏輯解謎遊戲,在 1987 年由日本人西尾徹也發明,而從日 本傳到世界各地後,也多了許多不同的名字,包括 Paint by Numbers、Griddlers、 Pixel Puzzles、Japanese Crosswords、Japanese Puzzles、Logic Square。Nonogram 的基本玩法是會先給定一個空白的網格,其中每一行和每一列都有一組數字當作 提示,玩家需根據這些提示找出線索來選擇填滿或留空格子,如圖 1-1 所示,而 根據提示的內容,答案可能並非唯一解。某些在網路或手機上的遊戲為了增加娛 樂性質,答案會是有意義的圖像,除了提供每一行和每一列的數組外,也會提供 圖像的名稱給玩家當參考;當遊戲有提示答案的圖像為何時,也就符合了 Nonogram 的另一種名稱,「以數繪畫」。Nonogram 是一個非確定性多項式時間完全(NP-complete)問題,目前相關論文提出了不同方法來實驗,早年國外學 者嘗試以基因演算法和深度優先搜尋法來破解 Nonogram,但兩者速度都太慢, 之後的論文都比較傾向使用邏輯規則先推導出部分格子的答案,最後再使用 Backtracking 方法來窮舉求解。 目前台灣電腦對局學會(Taiwan Computer Game Association, TCGA)、中華 民國人工智慧學會(Taiwanese Association for Artificial Intelligence, TAAI)和國 際電腦對局學會( International Computer Games Association, ICGA)都已將 Nonogram 列為比賽項目,表 1-1、表 1-2、表 1-3、表 1-4、表 1-5 分別為 2015 年 TCGA、TAAI 和 ICGA 及 2016 年 TCGA 和 ICGA 的比賽結果,而比賽規則 為所有參賽者統一在相同平台上,在 2 小時內解出 1000 題 25×25 的題目,排名 根據答對的題數來決定,當答對的題數相同時,以用時較少的那方勝出。 1.
(12) 圖 1- 1 Nonogram 遊戲題目與作答區 (左邊數字為每列的提示數組,上面為每行的提示數組). TCGA 2015 Name. Scores. Time(s). Rank. LalaFrogKK. 1000. 908. 1. Naughty. 1000. 1135. 2. init. 1000. 3737. 3. 3Nanogram. 232. 7200. 4. 表 1- 1. 2015 年 TCGA 的比賽結果. TAAI 2015 Name. Scores. Time(s). Rank. YesNonogram. 121. 7200. 2. Requiem. 184. 7200. 1. nonogram. 7. 7200. 5. THUNoNo. 116. 2397. 4. YeeJ. 116. 238. 3. 表 1- 2. 2015 年 TAAI 的比賽結果. 2.
(13) ICGA 2015 Name. Scores. Time(s). Rank. LalaFrogKK. -. -. 1. 3NoNogram. -. -. 2. 表 1- 3. 2015 年 ICGA 的比賽結果. TCGA 2016 Name. Scores. Time(s). Rank. gram. 1000. 1881.316. 1. Liebe. 96. 7200. 5. Andrea. 970. 7200. 2. Sheer. 158. 7200. 4. yj_nono. 220. 460.648. 3. 表 1- 4. 2016 年 TCGA 的比賽結果. ICGA 2016 Name. Scores. Time(s). Rank. XG. 257. 7200. 1. ThuNoNo. 235. 262. 2. Liebe. 205. 7200. 3. Sheer. 140. 7200. 4. 表 1- 5. 2016 年 ICGA 的比賽結果. 3.
(14) 1.2 研究動機及目的 即便剛接觸 Nonogram 這個遊戲也不會感到陌生,它的遊戲盤面與踩地雷、 填字遊戲,和數獨都十分相似;玩家可以利用遊戲的提示,找出部分空格的答案 來得到更進一步的線索,逐步拼湊線索來得到完整答案。Nonogram 的題目難易 度會根據行數和列數的大小,以及提示數組的樣式而不同,若提示數組中的元素 個數比較少,而其中的數值也比較小,那麼此數組所產生的可能組合也就越多, 所以玩家要猜測的次數也越多。例如數組「3 1 2」的意思是指該行或列上有三條 獨立的線,分別佔了 3、1 和 2 格,而每條線與下一條線最少要由一個空格分開, 而此數組「3 1 2」在行數的限制為 10 的情況下,所能產生的組合數為 10 種,如 下圖 1-2 所示。. 圖 1- 2. 提示數組「3 1 2」在行數的限制為 10 的情況下的 10 種可能的組合. 本研究目的除了主要在國內外電腦對局學會舉辦的 Nonogram 比賽項目上獲 得佳績外,因 Nonogram 所涵蓋的相關領域,包括了計算機科學(演算法、資料 結構、人工智慧等)和數學(離散數學、應用數學等),另外也能將研究成果應 用在其他專業學科上,例如影像處理,因此能夠擴展發揚的地方很廣泛,具有研 究和應用的價值。 4.
(15) 1.3 研究意義 一直以來所有已經證明為非確定性多項式時間-完全(NP-complete)問題, 都是證明是否 N=NP 的關鍵,對於這些不確定是否能在多項式時間內解決的問題, 解題時間和答案的準確度都是研究演算法效率和可靠度的指標。Nonogram 在台 灣電腦對局學會(TCGA)、中華民國人工智慧學會(TAAI)和國際電腦對局學 會(ICGA)舉辦的比賽中,是從 25×25 大小的網格中來找出這 625 個空格應該 為塗黑或留白,這樣可能的答案就會產生出 2625 種組合,該如何有效率的快速求 解是比賽的目標。 因為大會比賽給定的題目是規定為 25×25 的網格共 1000 題,其中黑格的比 例依序由 0.5 到 0.35(越後面的題目基本上難度會相對提高),所以每列或每行 的提示數組可能產生的組合數少則一千多組,多則數萬多組;圖 1-3 列出了依照 提示數組的特徵所計算出來的所有組合數。有些題目因為根據組合的排列順序不 同而會造成時間複雜度的下界和上界差距太大,若只憑深先搜尋演算法來窮舉一 切,會導致執行速度差距數十萬甚至是數百萬倍以上。因此先處理每行和每列的 提示數組來推導部分空格的答案能減少程式在最後階段使用 Backtracking 方法所 造成的負擔,並且因為每行或每列的提示數組所能產生的組合其數字排列在有些 區段會有重疊部分;在這樣的情況下若能利用之前比對資料的結果就能避免重複 計算,提早停止計算已知不滿足條件的組合。. 5.
(16) 表 1- 6 依照提示數組的特徵所計算出來的所有可能的組合個數(不涵蓋空提示) (若行數與列數限制為 25,當提示數組的元素個數為 n [n<=25/2+25%2]、提示 數組的數值總合為 m 時,剩餘可以自由填空的空白個數為 25-m-(n-1),其中列索 引表示為可以自由填空的空白個數,行索引表示為提示數組的元素個數). 6.
(17) 第2章. 文獻探討. 2.1 相關論文及程式介紹 第一篇論文「I.-Chen Wu, Der-Johng Sun, Lung-Ping Chen, Kan-Yueh Chen, Ching-Hua Kuo, Hao-Hua Kang, and Hung-Hsuan Lin, “An Efficient Approach to Solving Nonograms”, 2013」[4],這篇論文的作者所設計的解題程式多次在台灣 電腦對局學會(TCGA)、中華民國人工智慧學會(TAAI)和國際電腦對局學 會(ICGA)的 Nonogram 項目中獲得金牌。解題作法分為三個回合依序求解, 第一輪為 Line Solving,先對單行或單列求解,利用動態規劃來取代繁瑣的邏輯 規則,又能夠避免重複計算。第二輪為 Fully Probe(FP),猜測每個空格應該為 塗黑或留白,若不能確定則用矛盾證法來推論是否為無解。第三輪為 Backtracking, 利用前面所猜測的結果,嘗試最可能得到滿足條件的切入點,然後代入第二輪所 用的方法再作求解。 第二篇論文為「葉家郡、黃國展,Nonogram 解題加速方法探討,2014」[3], 這篇論文是嘗試以「I.-Chen Wu, Der-Johng Sun, Lung-Ping Chen, Kan-Yueh Chen, Ching-Hua Kuo, Hao-Hua Kang, and Hung-Hsuan Lin, “An Efficient Approach to Solving Nonograms”, 2013」[4]提出的演算法為基礎,包含了整合動態規劃、全 面探測、及遞迴窮舉等,再另外配合其他三項加速方法來提升解題速度。首先, 由於比賽題目有 1000 題,列或行條件可能會重複出現,可以利用快取機制將計 算的結果儲存起來。第二,對未知點進行窮舉的先後順序會關係到需要窮舉的範. 7.
(18) 圍,將選點策略改變為根據目前所得的資訊來嘗試測試能夠衍生出更多點解答的 值。最後,利用從之前所得的資訊發掘未知點間的關聯,根據 Nonogram 非 1 即 0 的相對性質,其中一種關聯是有些未知點在某任兩列或某任兩行的值必須是完 全相反的。 第三篇論文「張嘉豪、林怡秀,增進 Nonogram 解題效率人工智慧與演算法 之研究與應用,2016」[5],包含了邏輯規則解題技巧的介紹、以及參考 Nonogram 解題程式“pbnsolve”中取更改最多格子的行或列來優先做邏輯規則的方法,另外 也 參 考 了 「 I.-Chen Wu, Der-Johng Sun, Lung-Ping Chen, Kan-Yueh Chen, Ching-Hua Kuo, Hao-Hua Kang, and Hung-Hsuan Lin, “An Efficient Approach to Solving Nonograms”, 2013」[4]的猜測推論,以彌補邏輯規則的不足,作法之一 是完全探查(Fully Probing)與回溯法(Backtracking),完全探查是把做完邏輯 規則後的盤面複製為兩個,再將尚未推出答案的格子在兩個複製的盤面上分別做 標黑和標空後,再繼續做邏輯規則;而回溯法則是當猜測結果沒有跟已知限制矛 盾時,就繼續由目前的盤面往下猜測,若是發現矛盾,就能得知答案和猜測的結 果相反。作法之二是 Line Solving,是以動態規劃的方法來處理繁複的邏輯規則, 此外,這篇論文也針對資料結構部分的改良做介紹,另外還有查表法與邏輯規則 法的實驗結果探討;邏輯規則法在最後的窮舉階段會需要額外配置空間,且會花 費時間在運算上,而查表法則不用。 第四篇論文「B. Batenburg and W. Kosters, “A Distance Tomography Approach. 8.
(19) to Japanese Puzzle,” 2004」[7]的研究是將拼圖問題轉成離散斷層分析(Discrete Tomography, DT),探討如何利用有限的資訊來重建一個二維影像,採取問題特 定進化式演算法(Problem-Specific Evolutionary Algorithm);其中適應函數值的 特定方法為,判斷當圖形解回列和行的 DT 限制式時,與原來 DT 限制式的差異 度,把差異度做加總,當差異度為 0 時,表示找到符合的解。 第五篇論文「K. J. Batenburg and W. A. Kosters, “Solving Nonograms by Combining Relaxations,” 2009」[8],以先找出部分解答為策略,利用合併一些限 制較為寬鬆的行或列的條件,來提升解題速度,將列或行的限制式轉為 2-SAT (2-satisfiability,二元滿足問題),使用演算法來推導邏輯證明。. 2.2 搜尋演算法 2.2.1. 深先搜尋法、廣度優先搜尋. 深度優先搜尋(Depth-First-Search, DFS)是一種用遞迴的方式不斷加深搜尋 深度,從根節點開始選一條分支往下拜訪其子節點,再從子節點選一條分支往下 拜訪,直到葉節點,如圖 2-1。這個目的主要為了保證能遍歷所有節點,而當搜 尋有條件限制或資料有先做過分類的話,能根據限制的條件在搜尋目標時提早在 子節點結束不必要的路徑,返回上層節點或同一層的其他節點繼續搜尋。. 9.
(20) 圖 2- 1. 深度優先搜索樹的節點拜訪順序 (取材自 Wikipedia). 廣度優先搜索(Breadth-First-Search, BFS),從根節點所在的第一層開始, 拜訪其所有分支節點,逐層拜訪至葉節點那層,如圖 2-2。表 2-1 列出了兩種搜 尋演算法的比較,以找尋確定起點終點的最短路徑問題為例時,深度優先搜尋不 能保證第一個找到的解一定是最佳解。. 圖 2- 2. 廣度優先搜尋樹的節點拜訪順序 (取材自 Wikipedia) 深度優先搜尋. 廣度優先搜尋. 時間複雜度. O(bd). O(bd). 空間複雜度 最佳解. O(bd) 否. O(bd) 是. 完全性. 是. 是. 表 2- 1 DFS 與 BFS 的比較 (b: number of branches, d: depth). 10.
(21) 2.2.2. Divide and Conquer. 在計算機科學中,Divide and Conquer 是一種由上而下(top-down)的解題 方式,將一個複雜的問題切割成兩個或更多個相同或相似而規模較小的子問題, 讓子問題能以較簡單的方式來求解;最後再合併所有子問題的解,求出原來問題 的解,如圖 2-3。在演算法中,有很多高效算法都是以此技巧為基礎,像是著名 的排序法:Quick sort 與 Merger sort。. 圖 2- 3. Divide and Conquer 示意圖. (取材自 bigdata.ices.utexas.edu/project/divide-conquer-methods-for-big-data-analytics). 2.2.3. Prune and Search. Prune and Search 是一種解決最佳化問題的方法,為 Divide and Conquer 策略 的特例,其概念為在一個集合中,根據問題的特徵,把不可能有答案存在的子集 先過濾,只留下可能有答案存在的子集,再從這些子集中繼續搜尋答案。這個過 程會需要多次的過濾,每次過濾會減少子集的大小,也可視為縮減整個集合的大 小,資料量減少了,使得搜尋到答案的機率提高,進而降低搜尋時間。. 11.
(22) 2.2.4. Backtracking. 回溯法(Backtracking)是增加了剪枝(Prunning)功能的遞迴方法,最常用 於解決約束滿足問題(Constraint satisfaction problem) ,例如八皇后問題、著色問 題、布爾可滿足性問題等。利用逐步尋找問題之答案的同時,判斷當前部分解是 否滿足限制條件,如此可避免因純粹使用遞迴,需要到葉節點時才判斷解答是否 正確,因此使用回溯法若發現當前解會導致無法滿足限制條件,也就表示再繼續 做下去也只會無功而返,就能夠提早停止處理接下去的分枝,返回上一步再找尋 可以滿足限制條件的分枝,以便減少不必要的運算。. 2.3 最佳化問題與演算法 2.3.1. 八皇后問題. 八皇后問題是從西洋棋棋規裡的皇后走步與吃子方法所衍生出來的約束滿 足問題,是由西洋棋棋手 Max Bezzel 於 1848 年提出,在 1850 年才由 Franz Nauck 解出,而後又把問題擴展,棋盤大小由 8×8 延伸至 n×n 的規模。西洋棋裡皇后 的走步或吃子方法為橫走、直走或延著對角線斜走,格數不限,但不能跨越其他 棋子,八皇后問題是要在 8×8 的棋盤上找出八皇后的擺放位置,但又不能讓任一 皇后吃掉其他皇后,等同於不能有任兩個皇后在同一垂直線、水平線或對角線上, 圖 2-4 為八皇后問題 92 組解的其中一種。. 12.
(23) 圖 2- 4. 八皇后問題的其中一種解. (取材自 Wikipedia). 2.3.2. 局部搜索. 局部搜索法,通常用在 NP-complete 問題、找近似解或是找出一組可能解的 問題上。這種搜索法是以一個可能的解為初始值,當成一個變量,而要找出的最 佳解其值當作恆量,利用搜索當前解的鄰域來尋找是否有更接近最佳解的可能, 但是缺點為容易陷入局部最佳解導致變量始終無法接近恆量。. 2.3.3 Random-restart hill climbing 對於各種演算法的分類,主要可區分為確定性(Deterministic)與隨機性 (Randomized)兩種。確定性演算法的定義為若輸入相同的資料,則得到的輸出 結果也會相同,因為計算步驟是完全依據輸入資料來決定;反之隨機性演算法則 不一定會產生同樣的輸出結果,也不一定會有同樣的執行順序。 本節介紹的 Random-restart hill climbing(隨機重啟爬山)演算法是屬於隨 機性最佳化演算法。爬山演算法的概念是循序漸進地往目標前進,首先選定一種 初始狀態,以此為基準點針對最佳化問題做修正,尋找鄰近狀態中是否有趨向最 13.
(24) 佳解的可能;若為最大化問題則往山頂找,若為最小化問題則往山谷找。但爬山 演算法是屬於局部搜索的演算法,在搜索是否有鄰近最佳解的可能時,其方式是 以目前狀態為出發點,反復往山頂或山谷走,一旦走進區域最佳解便無法折返, 而得不到全域最佳解(如圖 2-5)。. 圖 2- 5. 各種狀態下所對應的目標值. (取材自 http://www.handmade-insights.com/blog/2013/genetic-algorithms/state_space_landscape.png). 但若能設定閥值來決定是否要重啟新的初始狀態,跳脫局部最佳解,也就是 把 Random-restart(隨機重啟)的方法納入爬山演算法當中。閥值的定義可依照 問題需求做搭配,例如把當前解作為判斷條件;若現有解值在經過數回合的更新 後,還是無法有多少差異時,即可認定目前狀態陷入了局部最佳解,再利用隨機 重啟初始狀態的方法,讓程式有機會從其他的路線找到整體最佳解。. 14.
(25) 第3章. 研究方法. 3.1 整體架構(隨機重啟爬山法) 本研究實作方法之一採行 Random-restart hill climbing(隨機重啟爬山)演算 法,考量 Nonogram 解謎遊戲是屬於 NP-complete 問題範疇,想借助隨機演算法 的優點,有兩個特點對於這種非多項式時間內能求出最佳解的問題有所益處。第 一,隨機演算法通常會讓輸入資料的處理順序變為隨機性,因此若碰到對於程式 來說會需要最久解題時間的 Nonogram 謎題的情況下,會使其變得不是那麼有影 響性,也就能降低 Upper-bound 和 Lower-bound 的時間複雜度差距;第二,隨機 演算法並沒有像確定性(Deterministic)演算法那麼講求精確,當讀入輸入資料 後便開始依照程式所設計好完善的邏輯規則來走,程式設計需要對每種可能碰到 情況做預想,使它能根據情況來判斷該進入哪一個狀態,所以對於需要複雜判斷 處理的程式來說,從設計、實作到除錯階段,比起隨機性演算法,都會花費較多 的時間和工夫。 Nonogram 解謎遊戲事先會給定行和列兩邊的提示,用來表示該行或該列的 黑格所分布的型式,一般若使用以空白網格開始著手的話,會先用邏輯規則來決 定是否塗黑或標空格子,等到無法繼續推算時,再用 Backtracking(回溯法)以 試誤法(Try and Error)來找出剩下來未知的格子該塗黑或留白,這樣可以減少 遊戲樹的分枝度。 以 Random-restart hill climbing(隨機重啟爬山)演算法來實作的整體架構的. 15.
(26) 流程圖如下(圖 3-1):. 程式開始. 讀入資料. 隨機初始盤面 是. 區域最佳解?. 隨機搜索最佳解. 否. 否. 全域最佳解?. 是. 程式結束 圖 3- 1. 以隨機重啟爬山演算法實作 Nonogram 解題程式概念流程圖 16.
(27) 以隨機重啟爬山演算法實作 Nonogram 解題程式是先隨機生成滿足列提示的 盤面,以此為初始盤面,再隨機移動線段來滿足行提示的條件(圖 3-2) 。根據圖 3-1 所示,當程式讀入題目後,便以列提示為依據,隨機生成滿足列提示的盤面。 但是能夠直接形成答案的機率微乎其微,尤其當維度增大時,根據列提示所能產 生的排列組合數會暴增(參見表 1-4) 。圖 3-2 中的左圖表示的是要找出的答案, 同時滿足列及行提示所能產生的唯一解,而右圖為根據列提示的限制隨機可能生 成的盤面。初始生成的盤面只有滿足列提示的限制,同時目前盤面所對應的行提 示並不滿足題目所定義的,需要再把這些滿足列提示的線段(如圖 3-2 中標示為 灰色的區塊),隨機在同一列上橫向移動,搜索是否有足以趨近題目定義的行提 示的限制。. 圖 3- 2. 隨機生成盤面與隨機移動線段之示意圖. (左圖為同時滿足列及行提示所能產生的唯一解,右圖為根據列提示隨機生成的盤面). 17.
(28) 3.2 整體架構(Backtracking) 本研究實作方法之二採行 Backtracking 演算法,以 Backtracking 實作的解題 程式的作法是以列為主,以窮舉的方式根據列提示給的條件生成滿足列提示的組 合(見表 3-1:組合的生成順序為由大到小(組合對應的數值)),再測試當前空 格的合法性,看是否能滿足其對應的行提示的條件,從第一列開始以遞迴方式處 理。比較的方式以每一個格子是否會滿足其所在行提示的限制為 Backtracking 的 基準,根據 Nonogram 解謎遊戲解題規則非 0 即 1 的性質,若發現比對的空格猜 錯時,就會退回去,又因為窮舉法是會依照列提示所能產生的組合來由大到小做 列舉,所以當碰到不滿足的情況時,會直接跳過目前比對到的所有空格能夠產生 的組合,舉例如下: 當有一個列提示為{3, 1, 2},盤面維度為 10 則此線索可滿足的組合有下列 10 種(由大到小排列),見表 3-1: 列# 組合#. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 對應 數值. 1. 1. 1. 1. 0. 1. 0. 1. 1. 0. 0. 大. 2. 1. 1. 1. 0. 1. 0. 0. 1. 1. 0. 3. 1. 1. 1. 0. 1. 0. 0. 0. 1. 1. 4. 1. 1. 1. 0. 0. 1. 0. 1. 1. 0. 5. 1. 1. 1. 0. 0. 1. 0. 0. 1. 1. 6. 1. 1. 1. 0. 0. 0. 1. 0. 1. 1. 7. 0. 1. 1. 1. 0. 1. 0. 1. 1. 0. 8. 0. 1. 1. 1. 0. 1. 0. 0. 1. 1. 9. 0. 1. 1. 1. 0. 0. 1. 0. 1. 1. 10. 0 表 3- 1. 0 1 1 1 0 1 0 1 1 列提示為{3, 1, 2},盤面維度為 10 的條件下,可滿足的組合. 18. 小.
(29) 若比對到前 4 個空格分別滿足 1、1、1、0 的條件,但比對第 5 個空格發現 1 不能滿足行提示的條件時,會跳過所有以 11101 為起始數值的組合(表 3-1 中 標灰區域),而後直接從 11100 為起始數值的組合開始比對。. 19.
(30) 3.3 演算法設計(隨機重啟爬山法) 3.3.1. 隨機生成盤面. 由於隨機生成盤面並不需要先條列所有依提示所能產生的組合,必要的資訊 只有列提示及題目的維度即可,計算每個列提示能夠自由放置的留空格子個數, 便能以 rand()函式隨機生成盤面,為列提示中的每個線段指定索引位置,包含 起始位置及終止位置,這兩個索引位置就表示這條線段所佔的行範圍,圖 3-3 中 標示為灰色線段所佔的行範圍為第 1 行至第 3 行,所以它的起始索引位置記錄為 1,終止位置記錄為 3。. 圖 3- 3. 圖中標示為灰色線段所佔的行範圍為第 1 行至第 3 行. 同時記錄兩種索引位置,在計算可以橫向移動範圍時能立即判斷是否超出邊 界。. 3.3.2. 局部搜索最佳解. 當初始盤面生成好了之後,下一個階段就是要隨機挑選這些在上一小節已經 指定好索引位置的線段,判斷這個線段可以橫向移動的範圍,計算每一個位置是 否能夠讓目前盤面上的行提示更接近於題目所定義的,圖 3-4 表示灰色線段的移 動位置和移動後所造成的行提示變化(標記為網底)。可以看出在位移過程中,. 20.
(31) 線段在位移前後有重疊的部分它的行提示不變,只有在非重疊區域才有改變。. 圖 3- 4. 灰色線段的移動位置和移動後所造成的行提示變化(標記為網底). (左圖為目前盤面狀態,中圖及右圖分別為由左圖移動線段後的狀態) 因此在計算線段於不同位置上行提示的變化,和題目所定義的行提示之間的 差值,只需要處理沒有重疊的部分。 除了線段的選擇使用隨機方式外,線段移動的位置取決於在所有能夠減少差 值的位置中,隨機選定其中一種。. 3.3.3. 計算提示差值與全域最佳解. 計算線段於不同位置上行提示的變化,和題目所定義的行提示之間的差值的 方法如下: Case 1:當兩方的行提示的數目相等時,將每個相對應位置的數值相減取平 方再加總。 例:{1, 2, 2} 與 {1, 1, 1} (1 − 1)2 + (2 − 1)2 + (2 − 1)2 = 2 Case 2:當兩方的行提示的數目不相等時,將每個相對應位置的數值相減取 平方再加總,若沒有對應的數值時,則直接取平方(將對應的數值. 21.
(32) 以 0 計算)。 例:{1, 2, 2} 與 {1} (1 − 1)2 + (2 − 0)2 + (2 − 0)2 = 8 上述方法對於 Case 2 來說,對於找到全域最佳解是沒問題的,但是會造成 容易陷入局部最佳解的問題,因為對應位置之間的關係所造成的差別。 至於全域最佳解的判斷,則是當盤面上行提示和題目所定義的行提示相同時, 表示兩者的差值為 0,因此要由初始盤面開始,先計算目前盤面上行提示與題目 所定義的行提示之間的差值,設定此為要減少的目標差值,再隨機移動各條線段, 讓目標差值逐步減少至 0。. 3.3.4. 重啟機制. 避免陷入局部最佳解,需要設定重啟盤面的觸發條件,有三種判斷方式,第 一種方式會比較貼近於實際情形下對區域最佳解的判斷,圖 3-5 表示了當陷入區 域最佳解會導致目標值反復的在區域最佳解附近震盪,使得進展停滯。. 圖 3- 5. 陷入區域最佳解時目標值會在區域最佳解附近震盪. 22.
(33) 第二種方法是當隨機選擇線段時,沒有線段能夠讓差值降下來,所以沒有任 何線段可以選擇。 第三種方式是根據盤面的維度,以及列提示的數目大小來決定能夠位移線段 的次數總和。當盤面越大,或列提示的數目越小時,線段的移動範圍變大,因此 需要讓線段位移的次數變多才有機會得到解答。. 3.3.5. 改進方案. 本次實作使用的是隨機重啟爬山演算法,相較於爬山演算法改良版的 Simulated Annealing(模擬退火法)來說,因為爬山演算法一旦在鄰近區域找不 到比現有更好的解時,很容易困在區域最佳解;而模擬退火法的作法類似爬山演 算法,但它有時會接受比目前還差的解,所以能跳脫區域最佳解。當附近有較佳 的解時,就會無條件地改變目前的狀態,但是當鄰近沒有比目前更好的解時,會 先考慮鄰近解比現在差多少程度,同時考慮目前的系統溫度是多少,高溫時有比 較大的機會能接受較差的解,經由降溫的過程控制收斂的幅度。. 23.
(34) 3.4 演算法設計(Backtracking) 程式處理步驟,請見圖 3-6、圖 3-7、圖 3-8,是以盤面維度為 5 為例來說明。. 圖 3- 6. Backtracking 處理步驟示意圖 1. 24.
(35) 圖 3- 7. Backtracking 處理步驟示意圖 2(接續圖 3-6). 25.
(36) 圖 3- 8. Backtracking 處理步驟示意圖 3(接續圖 3-7). 26.
(37) 第4章. 實驗結果. 本實驗為測試使用 Random-restart hill climbing 的解題速度,以 Backtracking 來當作比較的基準。 本實驗所採用的測試平台規格如下: 系統:Windows 7 企業版 64 位元 處理器:Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz. 3.10GHz. 記憶體:8.00 GB 測試資料使用的是交大比賽用的出題程式,程式可以設定參數來調整盤面上 黑格所佔的比例,以比賽的標準而言,黑格的比例是規定由 0.5 慢慢降到 0.35, 共計 1000 題,因此越後面的題目會越難,因為黑格比例小則能夠生成的組合數 會越多。在本論文所使用的測試資料中,盤面的維度大小分別為 10、15、20 和 25,而設定的黑格的比例有兩種,各為 0.5~0.35 和 0.5,各別出 10 道題目,共計 8 種不同維度和黑格比例的測資,用意是為了比較不同解題方法的特性或缺失。 下列表格(從表 4-1 開始到表 4-16)為分別使用兩種演算法寫的程式,測試 不同的題目所花費的解題時間和相關數據,其中標示為“-”的欄位表示解題時 間超過 600 秒,但還是找不出答案。另外,在紀錄解題時間的精確度方面,若超 過 60 秒,小數點以下忽略不計,但若落在 60 秒以內,則取到小數點第三位。. 27.
(38) 維度為 10 的實驗數據;黑格比例:0.5~0.35 Test data# Algorithm. 1. 2. Random-restart hill climbing. 0.865. Backtracking. 3. 4. 5. 6. 7. 8. 9. 10. 0.230. 0.503. 0.074. 0.863. 26.120. 5.758. 3.407. 0.019. 7.971. 2.106. <10. -3. 0.390. 0.109. 0.749. 49.982. 1.201. 0.983. 0.203. 0.265. 0.242. 0.194. 0.757. 0.435. 0.772. 28.355. 6.937. 4.223. 0.337. 0.076. -3. -3. -3. -3. -3. 0.001. <10. -3. 0.001. 0.003. <10-3. <10. Test data#. <10. <10. <10. 0.015. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. 0.002. 0.003. 0.001. 表 4- 1 Info.. <10. 維度為 10 的測試資料(單位為秒);黑格比例:0.5~0.35 執行時間. 左移次數. 右移次數. (sec.). 總計移動次 數. 重啟盤面 次數. 1. 0.865. 24,137. 24,054. 48,191. 12. 2. 0.230. 6,102. 6,079. 12,181. 4. 3. 0.503. 14,020. 14,018. 28,038. 7. 4. 0.074. 4,171. 4,119. 8,290. 3. 5. 0.863. 34,442. 34,202. 68,644. 18. 6. 26.120. 615,188. 612,441. 1,227,629. 340. 7. 5.758. 144,901. 143,885. 288,786. 78. 8. 3.407. 63,560. 63,364. 126,924. 43. 9. 0.019. 360. 349. 709. 0. 10 7.971 212,539 211,554 424,093 120 表 4- 2 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5~0.35(#1 Run) Info. Test data#. 執行時間. 左移次數. 右移次數. (sec.). 總計移動次 數. 重啟盤面 次數. 1. 2.106. 62,268. 62,103. 124,371. 32. 2. <10. -3. 84. 79. 163. 1. 3. 0.390. 12,043. 12,046. 24,089. 6. 4. 0.109. 4,064. 4,027. 8,091. 2. 5. 0.749. 34,694. 34,515. 69,209. 18. 6. 49.982. 1,208,293. 1,202,919. 2,411,212. 701. 7. 1.201. 30,332. 30,005. 60,337. 16. 8. 0.983. 22,338. 22,311. 44,649. 16. 9. 0.203. 4,066. 4,070. 8,136. 2. 10 0.265 8,198 8,165 16,363 4 表 4- 3 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5~0.35(#2 Run) 28.
(39) 維度為 10 的實驗數據;黑格比例:0.5 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. 0.858. 0.218. 0.016. 0.296. 0.749. 1.716. <10-3. 30.404. 0.281. 3.791. 1.981. <10. -3. 0.062. 1.186. 0.390. 5.616. 0.577. 2.558. 0.968. 9.625. 0.499. 0.047. 0.546. 0.171. 0.078. 0.265. <10-3. 2.122. 0.359. 2.683. -3. -3. -3. 0.001. <10. -3. -3. -3. -3. -3. <10-3. Backtracking. <10. <10. <10. <10. <10. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. <10-3. 0.001. <10-3. <10-3. <10-3. <10-3. <10-3. 維度為 10 的測試資料(單位為秒);黑格比例:0.5. 執行時間. 左移次數. 右移次數. (sec.). Test data#. <10. <10-3. 表 4- 4 Info.. <10. 總計移動 次數. 重啟盤面 次數. 1. 0.858. 22,116. 22,020. 44,136. 12. 2. 0.218. 6,102. 6,057. 12,159. 3. 3. 0.016. 280. 259. 539. 1. 4. 0.296. 10,108. 10,026. 20,134. 5. 5. 0.749. 28,652. 28,439. 57,091. 17. 6. 1.716. 42,178. 41,932. 84,110. 23. 7. <10. -3. 39. 23. 62. 0. 8. 30.404. 583,104. 581,790. 1,164,894. 418. 9. 0.281. 8,071. 8,010. 16,081. 4. 10 表 4- 5 Info. Test data#. 3.791 98,317 98,068 196,385 56 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5(#1 Run) 執行時間. 左移次數. 右移次數. (sec.). 總計移動 次數. 重啟盤面 次數. 1. 1.981. 58,292. 58,018. 116,310. 32. 2. <10. -3. 152. 137. 289. 0. 3. 0.062. 2,030. 2,033. 4,063. 1. 4. 1.186. 42,298. 41,972. 84,270. 22. 5. 0.390. 16,402. 16,220. 32,622. 11. 6. 5.616. 154,581. 153,871. 308,452. 86. 7. 0.577. 16,088. 16,017. 32,105. 8. 8. 2.558. 52,992. 52,834. 105,826. 34. 9. 0.968. 36,206. 35,919. 72,125. 19. 10 表 4- 6. 9.625 256,989 256,156 513,145 149 使用隨機演算法測試維度為 10 的題目;黑格比例:0.5(#2 Run) 29.
(40) 維度為 15 的實驗數據;黑格比例:0.5~0.35 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. -. -. -. -. -. -. -. 100. -. 8.081. -. -. -. -. -. -. -. 80. -. 7.004. -. -. -. -. -. 46.41. -. 58.547. -. 123. 0.004. 0.492. 0.001. 0.002. 0.007. 0.07. 0.468. 17.246. 57.928. 0.001. 0.015. 0.484. <10. -3. 0.015. <10. -3. 0.078. 0.439. 16.368. 54.995. <10-3. 0.015. 0.468. <10-3. <10-3. <10-3. 0.078. 0.437. 16.365. 55.007. <10-3. Backtracking. 表 4- 7 Info. Test data#. 維度為 15 的測試資料(單位為秒);黑格比例:0.5~0.35 執行時間. 左移次數. 右移次數. 總計移動 次數. 重啟盤面 次數. (sec.). 1. -. -. -. -. -. 2. -. -. -. -. -. 3. -. -. -. -. -. 4. -. -. -. -. -. 5. -. -. -. -. -. 6. -. -. -. -. -. 7. -. -. -. -. -. 8. 100. 996,687. 987,228. 1,983,915. 321. 9. -. -. -. -. -. 10 8.081 74,036 73,235 147,271 23 表 4- 8 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5~0.35(#1 Run) 執行時 間(sec.). 左移次數. 右移次數. 總計移動 次數. 重啟盤面 次數. 1. -. -. -. -. -. 2. -. -. -. -. -. 4. -. -. -. -. -. 5. -. -. -. -. -. 6. -. -. -. -. -. 7. -. -. -. -. -. 8. 80. 828,626. 820,771. 1,649,397. 263. 9. -. -. -. -. -. Info. Test data#. 3. 10 7.004 63,232 62,458 125,690 22 表 4- 9 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5~0.35(#2 Run) 30.
(41) 維度為 15 的實驗數據;黑格比例:0.5 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. -. 21.309. -. -. -. -. -. -. -. 598. -. -. -. -. -. 417. -. -. -. -. -. -. -. -. -. Backtracking. 0.015. 0.031. <10-3. <10-3. <10-3. <10-3. <10-3. 0.003. 0.024. <10-3. <10-3. <10-3. 0.005. 0.002. Test data#. <10. -3. <10. -3. <10. -3. -. <10. 表 4- 10. -3. -. 0.031. <10. Info.. -. -3. <10. -3. 141. <10-3. <10-3. <10-3. <10-3. <10-3. 0.004. 0.001. <10. 維度為 15 的測試資料(單位為秒);黑格比例:0.5. 執行時間. 左移次數. 右移次數. 總計移動 次數. 重啟盤面 次數. (sec.). 1. -. -. -. -. -. 2. 21.309. 201,883. 200,156. 402,039. 64. 3. -. -. -. -. -. 4. -. -. -. -. -. 5. -. -. -. -. -. 6. -. -. -. -. -. 7. -. -. -. -. -. 8. -. -. -. -. -. 9. -. -. -. -. -. 10 表 4- 11 Info. Test data#. 598 6,632,759 6,582,702 13,215,461 2096 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5(#1 Run) 執行時間. 左移次數. 右移次數. 總計移動 次數. 重啟盤面 次數. (sec.). 1. -. -. -. -. -. 2. -. -. -. -. -. 3. -. -. -. -. -. 4. -. -. -. -. -. 5. -. -. -. -. -. 6. 417. 5,730,283. 5,684,129. 11,414,412. 1799. 7. -. -. -. -. -. 8. -. -. -. -. -. 9 10 表 4- 12. -. -3. <10. -3. 使用隨機演算法測試維度為 15 的題目;黑格比例:0.5(#2 Run) 31.
(42) 維度為 20 的實驗數據;黑格比例:0.5~0.35 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. 3.902. 0.936. -. -. 9.452. 180. 7.616. 280. -. -. 4.019. 0.973. -. -. 9.688. 180. 7.536. 280. -. -. 3.979. 0.951. -. -. 9.689. 180. 7.537. 280. -. -. Backtracking. 表 4- 13. 維度為 20 的測試資料(單位為秒);黑格比例:0.5~0.35. 維度為 20 的實驗數據;黑格比例:0.5 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. Backtracking. -. -. -3. 0.124. 1.795. 3.885. 0.125. 0.483. 2.418. 0.016. 0.016. 0.14. <10. 3.979. 0.126. 0.489. 2.476. 0.017. 0.006. 0.153. 0.009. 0.125. 1.834. 0.016. -3. 0.141. 0.015. 0.125. 1.841. 3.984. 表 4- 14. 0.124. 0.5. 2.48. <10. 維度為 20 的測試資料(單位為秒);黑格比例:0.5. 32.
(43) 維度為 25 的實驗數據;黑格比例:0.5~0.35 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. 0.686. -. -. -. 157. -. -. -. -. -. 0.717. -. -. -. 157. -. -. -. 0.717. -. -. -. 157. -. -. -. -. -. Backtracking. 表 4- 15. 維度為 25 的測試資料(單位為秒);黑格比例:0.5~0.35. 維度為 25 的實驗數據;黑格比例:0.5 Test data# Algorithm. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Random-restart hill climbing. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. -. 0.702. 80. 0.827. 8.768. 0.047. 1.265. 12.624. 0.25. 0.687. 0.156. 0.703. 80. 0.858. 9.023. 0.047. 1.295. 12.999. 0.266. 0.702. 0.171. 0.702. 80. 0.858. 9.022. 0.047. 1.279. 13.001. 0.265. 0.702. 0.172. Backtracking. 表 4- 16. 維度為 25 的測試資料(單位為秒);黑格比例:0.5. 33.
(44) 第5章. 結論與分析. 很顯然的可以看出,對於使用隨機重啟爬山演算法的程式來說,盤面維度大 於 10 的話,機率會在解題速度的快慢的影響上佔有很大的因素,因為不論是重 啟盤面或者是線段的移動上,都有機率的成份。由於決定是否要重啟盤面的閥值 是以判斷目前的線段位移次數總和是否大於一個估計值為基準,所以當重啟盤面 的次數越多,每重開新盤面就會造成一大筆因為計算,而造成整體解題時間的開 支。因此盤面的狀況也會影響解題速度,而線段的移動調整上,位移量也是以能 夠在不會增加偏差值的條件下,以機率做選擇。 因此,使用隨機重啟爬山演算法的程式,在相同的測試資料下,跑出來的解 題時間不會像使用回溯法的程式一樣沒什麼差異。另外,對於題目的難易度,黑 格比例的大小上,兩種演算法都是有共同的弱點;因為黑格比例越低,對隨機演 算法的程式而言,隨機生成盤面的組合會越多,而且線段能夠任意移動的間距也 越大,總體上要彼此協調的可能性就越低;而對於回溯法的程式而言,列提示和 行提示能夠滿足的組合數也越多,因此提高了要同時滿足列提示和行提示限制條 件的難度。. 34.
(45) 參考文獻 [1] 尤瓊雪,一個有效解決日本益智遊戲「發現小花」的演算法,國立交通大學 資訊科學與工程研究所碩士論文,2007。. [2] 陳建志,進化式演算法於邏輯拼圖之研究,國立屏東教育大學資訊科學系碩 士論文,2008。. [3] 葉家郡、黃國展,Nonogram 解題加速方法探討,科技部大專學生研究計畫, 2014。. [4] I-Chen Wu, Der-Johng Sun, Lung-Ping Chen , Kan-Yueh Chen, Ching-Hua Kuo, Hao-Hua Kang, Hung-Hsuan Lin, “An Efficient Approach to Solving Nonograms,” IEEE Transactions on Computational Intelligence and AI in Games (SCI), 2013.. [5] 張嘉豪、林怡秀,增進 Nonogram 解題效率人工智慧與演算法之研究與應用, 國立臺灣師範大學資訊工程學系專題,2016。. [6] 林伯陽、陳鍾誠,採用失敗後跳躍的策略以改良爬山演算法,第八屆離島資 訊技術與應用研討會,2009。. [7] B. Batenburg and W. Kosters, “A Distance Tomography Approach to Japanese Puzzle,” Proceedings of the Belgian-Dutch conference on artificial intelligence, pp. 243–50, 2004.. [8] K. J. Batenburg and W. A. Kosters, “Solving Nonograms by Combining Relaxations,” Pattern Recognition, vol. 42, no. 8, pp. 1672–1683, 2009.. [9] Concept: Types of algorithms, http://www.mi.fu-berlin.de/wiki/pub/ABI/DiscretMathWS10/runtime.pdf. 35.
(46)
Outline
相關文件
在選擇合 適的策略 解決 數學問題 時,能與 別人溝通 、磋商及 作出 協調(例 如在解決 幾何問題 時在演繹 法或 分析法之 間進行選 擇,以及 與小組成 員商 討統計研
• 買股票是要買該股票「未來的配息」,所 以應該應用未來的EPS的資訊來估計股
• 利用資訊科技解決問題:停課期間,學校利 用Zoom視像教學,並以Google Classroom作
• 這種 學與教策略把歷史了 解和歷史思考的權利還給 學生,激發了同學之間的 互動,有利協作能力的發
Zivot and Andrews(1992) 將 Perron(1989) 擴充成考慮未知結構性 轉變的單根檢定 , 其概念與之前 max-Chow 檢定一樣 : 找出一個轉 變點
資料探勘 ( Data Mining )
各系所正取生請於民國 104 年 12 月 30 日(星期三)前於本校招生資訊網 http://www.cyut.edu.tw/~recruit
在選擇合 適的策略 解決 數學問題 時,能與 別人溝通 、磋商及 作出 協調(例 如在解決 幾何問題 時在演繹 法或 分析法之 間進行選 擇,以及 與小組成 員商 討統計研