一周前和實驗室師弟一起探討的,在我的影響下他開始去坐畢設了...嘖嘖;現在等我同學過來找我,把那次的討論內容回憶一下。
寫一寫個人理解,語句比較混亂,只一個入門,我並沒有深入研究過。
這是一個啟發式搜索算法。
以解決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次中最小的替換禁忌表中的新東西。
完全是個人理解,不一定正確,我還沒有研究禁忌搜索,只是做一個記錄,請各位看官去其糟粕,取其精華。