1.程式功能描述
旅行商問題(Travelling Salesman Problem, TSP)是一個經典的組合最佳化問題,其目標是在給定一組城市及其相互之間的距離情況下,尋找一條經過每個城市恰好一次且返回起點的最短迴路。TSP因其NP完全性及廣泛應用背景而備受關注。免疫演算法(Immune Algorithm, IA),作為一種受生物免疫系統啟發的演化計算方法,近年來被廣泛應用於解決此類複雜最佳化問題。
2.測試軟體版本以及執行結果展示
MATLAB2022a版本執行
3.核心程式
%迴圈迭代 % 輸出最優解 %最優變數 ybest = ysort(:,1); %最優值 Lbest = trace(end); % 繪製最優路徑圖 figure for i=1:Num-1 plot([city(ybest(i),1),city(ybest(i+1),1)],[city(ybest(i),2),city(ybest(i+1),2)],'-bs',... 'LineWidth',1,... 'MarkerSize',6,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.9,0.0,0.0]); hold on; end plot([city(ybest(1),1)],[city(ybest(1),2)],'rs',... 'LineWidth',1,... 'MarkerSize',8,... 'MarkerEdgeColor','y',... 'MarkerFaceColor',[0.2,0.5,0.8]); hold on; plot([city(ybest(end),1)],[city(ybest(end),2)],'ks',... 'LineWidth',1,... 'MarkerSize',8,... 'MarkerEdgeColor','y',... 'MarkerFaceColor',[0.2,0.8,0.6]); hold on; title(['最佳化最短距離:',num2str(Lbest)]); % 繪製迭代過程中最優路徑長度隨迭代次數的變化曲線 figure plot(trace,'b-'); xlabel('迭代次數') ylabel('fitness')
4.本演算法原理
4.1免疫演算法概述
免疫演算法模擬了生物免疫系統的運作機制,主要包括以下幾個核心概念:
抗原(Antigen):在TSP中,抗原可以對應於待最佳化問題的解,如一條候選的城市訪問路徑。
抗體(Antibody):抗體是免疫系統針對特定抗原產生的識別與反應單元。在IA中,抗體表示為問題的可能解,即一條城市訪問序列。抗體通常具有編碼結構,以便於遺傳操作和適應度評估。
免疫庫(Repertoire):免疫庫是儲存抗體的集合,相當於演化演算法中的種群。在TSP應用中,免疫庫包含若干個不同的城市訪問路徑。
克隆選擇(Clonal Selection):這是免疫系統的核心機制,透過複製高親和力(適應度)的抗體來增強其在免疫庫中的比例。在IA中,對應於選擇優秀的抗體個體進行復制(克隆),以保持或增加它們在種群中的數量。
變異(Mutation):生物免疫系統中,抗體在克隆過程中會發生隨機變異以增加多樣性。在IA中,透過引入變異運算元(如交換、逆序等)對克隆的抗體進行區域性調整,生成新的解變種。
免疫記憶(Immune Memory):免疫系統能夠記住先前遇到的抗原,以便快速響應再次出現的威脅。在IA中,這體現在保留歷史最優解或精英個體,確保演算法不會遺忘已發現的好解。
4.2免疫演算法應用於TSP
將免疫演算法應用於TSP求解時,關鍵步驟包括:
初始化:隨機生成一個包含Npop個抗體(即城市訪問序列)的免疫庫,每個抗體由Num個整數構成,表示城市編號,且無重複。
適應度評估:對於每個抗體A_i,計算其對應的路徑長度L(A_i),作為其適應度f(A_i)。在TSP中,適應度函式通常取反路徑長度,即f(A_i) = 1 / L(A_i),以使最佳化目標與最大化適應度一致。路徑長度L(A_i)透過以下公式計算:
其中,d(u, v)表示城市u和城市v之間的距離,從距離矩陣dist中獲取。
克隆選擇與變異:選擇適應度較高的抗體進行克隆,然後對克隆體進行變異操作。變異可採用以下兩種策略之一:
免疫記憶:記錄當前迭代週期內找到的最優抗體A_best及其適應度f(A_best)。在後續迭代中,即使A_best未被選中進行克隆,也應將其保留在種群中。
迭代終止條件:當達到預設的最大迭代次數Niter或適應度改善閾值時,終止演算法,並返回當前最優抗體A_best作為TSP問題的近似最優解。