禁忌搜索算法(Tabu Search,TS))

干貨 | 到底是什么算法,能讓人們如此絕望?

禁忌搜索
  • TS是Local Search(LS)的擴展,是一種全局逐步尋優(yōu)的全局性鄰域搜索算法。
  • TS模仿人類的記憶功能,在搜索過程中標記已經(jīng)找到的局部最優(yōu)解及求解過程,并于之后的搜索中避開它們
  • 算法通過禁忌策略實現(xiàn)記憶功能,通過破禁準則繼承LS的強局部搜索能力。使得TS一方面具備高局部搜索能力,同時又能防止算法在優(yōu)化中陷入局部最優(yōu)。
TS主要構成要素
  1. 評價函數(shù)(Evaluation Function):用來評價鄰域中的鄰居、判斷其優(yōu)劣的衡量指標。
  2. 鄰域移動(Move Operator):進行解轉移的關鍵,又稱“算子”,影響整個算法的搜索速度。
  3. 禁忌表(Tabu Table):記錄被禁止的變化,以防出現(xiàn)搜索循環(huán)、陷入局部最優(yōu)。
    對其設計中最關鍵的因素是禁忌對象(禁忌表限定的對象)和禁忌步長(對象的禁忌在多少次迭代后失效)。
    禁忌表是禁忌搜索算法的核心,禁忌表的對象、步長及更新策略在很大程度上影響著搜索速度和解的質量。若禁忌對象不準確或者步長過小,算法避免陷入局部最優(yōu)的能力會大打折扣;若禁忌表步長過大,搜索區(qū)域將會限制,好的解就可能被跳過。
  4. 鄰居選擇策略(Neighbor Selection Strategy):選擇最佳鄰域移動的規(guī)則。目前最廣泛采用的是“最優(yōu)解優(yōu)先策略”及“第一個改進解優(yōu)先策略”。
  5. 破禁準則(Aspiration Criterion):對于禁忌表的適度放松。當某個被禁忌的移動可得到優(yōu)于未被禁忌的移動得到的最優(yōu)鄰域解和歷史所得到的最優(yōu)解時,算法應接受該移動,不受禁忌表的限制。
  6. 停止規(guī)則(Stop Criterion):禁忌搜索中停止規(guī)則的設計多種多樣,如最大迭代數(shù)、算法運行時間、給定數(shù)目的迭代內不能改進解或組合策略等等。
TS算法性能

通過一系列關于TSP的實驗得到以下結論:

  1. 禁忌策略大大加強了算法的搜索能力
  2. 問題規(guī)模較小時,禁忌搜索能得到最優(yōu)解;
    問題規(guī)模較大時,禁忌搜索能在規(guī)定時間內輸出滿意解。
  3. 禁忌對象的選擇對算法效果存在較大影響

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

TS基本步驟
  1. 初始化
    利用貪婪算法等局部搜索算法生成一個初始解,清空禁忌表,設置禁忌長度
  2. 鄰域搜索產(chǎn)生候選解
    根據(jù)步驟1產(chǎn)生初始解,通過搜索算子(search operators),如relocation、exchange、2-opt等,產(chǎn)生候選解(candidate solution),并計算各個候選解的適應值(即解對應的目標函數(shù)值)
  3. 選擇最好的候選解
    從步驟2產(chǎn)生的所有候選解中選出適應值最好的候選解,將其與當前最好解(即搜索算法開始到現(xiàn)在找到的最好解)進行比較
    如果優(yōu)于當前最好解,那么就不考慮其是否被禁忌,用這個最好的候選解來更新當前最好解,并且作為下一個迭代的當前解,然后將對應的操作加入禁忌表;
    如果不優(yōu)于當前最好解,就從所有候選解中選出不在禁忌狀態(tài)下的最好解作為新的當前解,然后將對應操作加入禁忌表。
  4. 判斷終止條件
    若滿足終止條件,則立即停止并輸出當前最好解;否則繼續(xù)搜索。
    一般終止條件為是否到達一定的迭代次數(shù)或者達到了一個時間限制

TS流程圖

禁忌搜索算法流程圖

禁忌搜索算法涉及編碼解碼(Encoding and decoding)、搜索算子(search operators)、鄰域 (Neighborhood)、禁忌表(Tabu list)、禁忌長度(Tabu tenure)、候選解(Candidate solution)、藐視準則(Aspiration criterion)等關鍵組成部分。

TS求解TSP

算例

5個城市的TSP算例

  1. 編碼和解碼


    初始解

    初始解對應的適應度F=37

  2. 搜索算子
    (1)Relocation算子:在當前解中選擇并移除一個節(jié)點(node),然后再選擇一個位置將選中的節(jié)點插入


    relocation算子

    適應度變化量△F=6
    (2)Swap算子:在當前解中同時選擇兩個不同的節(jié)點,然后對這兩個節(jié)點的位置交換


    swap算子

    適應度變化量△F=4
  3. 鄰域
    從當前解對一系列的搜索方向進行一次試探(通過算子搜索一次)能得到的所有解的集合,即僅經(jīng)過一次操作能得到的所有解


    鄰域(候選解集合)
  4. 禁忌表
    記錄當前所選擇操作的狀態(tài)變化,一般包括禁忌對象和禁忌長度


    候選解10改進最大,禁忌對象如圖所示
  5. 禁忌長度
    禁止在之后的l次迭代中對禁忌表中所記錄的狀態(tài)進行改變,這里的l即稱為禁忌長度
  6. 候選解
    當前鄰域中的解
  7. 藐視準則
    從候選解集合中挑選出最好的候選解,將其與當前最好解進行比較,若其是被禁止的解但是優(yōu)于當前最好解,那么就將其解禁,用來作為下一迭代的當前解并及替代當前最好解。
    藐視準則(Aspiration criterion)防止了因為禁忌表的存在,而錯過優(yōu)異解的情況出現(xiàn)。
TS求解VRPTW

VRPTW:帶時間窗的車輛路徑問題
問題描述
假設一個配送中心為周圍若干個位于不同地理位置、且對貨物送達時間有不相同要求的客戶點提供配送服務。其中,配送中心全部用于運行的車輛都是同一型號的(即擁有相同的容量);配送中心對車輛出入的時間有限制;車輛在所有客戶點有相同的停留服務時間
操作設置

  • 編碼方式采取自然數(shù)編碼,利用將車輛所需服務客戶點的集合(解集)作為集合內元素數(shù)目大小的自然數(shù)數(shù)組。數(shù)組中各個元素的值代表各個客戶點的編號,元素的順序代表服務客戶點的順序。
  • 搜索算子采用插入算子:刪除原路徑中的客戶節(jié)點,遍歷插入到任意車輛路徑的任意位置,選取鄰域最好解或者非禁忌最好解作為下一迭代的當前解。鄰域為插入算子完全遍歷能得到的解的集合。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 局部搜索算法 目錄: 1、數(shù)學定義 2、過程描述 3、算法簡介 4、總結 1、數(shù)學定義 局部搜索是解決最優(yōu)化問題的...
    迷之菌閱讀 10,486評論 0 3
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,887評論 28 54
  • 信任包括信任自己和信任他人 很多時候,很多事情,失敗、遺憾、錯過,源于不自信,不信任他人 覺得自己做不成,別人做不...
    吳氵晃閱讀 6,391評論 4 8
  • 步驟:發(fā)微博01-導航欄內容 -> 發(fā)微博02-自定義TextView -> 發(fā)微博03-完善TextView和...
    dibadalu閱讀 3,429評論 1 3
  • 回這一趟老家,心里多了兩個疙瘩。第一是堂姐現(xiàn)在談了一個有婦之夫,在她的語言中感覺,她不打算跟他有太長遠的計劃,這讓...
    安九閱讀 3,657評論 2 4

友情鏈接更多精彩內容