基於禁忌搜尋演算法的TSP路徑規劃matlab模擬

软件算法开发發表於2024-06-14

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。

相關文章