2018-4-8 禁忌搜索算法(Tabu Search or Taboo Search TS)

書本《智能優化算法及其matlab實現》第146-153頁

禁忌:禁止重複之前的工作,禁止走之前走過的路

原因:

爲了改進局部鄰域搜索容易陷入局部最優的不足,禁忌搜索算法引入了一個禁忌表,記錄搜索過的局部最優點,在下一次的搜搜中,對禁忌表中的信息不再進行搜索或有選擇的搜,依次跳出局部最優解。

1.局部搜索

(1)選定可行解x0,記錄當前最優解xbest = x0 ,T = N(xbest)。初始化,(可隨機的選取,通常憑經驗)N(xbest)表示xbest的鄰域

(2)當T - xbest = 空集  (表示鄰域搜索完了) 或者是滿足其他的終止條件,輸出結果,停止運算,否則進行第三步

(3)從T 中選擇一集合S ,得到S中的最好解xnow 。若f(xnow)<f(xbest),則xbest = xnow,T = N(xbest);否則 T = T - S

重複(2),繼續搜索

缺點:

(1)搜索的好壞完全的依賴於初始解的選擇

(2)鄰域的選擇,以及設置也至關重要(會不會有一種情況,選擇的領域半徑不夠大,將最優解遺漏)

(3)若不在搜索策略上進行改進,要實現全局尋優就必須使用「完全的」鄰域函數。

基於以上的種種缺點,爲了更好的進行全局尋優設計出了「禁忌搜索」

禁忌搜索

我的理解:

是模擬人的大腦,當人找東西的時候,通常找過的地方就不會再去尋找(所以衍生出了禁忌表),但是當我們找東西的時候,有可能一遍找不到,這樣的話我們就會開始回溯最優可能的一些地方(赦免一些在禁忌表中的地方)。



「開發」和「探索」是智能算法中的兩個階段。

算法步驟:

(1)給定禁忌搜索算法參數,隨機產生初始解x,置空禁忌表

(2)判斷算法終止條件是否滿足,是,輸出優化結果,否,繼續一下步驟

(3)利用當前解的鄰域函數產生其所有(或若干)鄰域解,並從中確定若干候選解

(4)對候選解判斷藐視規則是否滿足,是,則用藐視規則的最佳狀態y代替x成爲新的當前解,即x = y 並用與y 對應的禁忌對象替換最早進入禁忌表的禁忌對象(y是現在的當前進行搜索的地方1,植入禁忌表2,切換狀態)同時用y替換「best so far 」狀態,然後轉入(6),否,(5)

(5)判斷候選解對應到各對象的禁忌屬性,選擇候選解集中非禁忌對象對應的最佳狀態爲新的當前解,同時用與之對應的禁忌對象替換最早進入禁忌表的禁忌對象。

(6)判斷算法終止條件是否滿足;是 則結束算法並輸出優化結果,否轉(3)

流程圖:


關鍵參數說明:

(1)候選解

通常是在當前狀態的鄰域中擇優選取,選取過多,容易造成較大的計算量,而過少則容易「早熟」。通常是確定性(自己經驗)或隨機性的產生,大小根據問題而定

(2)禁忌表

主要目的是:阻止搜索過程中出現循環和避免陷入局部最優。它通常記錄若干次的移動,禁止這些一定在近期返回。在迭代固定次數後,禁忌表釋放這些移動,重新參加運算,因此它是一個循環表,沒迭代一次,就將最近的以此移動放在禁忌表的末端,而它的最早的一個移動就從禁忌表中釋放出來。

(3)禁忌長度

禁忌表中的對象最大不允許被選中的次數(不考慮特赦的情況)

(4)藐視準則

在禁忌搜索算法中,可能會出現候選解全部被禁忌,或者存在一個優於「best so far 」狀態的禁忌候選解,此時特設準則將某些狀態解禁,已實現更高效的優化

特設準則:

(1基於適配值的原則:某個禁忌候選解的適配值優於「best so far」則解禁爲當前狀態和新的「best sofar」狀態

(2基於搜索方向的準則:若禁忌對象上次被禁忌時使得適配值有所改善,並且目前該禁忌對象對應的候選解的適配值優於當前解,則對解禁。

(5)終止準則

1)最大迭代步數

2)設定某個對象最大禁忌頻率

3)設定適配置的偏離閾值


例子:

以及matlab代碼,可以運行來源TS解決TSP:

禁忌搜索算法(Tabu Search) - CSDN博客https://blog.csdn.net/zuochao_2013/article/details/72292466