function [path,lmin]=ga(data,d) %data为点集,d为距离矩阵,即赋权图
tic
%======================
sj0=data;%开环最短路线
%=================================
% sj0=[data;data(1,:)]; %闭环最短路线
%=========================
x=sj0(:,1);y=sj0(:,2);
N=length(x);
%=========================
% d(N,:)=d(1,:);%闭环最短路线
% d(:,N)=d(:,1);%距离矩阵d
%======================
L=N; %sj0的长度
w=800;dai=1000;
%通过改良圈算法选取优良父代A
for k=1:w
c=randperm(L-2);
c1=[1,c+1,L];
flag=1;
while flag>0
flag=0;
for m=1:L-3
for n=m+2:L-1
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
flag=1;
c1(m+1:n)=c1(n:-1:m+1);
<a href=">clc,clear
sj0=[537121 153046 511758 00322 463253 282753 303313 69348
565432 214188 108198 162529 227891 231045 101584 124819
201050 154562 19451 02057 264951 221221 314847 89640
262418 181760 440356 135401 289836 259879 384722 201731
282694 290011 321910 58699 364863 297284 09718 281477
89586 246635 165618 236143 105597 151178 502111 102944
81519 95325 221075 185569 01215 188726 482077 168889
319499 176309 07732 04656 474134 237783 418671 35667
435474 39061 533524 267256 308165 134595 277133 50706
239222 76306 519612 228511 127938 157307 49568 83669
215051 240909 152548 272111 62070 51442 492430 167044
171168 200354 341688 227571 94402 39200 115812 145677
521181 04088 95559 114219 244509 65634 267213 285667
375848 168474 356619 99333 244654 31644 07775 69576
144703 136368 198660 151224 31616 42428 185245 143598
586849 271485 395168 169371 565089 137090 525211 157957
384300 84648 518181 230159 89983 236440 501156 237816
137909 19510 340574 233960 230624 84319 199857 57902
408801 142978 588289 145229 186635 67436 528423 272880
399494 295114 475099 240664 101121 272662 287812 276659
80831 276705 91556 141304 537989 02199 336490 03980
13496 168359 499816 60828 193635 176622 369545 230265
157320 195697 115118 173884 440398 162635 397139 284203
69909 231804 383392 199950 246543 196057 369980 243992
41591 31853 401400 203030 239876 94030 411084 277149
]; %加载100个目标的数据
x=sj0(:,1:2:8); x=x(:);
y=sj0(:,2:2:8); y=y(:);
sj=[x y]; d1=[70,40];
sj=[d1;sj;d1]; sj=sjpi/180; %单位化成弧度
d=zeros(102); %距离矩阵d的初始值
for i=1:101
for j=i+1:102
d(i,j)=6370acos(cos(sj(i,1)-sj(j,1))cos(sj(i,2))cos(sj(j,2))+sin(sj(i,2))sin(sj(j,2)));
end
end
d=d+d'; w=50; g=100; %w为种群的个数,g为进化的代数
rand('state',sum(clock)); %初始化随机数发生器
for k=1:w %通过改良圈算法选取初始种群
c=randperm(100); %产生1,,100的一个全排列
c1=[1,c+1,102]; %生成初始解
for t=1:102 %该层循环是修改圈
flag=0; %修改圈退出标志
for m=1:100
for n=m+2:101
if d(c1(m),c1(n))+d(c1(m+1),c1(n+1))<d(c1(m),c1(m+1))+d(c1(n),c1(n+1))
c1(m+1:n)=c1(n:-1:m+1); flag=1; %修改圈
end
end
end
if flag==0
J(k,c1)=1:102; break %记录下较好的解并退出当前层循环
end
end
end
J(:,1)=0; J=J/102; %把整数序列转换成[0,1]区间上的实数,即转换成染色体编码
for k=1:g %该层循环进行遗传算法的 *** 作
A=J; %交配产生子代A的初始染色体
c=randperm(w); %产生下面交叉 *** 作的染色体对
for i=1:2:w
F=2+floor(100rand(1)); %产生交叉 *** 作的地址
temp=A(c(i),[F:102]); %中间变量的保存值
A(c(i),[F:102])=A(c(i+1),[F:102]); %交叉 *** 作
A(c(i+1),F:102)=temp;
end
by=[]; %为了防止下面产生空地址,这里先初始化
while ~length(by)
by=find(rand(1,w)<01); %产生变异 *** 作的地址
end
B=A(by,:); %产生变异 *** 作的初始染色体
for j=1:length(by)
bw=sort(2+floor(100rand(1,3))); %产生变异 *** 作的3个地址
B(j,:)=B(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102]); %交换位置
end
G=[J;A;B]; %父代和子代种群合在一起
[SG,ind1]=sort(G,2); %把染色体翻译成1,,102的序列ind1
num=size(G,1); long=zeros(1,num); %路径长度的初始值
for j=1:num
for i=1:101
long(j)=long(j)+d(ind1(j,i),ind1(j,i+1)); %计算每条路径长度
end
end
[slong,ind2]=sort(long); %对路径长度按照从小到大排序
J=G(ind2(1:w),:); %精选前w个较短的路径对应的染色体
end
path=ind1(ind2(1),:), flong=slong(1) %解的路径及路径长度
xx=sj(path,1);yy=sj(path,2);
plot(xx,yy,'-o') %画出路径
以上就是关于急求matlab车辆调度遗传算法代码,需求车辆行驶最优路径。全部的内容,包括:急求matlab车辆调度遗传算法代码,需求车辆行驶最优路径。、用遗传算法求解飞机巡航的程序的问题吗、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)