2.3.1 八皇后問題
八皇后問題是從西洋棋棋規裡的皇后走步與吃子方法所衍生出來的約束滿 足問題,是由西洋棋棋手 Max Bezzel 於 1848 年提出,在 1850 年才由 Franz Nauck 解出,而後又把問題擴展,棋盤大小由 8×8 延伸至 n×n 的規模。西洋棋裡皇后 的走步或吃子方法為橫走、直走或延著對角線斜走,格數不限,但不能跨越其他 棋子,八皇后問題是要在 8×8 的棋盤上找出八皇后的擺放位置,但又不能讓任一 皇后吃掉其他皇后,等同於不能有任兩個皇后在同一垂直線、水平線或對角線上,
圖 2-4 為八皇后問題 92 組解的其中一種。
圖 2- 4 八皇后問題的其中一種解
(取材自 Wikipedia)
2.3.2 局部搜索
局部搜索法,通常用在 NP-complete 問題、找近似解或是找出一組可能解的 問題上。這種搜索法是以一個可能的解為初始值,當成一個變量,而要找出的最 佳解其值當作恆量,利用搜索當前解的鄰域來尋找是否有更接近最佳解的可能,
但是缺點為容易陷入局部最佳解導致變量始終無法接近恆量。
2.3.3 Random-restart hill climbing
對於各種演算法的分類,主要可區分為確定性(Deterministic)與隨機性
(Randomized)兩種。確定性演算法的定義為若輸入相同的資料,則得到的輸出 結果也會相同,因為計算步驟是完全依據輸入資料來決定;反之隨機性演算法則 不一定會產生同樣的輸出結果,也不一定會有同樣的執行順序。
本節介紹的 Random-restart hill climbing(隨機重啟爬山)演算法是屬於隨 機性最佳化演算法。爬山演算法的概念是循序漸進地往目標前進,首先選定一種 初始狀態,以此為基準點針對最佳化問題做修正,尋找鄰近狀態中是否有趨向最
佳解的可能;若為最大化問題則往山頂找,若為最小化問題則往山谷找。但爬山 演算法是屬於局部搜索的演算法,在搜索是否有鄰近最佳解的可能時,其方式是 以目前狀態為出發點,反復往山頂或山谷走,一旦走進區域最佳解便無法折返,
而得不到全域最佳解(如圖 2-5)。
圖 2- 5 各種狀態下所對應的目標值
(取材自 http://www.handmade-insights.com/blog/2013/genetic-algorithms/state_space_landscape.png)
但若能設定閥值來決定是否要重啟新的初始狀態,跳脫局部最佳解,也就是 把 Random-restart(隨機重啟)的方法納入爬山演算法當中。閥值的定義可依照 問題需求做搭配,例如把當前解作為判斷條件;若現有解值在經過數回合的更新 後,還是無法有多少差異時,即可認定目前狀態陷入了局部最佳解,再利用隨機 重啟初始狀態的方法,讓程式有機會從其他的路線找到整體最佳解。