自適應大鄰域搜索代碼系列之(1) - 使用ALNS代碼框架求解TSP問題


前言

上次出了鄰域搜索的各種概念科普,尤其是LNS和ALNS的具體過程更是描述得一清二楚。不知道你萌都懂了嗎?小編相信大家早就get到啦。不過有個別不願意透露姓名的熱心網友表示上次沒有代碼,遂不過癮啊~哎,大家先別急,代碼有得你們酸爽的……

不過由於ALNS的代碼量實在太大,小編打算把這個做成一個系列來一一為大家講解,好讓小伙伴們徹底把這個算法框架的代碼吃透。今天暫時還是先不對代碼進行講解,先來教大家怎么使用ALNS的框架求解一個TSP問題吧~

環境准備

小編的演示是基於Windows 10 x64位環境的(Linux黨就更簡單了),其他Windows 環境也類似。在此之前我們需要配置幾個東西。

2.1 安裝MinGW

這玩意單獨裝比較麻煩,但是安裝devC++會自帶這玩意兒,特別方便。沒有安裝devC++的小伙伴戳下面鏈接(https://pan.baidu.com/s/1PJ5uxGKmkWzl_3s4GQM88g)去下一個安裝上。然后在電腦上找到devC++的安裝位置,把其目錄下的MinGW64\bin文件添加環境變量。如下圖所示:

打開cmd命令行,輸入下面命令:
mingw32-make
出現下面提示就成功了。

下載源代碼

欲獲取代碼,請關注我們的微信公眾號【程序猿聲】,在后台回復:ALNS代碼。即可下載。

微信公眾號

把源代碼下載下來,然后解壓到某個位置(路徑不要有中文)。

修改源碼

找到\trunk\src\alns下的OperatorManager.cpp:

打開,在頭文件位置加入下面這句話,把調試模式給禁用掉:

編譯

在命令行下進入\trunk\Release目錄,首先輸入mingw32-make clean,清理以前編譯的中間文件。

然后輸入:mingw32-make。進行編譯。

得到我們的目標文件:libALNS-framework.so。這是ALNS框架的動態鏈接庫,稍后我們要使用到的。

在命令下進入\trunk\examples\tsp,把main.cpp替換為小編修改好的main.cpp(點擊這里下載:https://pan.baidu.com/s/1Z2RcUnGIeKITimcUyGypdA)。然后照例:首先輸入mingw32-make clean,清理以前編譯的中間文件。然后輸入:mingw32-make。進行編譯。

最終得到我們的程序TSP.exe。這里還有一步,把剛剛編譯好的libALNS-framework.so文件復制到當前目錄,TSP程序運行需要用到它。

最后可以在命令行下輸入TSP,運行我們的程序:

至此,已經完成了。最后說一下,修改的代碼為求解Berlin52問題的代碼。最優解是7542,至於這里的解為什么比7542少,原因是代碼算總距離的時候沒有加上第一個和最后一個city的距離。

最后再多說兩句,上述求解的代碼是根據ALNS框架定制而來的。其實,大家想用ALNS算法求解任何問題,只需要把框架內容做相應的定制就可以啦。在下面的幾篇推文里,小編將詳細解析ALNS代碼框架的內容,然后把上面求解TSP例子的代碼定制內容也給大家講解一下。期待我們后面的文章吧~


免責聲明!

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



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