1.程式功能描述
基於禁忌搜尋演算法的TSP路徑規劃,輸出最佳化收斂曲線以及路線規劃圖。
2.測試軟體版本以及執行結果展示
MATLAB2022a版本執行
3.核心程式
for it = 1:Iteration it % 初始化本次迭代的最佳新解代價為正無窮 bestnewsol.Cost = inf; % 遍歷所有動作並嘗試應用它們 for i = 1:Nact if TC(i) == 0% 如果這個動作不在Tabu列表中 newsol.Position = func_Action(sol.Position, ActionList{i}); newsol.Cost = Js(newsol.Position);% 計算新解的代價 newsol.ActionIndex = i;% 記錄應用的動作索引 % 如果新解的代價更好,則更新本次迭代的最佳新解 if newsol.Cost<= bestnewsol.Cost bestnewsol = newsol; end end end % 用最佳新解更新當前解 sol = bestnewsol; % 更新Tabu列表 for i = 1:Nact if i == bestnewsol.ActionIndex% 如果這個動作是最佳新解的動作 TC(i) = TL; % 將其新增到Tabu列表中 else TC(i) = max(TC(i)-1, 0);% 否則減少Tabu計數器 end end % 如果找到了更好的解,則更新最佳解 if sol.Cost<= BestSol.Cost BestSol = sol; end % 儲存最佳代價 BestCost(it) = BestSol.Cost; % 繪製最佳解 figure(1); func_plot(BestSol); pause(0.01); end % 只保留實際迭代次數的最佳代價 BestCost = BestCost(1:it); %% Results figure; plot(BestCost, 'LineWidth', 2); xlabel('Iteration'); ylabel('Best Cost'); grid on; 23
4.本演算法原理
基於禁忌搜尋演算法的TSP(旅行商問題)路徑規劃是一種求解TSP問題的最佳化演算法。禁忌搜尋演算法是一種啟發式搜尋方法,它透過避免重複搜尋和陷入區域性最優解來提高搜尋效率。在TSP問題中,禁忌搜尋演算法透過不斷地調整路徑中的城市順序來尋找最優路徑。
4.1 TSP問題描述
TSP問題是一個經典的組合最佳化問題,其目標是找到訪問一系列城市並返回起點的最短可能路徑。給定一個城市列表和每對城市之間的距離,TSP問題的解是一個排列,它表示訪問每個城市一次並返回起點的順序。
4.2 禁忌搜尋演算法原理
禁忌搜尋演算法是一種基於區域性搜尋的元啟發式演算法,它透過引入禁忌列表來避免重複搜尋和陷入區域性最優解。禁忌搜尋演算法從一個初始解開始,然後在其鄰域內搜尋更好的解。搜尋過程中,演算法會記住已經訪問過的解,並將它們加入到禁忌列表中,以避免在近期內重複訪問。當搜尋到一定程度後,禁忌列表中的解會逐漸被釋放,從而允許演算法在更大的範圍內搜尋。
4.3 演算法步驟
禁忌搜尋演算法求解TSP問題的步驟大致如下:
初始化:選擇一個初始路徑作為當前解,並初始化禁忌列表為空。
鄰域搜尋:定義當前解的鄰域。在TSP問題中,鄰域通常透過交換、插入或逆序等操作來生成新的路徑。
評估:計算鄰域內所有解的目標函式值(路徑總長度)。
選擇:從鄰域中選擇一個非禁忌的最優解作為新的當前解。如果鄰域中的所有解都被禁忌,則選擇其中最好的解,並更新禁忌列表。
更新禁忌列表:將新選擇的解加入到禁忌列表中,並移除最早加入的解(如果禁忌列表已滿)。
終止條件:如果達到預設的最大迭代次數或滿足其他終止條件,則停止搜尋;否則,返回步驟2。