# 第四章 Local Search Algorithms and Optimization Problems ## Local Search 演算法 局部搜尋(Local Search)是一種基於解空間的優化方法,主要用於解決組合優化問題。其核心思想是從一個初始解開始,通過在鄰域中尋找更好的解來逐步改進。 - 局部搜尋 = 使用一個目前狀態,並轉移到鄰近的狀態 - **不需要全局資訊**:僅依賴當前狀態的鄰域資訊。 - **適用於大規模問題**:能夠處理搜索空間非常大的問題。 - 使用非常少的記憶體 - 找到的解通常是可接受的 - **可能陷入局部最優**:需要額外的策略來跳出局部最優解。 ### 爬山演算法(Hill Climbing) 爬山演算法是一種簡單的局部搜尋方法,通過不斷選擇鄰域中最好的解來尋找全局最優解。像是在爬山一樣,當前的狀態就像山上的位置,接著盡可能的向上爬,直到無法再上升為止。其主要步驟包括: 1. 從初始狀態開始。 2. 在鄰域中選擇一個比當前解更好的解。 3. 重複此過程,直到無法找到更好的解為止。 #### 優點 - 簡單易實現。 - 適合於連續改進的問題。 #### 缺點 - 容易陷入局部最佳解。 - 無法處理具有多個峰值的問題。 #### 改進方法 - **隨機重啟**:在多次運行中隨機選擇不同的初始狀態。 - **擴展鄰域**:在每次迭代中考慮更大的鄰域。(看得更遠) ### 模擬退火(Simulated Annealing) 模擬退火是一種基於物理退火過程的演算法,通過在早期允許接受較差解來避免陷入局部最佳解。其主要步驟包括: 1. 初始化溫度和初始狀態。 2. 隨機選擇鄰域中的一個狀態。 3. 根據接受概率函數決定是否接受該解。 - 初期接受較差解的機率較高,隨時間(溫度)降低。 4. 隨著迭代次數增加,逐漸降低溫度。 #### 優點 - 能夠跳出局部最佳解。 - 適合於解空間複雜的問題。 #### 缺點 - 參數調整(如初始溫度和降溫速率)較為困難。 ### Local Beam Search Local Beam Search 是一種改進的局部搜尋方法,通過保持多個狀態來探索狀態空間。其主要步驟包括: #### 特色 - **多個候選狀態** - 與爬山演算法只維護一個當前狀態不同,Beam Search 同時追蹤多個狀態。 - 這些狀態被稱為「光束」(beam)。 - **鄰域生成**: - 每個候選解都會生成其鄰域解。 - 將所有鄰域狀態合併,從中選擇最好的幾個狀態作為下一次迭代的候選狀態。 - 光束的大小(beam width)是固定的,僅保留前幾個最佳解。 - **選擇策略**: 1. 初始化多個解。 2. 在每個解的鄰域中選擇最好的解。 3. 將所有選擇的解合併,並保留最好的幾個解。 - 通常根據目標函數的值選擇最好的狀態。 4. 重複以上過程,直到滿足終止條件。 5. 最後選擇最好的解作為結果。 ### 遺傳演算法(Genetic Algorithms) 遺傳演算法模仿自然選擇的過程,通過選擇、交叉和突變操作來生成更好的解。其主要步驟包括: 1. 初始化種群。 2. 計算每個個體的適應度。 3. 根據適應度選擇父母進行交叉。 4. 對後代進行隨機突變。 5. 重複以上過程,直到滿足終止條件。 #### 優點 - 適合於非線性和多峰值問題。 - 能夠探索更大的解空間。 #### 缺點 - 計算成本較高。 - 需要設計適當的適應度函數。