优化问题matlab遗传算法代码.docx
- 文档编号:23723984
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:9
- 大小:17.51KB
优化问题matlab遗传算法代码.docx
《优化问题matlab遗传算法代码.docx》由会员分享,可在线阅读,更多相关《优化问题matlab遗传算法代码.docx(9页珍藏版)》请在冰豆网上搜索。
优化问题matlab遗传算法代码
优化问题,matlab遗传算法代码
如何安排访问次序
问题:
已知n个城市之间的相互距离,推销员必须遍访这n个城市,且每个城市只能访问一次,最后又必须返回出发城市。
如何安排访问次序,可使其
旅行路线的总长度最短,
用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij)是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶点且每个顶点只通过一次的具有最短距离的回路。
这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商问题(dij?
dji,,任意i,j=1,2,3,…,n)。
若对于城市v={v1,v2,v3,…,vn}的一个访问顺序为t=(t1,t2,t3,…,ti,…,tn),其中ti?
v(i=1,2,3,…,n),且记tn+1=t1,则旅行商问题的数学模型为:
minl=σd(t(i),t(i+1))(i=1,…,n)
旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法求其近似解。
遗传算法:
初始化过程:
用v1,v2,v3,…,vn代表所选n个城市。
定义整数pop-size作为染色体的个数
,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列。
适应度f的计算:
对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)).评价函数eval(vi):
用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被选择产生后台的机会要大,设alpha?
(0,1),本文定义基于序的评价函数为eval(vi)=al
pha*(1-alpha).^(i-1)。
[随机规划与模糊规划]
选择过程:
选择过程是以旋转赌轮pop-size次为基础,每次旋转都为新的种群选择一个染色体。
赌轮是按每个染色体的适应度进行选择染色体的。
step1、对每个染色体vi,计算累计概率qi,q0=0;qi=σeval(vj)j=1,…,i;i=1,…pop-size.
step2、从区间(0,pop-size)中产生一个随机数r;
step3、若qi-1step4、重复step2和step3共pop-size次,这样可以得到pop-size个复制的染色体。
grefenstette编码:
由于常规的交叉运算和变异运算会使种群中产生一些无实际意义的染色体,本文采用grefenstette编码《遗传算法原理及应用》可以避免这种情况的出现。
所谓的grefenstette编码就是用所选队员在未选(不含淘汰)队员中的位置,如:
815216107431114612951813171对应:
81421386325734324221。
交叉过程:
本文采用常规单点交叉。
为确定交叉操作的父代,从到pop-size重复以下过
程:
从[0,1]中产生一个随机数r,如果r将所选的父代两两组队,随机产生一个位置进行交叉,如:
814213863257343242216123568563185633211交叉后为:
814213863251856332116123568563734324221变异过程:
本文采用均匀多点变异。
类似交叉操作中选择父代的过程,在r选择多个染色体vi作为父代。
对每一个选择的父代,随机选择多个位置,使其在每位置按均匀变异(该变异点xk的取值范围为[ukmin,ukmax],产生一个[0,1]中随机数r,该点
变异为x'k=ukmin+r(ukmax-ukmin))操作。
如:
81421386325734324221变异后:
814213106322734524121反grefenstette编码:
交叉和变异都是在grefenstette编码之后进行的,为了循环操作
和返回最终结果,必须逆grefenstette编码过程,将编码恢复到自然编码。
循环操作:
判断是否满足设定的带数xzome,否,则跳入适应度f的计算;是,结束遗传操作,跳出。
matlab代码
distTSP.txt
061848
701737
44045
201924022
881660
%GATSP.m
functiongatsp1()
clear;
loaddistTSP.txt;
distance=distTSP;
N=5;
ngen=100;
ngpool=10;
%ngen=input('#ofgenerationstoevolve=');%ngpool=input('#ofchromosomsinthegenepool=');%sizeofgenepool
gpool=zeros(ngpool,N+1);%genepool
fori=1:
ngpool,%intializegenepoolgpool(i,:
)=[1randomize([2:
N]')'1];forj=1:
i-1
whilegpool(i,:
)==gpool(j,:
)
gpool(i,:
)=[1randomize([2:
N]')'1];end
end
end
costmin=100000;
tourmin=zeros(1,N);
cost=zeros(1,ngpool);
increase=1;resultincrease=1;
fori=1:
ngpool,
cost(i)=sum(diag(distance(gpool(i,:
)',rshift(gpool(i,:
))')));
end
%recordcurrentbestsolution
[costmin,idx]=min(cost);
tourmin=gpool(idx,:
);
disp([num2str(increase)'minmumtriplength='num2str(costmin)])
costminold2=200000;costminold1=150000;resultcost=100000;
tourminold2=zeros(1,N);
tourminold1=zeros(1,N);
resulttour=zeros(1,N);
while
(abs(costminold2-costminold1);100)&(abs(costminold1-costmin);10
0)&(increase;500)
costminold2=costminold1;tourminold2=tourminold1;
costminold1=costmin;tourminold1=tourmin;increase=increase+1;
ifresultcost>costmin
resultcost=costmin;
resulttour=tourmin;
resultincrease=increase-1;
end
fori=1:
ngpool,
cost(i)=sum(diag(distance(gpool(i,:
)',rshift(gpool(i,:
))')));
end
%recordcurrentbestsolution
[costmin,idx]=min(cost);
tourmin=gpool(idx,:
);
%==============
%copygensinthgpoolaccordingtotheprobilityratio
%>1.1copytwice
%>=0.9copyonce
%;0.9remove
[csort,ridx]=sort(cost);%sortfromsmalltobig.csum=sum(csort);
caverage=csum/ngpool;
cprobilities=caverage./csort;copynumbers=0;removenumbers=0;fori=1:
ngpool,
ifcprobilities(i)>1.1
copynumbers=copynumbers+1;end
ifcprobilities(i)<0.9
removenumbers=removenumbers+1;end
end
copygpool=min(copynumbers,removenumbers);
fori=1:
copygpool
forj=ngpool:
-1:
2*i+2gpool(j,:
)=gpool(j-1,:
);
end
gpool(2*i+1,:
)=gpool(i,:
);end
ifcopygpool==0
gpool(ngpool,:
)=gpool(1,:
);end
%=========
%whengenarationismorethan50,orthepatternsinacouplearetoo
close,domutation
fori=1:
ngpool/2
%
sameidx=[gpool(2*i-1,:
)==gpool(2*i,:
)];
diffidx=find(sameidx==0);iflength(diffidx)<=2
gpool(2*i,:
)=[1randomize([2:
12]')'1];
end
end
%===========
%crossgensincouples
fori=1:
ngpool/2
[gpool(2*i-1,:
),gpool(2*i,:
)]=crossgens(gpool(2*i-1,:
),gpool(2*i,
:
));
end
fori=1:
ngpool,
cost(i)=sum(diag(distance(gpool(i,:
)',rshift(gpool(i,:
))')));
end
%recordcurrentbestsolution
[costmin,idx]=min(cost);
tourmin=gpool(idx,:
);
disp([num2str(increase)'minmumtriplength='num2str(costmin)])
end
disp(['costfunctionevaluation:
'int2str(increase)'times!
'])
disp(['n:
'int2str(resultincrease)])
disp(['minmumtriplength='num2str(resultcost)])disp('optimumtour=')
disp(num2str(resulttour))
%====================================================functionB=randomize(A,rowcol)
%Usage:
B=randomize(A,rowcol)
%randomizerowordersorcolumnordersofAmatrix%rowcol:
if=0oromitted,roworder(default)%if=1,columnorder
rand('state',sum(100*clock))
ifnargin==1,
rowcol=0;
end
ifrowcol==0,
[m,n]=size(A);
p=rand(m,1);
[p1,I]=sort(p);
B=A(I,:
);
elseifrowcol==1,
Ap=A';
[m,n]=size(Ap);
p=rand(m,1);
[p1,I]=sort(p);
B=Ap(I,:
)';
end
%=====================================================functiony=rshift(x,dir)
%Usage:
y=rshift(x,dir)
%rotatexvectortoright(down)by1ifdir=0(default)%orrotatextoleft(up)by1ifdir=1ifnargin;2,dir=0;end
[m,n]=size(x);
ifm>1,
ifn==1,
col=1;
elseifn>1,
error('xmustbeavector!
break');end%xisacolumnvectorelseifm==1,
ifn==1,y=x;
return
elseifn>1,
col=0;%xisarowvectorendendifdir==1,%rotateleftorupifcol==0,%rowvector,rotatelefty=[x(2:
n)x
(1)];
elseifcol==1,
y=[x(2:
n);x
(1)];%rotateupend
elseifdir==0,%defaultrotaterightordown
ifcol==0,
y=[x(n)x(1:
n-1)];
elseifcol==1%columnvectory=[x(n);x(1:
n-1)];
end
end
%==================================================
function[L1,L2]=crossgens(X1,X2)%Usage:
[L1,L2]=crossgens(X1,X2)s=randomize([2:
12]')';
n1=min(s
(1),s(11));n2=max(s
(1),s(11));X3=X1;X4=X2;
fori=n1:
n2,
forj=1:
13,
ifX2(i)==X3(j),
X3(j)=0;
end
ifX1(i)==X4(j),X4(j)=0;
end
end
end
j=13;k=13;
fori=12:
-1:
2,
ifX3(i)~=0,
j=j-1;
t=X3(j);X3(j)=X3(i);X3(i)=t;
end
ifX4(i)~=0,
k=k-1;
t=X4(k);X4(k)=X4(i);X4(i)=t;
end
end
fori=n1:
n2
X3(2+i-n1)=X2(i);X4(2+i-n1)=X1(i);end
L1=X3;L2=X4;
%=======================
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 问题 matlab 遗传 算法 代码