matlab做TSP,基于matlab TSP问题遗传算法的实现
%TSP問題(又名:旅行商問題,貨郎擔(dān)問題)遺傳算法通用matlab程序
%D是距離矩陣,n為種群個(gè)數(shù),建議取為城市個(gè)數(shù)的1~2倍,
%C為停止代數(shù),遺傳到第 C代時(shí)程序停止,C的具體取值視問題的規(guī)模和耗費(fèi)的時(shí)間而定
%m為適應(yīng)值歸一化淘汰加速指數(shù) ,最好取為1,2,3,4 ,不宜太大
%alpha為淘汰保護(hù)指數(shù),可取為0~1之間任意小數(shù),取1時(shí)關(guān)閉保護(hù)功能,最好取為0.8~1.0
%R為最短路徑,Rlength為路徑長度
function [R,Rlength]=geneticTSP(D,n,C,m,alpha)
[N,NN]=size(D);
farm=zeros(n,N);%用于存儲種群
for i=1:n
farm(i,:)=randperm(N);%隨機(jī)生成初始種群
end
R=farm(1,:);%存儲最優(yōu)種群
len=zeros(n,1);%存儲路徑長度
fitness=zeros(n,1);%存儲歸一化適應(yīng)值
counter=0;
while counter
for i=1:n
len(i,1)=myLength(D,farm(i,:));%計(jì)算路徑長度
end
maxlen=max(len);
minlen=min(len);
fitness=fit(len,m,maxlen,minlen);%計(jì)算歸一化適應(yīng)值
rr=find(len==minlen);
R=farm(rr(1,1),:);%更新最短路徑
FARM=farm;%優(yōu)勝劣汰,nn記錄了復(fù)制的個(gè)數(shù)
nn=0;
for i=1:n
if fitness(i,1)>=alpha*rand
nn=nn+1;
FARM(nn,:)=farm(i,:);
end
end
FARM=FARM(1:nn,:);
[aa,bb]=size(FARM);%交叉和變異
while aa
if nn<=2
nnper=randperm(2);
else
nnper=randperm(nn);
end
A=FARM(nnper(1),:);
B=FARM(nnper(2),:);
[A,B]=intercross(A,B);
FARM=[FARM;A;B];
[aa,bb]=size(FARM);
end
if aa>n
FARM=FARM(1:n,:);%保持種群規(guī)模為n
end
farm=FARM;
clear FARM
counter=counter+1
end
Rlength=myLength(D,R);
function [a,b]=intercross(a,b)
L=length(a);
if L<=10%確定交叉寬度
W=1;
elseif ((L/10)-floor(L/10))>=rand&&L>10
W=ceil(L/10);
else
W=floor(L/10);
end
p=unidrnd(L-W+1);%隨機(jī)選擇交叉范圍,從p到p+W
for i=1:W%交叉
x=find(a==b(1,p+i-1));
y=find(b==a(1,p+i-1));
[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1));
[a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));
end
function [x,y]=exchange(x,y)
temp=x;
x=y;
y=temp;
% 計(jì)算路徑的子程序
function len=myLength(D,p)
[N,NN]=size(D);
len=D(p(1,N),p(1,1));
for i=1:(N-1)
len=len+D(p(1,i),p(1,i+1));
end
%計(jì)算歸一化適應(yīng)值子程序
function fitness=fit(len,m,maxlen,minlen)
fitness=len;
for i=1:length(len)
fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.000001))).^m;
end
總結(jié)
以上是生活随笔為你收集整理的matlab做TSP,基于matlab TSP问题遗传算法的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 可以做pc客户端吗,vue.js
- 下一篇: 创建emp表 oracle,Oracle