㈠ tSp Concorder演算法原理
tsp問題遺傳演算法將多目標按照線性加權的方式轉化為單目標,然後應用傳統遺傳演算法求解
其中w_i表示第i個目標的權重,f_k表示歸一化之後的第i個目標值。我們很容易知道,這類方法的關鍵是怎麼設計權重。比如,Random Weight Genetic Algorithm (RWGA) 採用隨機權重的方式,每次計算適應度都對所有個體隨機地產生不同目標的權重,然後進行選擇操作。Vector-Evaluated Genetic Algorithm (VEGA) 也是基於線性加權的多目標遺傳演算法。如果有K個目標,VEGA 會隨機地將種群分為K個同等大小子種群,在不同的子種群按照不同的目標函數設定目標值,然後再進行選擇操作。VEGA 實質上是基於線性加權的多目標遺傳演算法。VEGA 是第一個多目標遺傳演算法,開啟了十幾年的研究潮流。
1.TSP問題是指假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最後要回到原來出發的城市。路徑的選擇目標是要求得的路徑路程為所有路徑之中的最小值。本文使用遺傳演算法解決att30問題,即30個城市的旅行商問題。旅行商問題是一個經典的組合優化問題。一個經典的旅行商問題可以描述為:一個商品推銷員要去若干個城市推銷商品,該推銷員從一個城市出發,需要經過所有城市後,回到出發地。應如何選擇行進路線,以使總的行程最短。從圖論的角度來看,該問題實質是在一個帶權完全無向圖中,找一個權值最小的Hamilton迴路。由於該問題的可行解是所有頂點的全排列,隨著頂點數的增加,會產生組合爆炸,它是一個NP完全問題。TSP問題可以分為對稱和不對稱。在對稱TSP問題中,兩座城市之間來回的距離是相等的,形成一個無向圖,而不對稱TSP則形成有向圖。對稱性TSP問題可以將解的數量減少了一半。所以本次實驗的TSP問題使用att48數據,可在tsplib中下載數據包。演化演算法是一類模擬自然界遺傳進化規律的仿生學演算法,它不是一個具體的演算法,而是一個演算法簇。遺傳演算法是演化演算法的一個分支,由於遺傳演算法的整體搜索策略和優化計算是不依賴梯度信息,所以它的應用比較廣泛。我們本次實驗同樣用到了遺傳演算法(用MATLAB編寫)來解決TSP問題。
㈡ 旅行商問題的簡介
「旅行商問題」常被稱為「旅行推銷員問題」,是指一名推銷員要拜訪多個地點時,如何找到在拜訪每個地點一次後再回到起點的最短路徑。規則雖然簡單,但在地點數目增多後求解卻極為復雜。以42個地點為例,如果要列舉所有路徑後再確定最佳行程,那麼總路徑數量之大,幾乎難以計算出來。多年來全球數學家絞盡腦汁,試圖找到一個高效的演算法TSP問題在物流中的描述是對應一個物流配送公司,欲將n個客戶的訂貨沿最短路線全部送到。如何確定最短路線。
TSP問題最簡單的求解方法是枚舉法。它的解是多維的、多局部極值的、趨於無窮大的復雜解的空間,搜索空間是n個點的所有排列的集合,大小為(n-1)!。可以形象地把解空間看成是一個無窮大的丘陵地帶,各山峰或山谷的高度即是問題的極值。求解TSP,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。
㈢ 假設哈密頓問題是NPC,證明:TSP(旅行商問題)屬於NP-hard問題(現代優化計算方法 邢文旬主編 P50第11題)
首先HC是一個npc問題且是一個搜索問題,假設使用貪心策略的演算法A(·)可解HC得到一條哈密頓迴路。
再利用無向圖G構造tsp的圖G',圖G中存在的邊權值設為1,圖G中不存在的邊權值設為X(X>1的整數)。
這樣得到的一個TSP問題可使用演算法A(·)來解。
圖靈規約條件:(1)問題1,問題2都是搜索問題;
(2)求解問題1的演算法A(·)可求解問題2;
(3)演算法A(問題1)時間復雜度是多項式時間,則演算法A(問題2)也是多項式時間;
所以HC可以圖靈規約到這樣一個TSP問題實例。
又因為HC是NPC類問題,可以圖靈規約到TSP,所以TSP是NP-hard問題
㈣ 遺傳演算法解決旅行商問題(TSP)一:初始化和適應值
旅行商問題(Travelling salesman problem, TSP)是這樣一個問題:給定一系列城市和每對城市之間的距離,求解訪問每一座城市一次並回到起始城市的最短迴路。
設有n個城市,城市i和城市j之間的距離是 。設
那麼TSP問題使下面的目標最小:
首先,設置一下參數:
這里假設有10個城市,其坐標定義於pos變數,第一行是各個城市的x坐標,第二行是各個城市的y坐標,比如第一個城市的坐標為(1,1),第三個城市的坐標為(2,2)。之後計算處各個城市之間的距離。
種群中每個個體,都表示著一個訪問城市的路徑,這意味著每個個體都要覆蓋所有城市,但是只能經過一個城市一次。
根據種群中每個個體中城市的順序,可以求出這個個體所代表的距離,距離越大,適應度越小,因此用距離的倒數作為個體的適應度值。
㈤ 用遺傳演算法求解10城市旅行商問題,用matlab編程,要可以運行的程序,跪求,必有重謝
%螞蟻演算法
function [Shortest_Route,Shortest_Length]=anttsp(city,iter_max,m,Alpha,Beta,Rho,Q)
n=size(city,1);
d=zeros(n,n);
d=squareform(pdist(city));
Eta=1./d;
Tau=ones(n,n);
Tabu=zeros(m,n);
nC=1;
R_best=zeros(iter_max,n);
L_best=inf.*ones(iter_max,1);
while nC<=iter_max
route=[];
for i=1:ceil(m/n)
route=[route,randperm(n)];
end
Tabu(:,1)=(route(1,1:m))';
for j=2:n
for i=1:m
visited=Tabu(i,1:(j-1));
J=zeros(1,(n-j+1));
P=J;
Jc=1;
for k=1:n
if isempty(find(visited==k, 1))
J(Jc)=k;
Jc=Jc+1;
end
end
for k=1:length(J)
P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);
end
P=P/(sum(P));
Pcum=cumsum(P);
Select=find(Pcum>=rand);
if isempty(Select)%是不是一定能保證Select不為空
Tabu(i,j)=round(1+(n-1)*rand);
else
next_visit=J(Select(1));
Tabu(i,j)=next_visit;
end
end
end
if nC>=2
Tabu(1,:)=R_best(nC-1,:);
end
L=zeros(m,1);
for i=1:m
R=Tabu(i,:);
for j=1:(n-1)
L(i)=L(i)+d(R(j),R(j+1));
end
L(i)=L(i)+d(R(1),R(n));
end
L_best(nC)=min(L);
pos=find(L==L_best(nC));
R_best(nC,:)=Tabu(pos(1),:);
nC=nC+1;
Delta_Tau=zeros(n,n);
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
end
Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
end
Tau=(1-Rho).*Tau+Delta_Tau;
Tabu=zeros(m,n);
end
Pos=find(L_best==min(L_best));
Shortest_Route=R_best(Pos(1),:);
Shortest_Length=L_best(Pos(1));
end
%%隨機演算法
%city是n行2列的矩陣,每一行表示一個城市的經緯度,一共n個城市
%time表示循環次數,越大,可能找到的路徑最短,當然裡面有隨機性。
function [Shortest_Route,Shortest_Length]=TSP_SuiJiSuanFa(city,times)
n=size(city,1);
d=squareform(pdist(city));
Shortest_Length=inf;
for i=1:times
tempRoute=randperm(n);
tempLength=0;
for j=1:n-1
tempLength=tempLength+d(tempRoute(j),tempRoute(j+1));
end
tempLength=tempLength+d(tempRoute(n),1);
if tempLength<Shortest_Length
Shortest_Length=tempLength;
Shortest_Route=tempRoute;
end
end
end