天天看點

初識禁忌搜尋算法

  一周前和實驗室師弟一起探讨的,在我的影響下他開始去坐畢設了...啧啧;現在等我同學過來找我,把那次的讨論内容回憶一下。

  寫一寫個人了解,語句比較混亂,隻一個入門,我并沒有深入研究過。

  這是一個啟發式搜尋算法。

  以解決TSP問題為例,假設ABCDE五個城市,各個城市間距離的無向圖。

  1.假設以A開頭,ABCDE,這個假設是随意的,因為TSP是環,沒有開頭,計算距離的時候需要加上環.

  2.BCDE兩兩交換,注意是相鄰交換,不是A(n,2),是BC,CD,DE交換,算出所有的TSP距離,注意ABCDE距離需要加上EA的距離,假設算出的最短距離的序列為Seq1。

  3.将Seq1加入禁忌表中,包括序号1,表示第一個序列,序列,以及長度。

  4.取Seq1,ABCDE,相鄰交換BCDE,這肯定和上一次有重複,但是不會完全重複,取最短路徑對應的序列加入禁忌表,成為Seq2.

  5.重複k次,禁忌表的長度為k,為什麼禁忌表中要儲存k次,不選k次中最小的一次,因為即便最小的一次可能是局部最優,其他的非局部最優通過相鄰交換可能得到全局最優。

  禁忌表的長度和禁忌長度不是一個概念,都是為了保證算法多樣性。

  for 禁忌表的長度

    for 禁忌長度

      對每個序列,重複禁忌長度的次數,比如說禁忌長度為3,選擇3次中最小的替換禁忌表中的新東西。

  完全是個人了解,不一定正确,我還沒有研究禁忌搜尋,隻是做一個記錄,請各位看官去其糟粕,取其精華。

繼續閱讀