【智能算法】迭代局部搜索(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)指定都是簡單局部搜索。指上文介紹的三種中的任意一種。
其圖解如下:
image偽代碼如下:
image關于其中的接受判斷準則,這里采用了模擬退火中的概率函數:
image04 代碼時間
以下C++代碼還是用于求解TSP旅行商問題。至于什么是旅行商問題,讀者可以從爬山算法那篇文章了解。
欲獲取代碼,請關注我們的微信公眾號【程序猿聲】,在后臺回復:ILS代碼。即可獲取。
微信公眾號轉載于:https://www.cnblogs.com/dengfaheng/p/9245559.html
總結
以上是生活随笔為你收集整理的【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 太行山大峡谷退伍军人免票吗
- 下一篇: 湖北仙桃市手机卡怎么收到西安电网信息