【優化算法】變鄰域搜索算法(VNS)求解TSP(附C++詳細代碼及注釋)


00 前言

上次變鄰域搜索的推文發出來以后,看過的小伙伴紛紛叫好。小編大受鼓舞,連夜趕工,總算是完成了手頭上的一份關於變鄰域搜索算法解TSP問題的代碼。今天,就在此給大家雙手奉上啦,希望大家能ENJOY哦!

01 代碼說明

本次代碼還是基於求解TSP旅行商問題的。至於什么是TSP問題,小編這實在是不想科普啦……

代碼是基於迭代搜索那個代碼魔改過來的。其實看了這么多啟發式算法解TSP問題的代碼。想必各位都有了一個比較清晰的認識,其實呀。之前介紹的模擬退火、遺傳算法、迭代搜索和現在的變鄰域等等,是十分相似滴。最大的不同在於算法框架的不同而已,像什么擾動啦,鄰域動作啦。代碼基本是不變的。所以大家可以多聯想,多思考,學習就是一個探求事物本質的過程嘛!

至於算法框架什么的概念,大家看上一篇關於VNS的推文啦。

這里就不做過多介紹了。再次貼一下偽代碼。代碼是基於偽代碼寫的。不過本文的代碼只做了一個shaking的鄰域,vnd的鄰域做了兩個。這里給大家說明一下。

image

簡要說說算法vnd里面兩個鄰域使用的算子:

two_opt_swap

沒啥好說的,區間反轉。直接上圖:

two_h_opt_swap

還是要說一點,隨機產生兩點,塞進新排列頭部。其余的按順序往后逐個塞進去。嗯,來看圖片~

下面上代碼啦!欲直接下載代碼文件,關注我們的公眾號哦!回復【VNSTSP】即可,不包括【】哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM