【智能算法】迭代局部搜索(Iterated Local Search, ILS)詳解


更多精彩盡在微信公眾號【程序猿聲】

迭代局部搜索(Iterated Local Search, ILS)

00 目錄

  • 局部搜索算法
  • 簡單局部搜索
  • 迭代局部搜索

01 局部搜索算法

1.1 什么是局部搜索算法?

局部搜索是解決最優化問題的一種啟發式算法。因為對於很多復雜的問題,求解最優解的時間可能是極其長的。因此誕生了各種啟發式算法來退而求其次尋找次優解,局部搜索就是其中一種。它是一種近似算法(Approximate algorithms)。

局部搜索算法是從爬山法改進而來的。簡單來說,局部搜索算法是一種簡單的貪心搜索算法,該算法每次從當前解的臨近解空間中選擇一個最優解作為當前解,直到達到一個局部最優解。局部搜索從一個初始解出發,然后搜索解的鄰域,如有更優的解則移動至該解並繼續執行搜索,否則返回當前解。

1.2 算法思想過程

局部搜索會先從一個初始解開始,通過鄰域動作。產生初始解的鄰居解,然后根據某種策略選擇鄰居解。一直重復以上過程,直到達到終止條件。

不同局部搜索算法的區別就在於:鄰域動作的定義以及選擇鄰居解的策略。這也是決定算法好壞的關鍵之處。

1.3 什么又是鄰域動作?

其實鄰域動作就是一個函數。那么,通過這個函數,對當前的最優解s,產生s對應的鄰居解的一個集合。比如:

對於一個bool型問題,其當前解為:s = 1001,當將鄰域動作定義為翻轉其中一個bit時,得到的鄰居解的集合N(s)={0001,1101,1011,1000},其中N(s) ∈ S。同理,當將鄰域動作定義為互換相鄰bit時,得到的鄰居解的集合N(s)={0101,1001,1010}.

02 簡單局部搜索

在開始我們的迭代局部搜索之前,還是先來給大家科普幾個簡單局部搜索算法。他們也是基於個體的啟發式算法(Single solution)。

2.1 爬山法(HILL-CLIMBING)

干貨 | 用模擬退火(SA, Simulated Annealing)算法解決旅行商問題

2.2 模擬退火(SIMULATED ANNEALING)

干貨 | 用模擬退火(SA, Simulated Annealing)算法解決旅行商問題

2.3 模擬退火(SIMULATED ANNEALING)

干貨|十分鍾快速復習禁忌搜索(c++版)

干貨 | 十分鍾掌握禁忌搜索算法求解帶時間窗的車輛路徑問題(附C++代碼和詳細代碼注釋)

03 迭代局部搜索(Iterated Local Search, ILS)

3.1 介紹

迭代局部搜索屬於探索性局部搜索方法(EXPLORATIVE LOCAL SEARCH METHODS)的一種。它在局部搜索得到的局部最優解上,加入了擾動,然后再重新進行局部搜索。

3.2 過程描述

注:下文的局部搜索(或者LocalSearch)指定都是簡單局部搜索。指上文介紹的三種中的任意一種。

  1. 從初始解s中進行局部搜索,找到一個局部最優解s1。
  2. 擾動s1,獲得新的解s2。
  3. 從新解s2中進行局部搜索,再次找到一個局部最優解s3。
  4. 基於判斷策略,對s3好壞進行判斷。選擇接受s3作為新解或者回退s2。
  5. 直到找到滿足條件的最優解,不然跳回第二步。

其圖解如下:

imageimage

偽代碼如下:

imageimage

關於其中的接受判斷准則,這里采用了模擬退火中的概率函數:

imageimage

04 代碼時間

以下C++代碼還是用於求解TSP旅行商問題。至於什么是旅行商問題,讀者可以從爬山算法那篇文章了解。

欲獲取代碼,請關注我們的微信公眾號【程序猿聲】,在后台回復:ILS代碼。即可獲取。

微信公眾號微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM