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

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

小夥伴 代碼下載 程序 https 原因 pda bin文件 c++ exe

前言

上次出了鄰域搜索的各種概念科普,尤其是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例子的代碼定制內容也給大家講解一下。期待我們後面的文章吧~

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