急求matlab车辆调度遗传算法代码,需求车辆行驶最优路径。

急求matlab车辆调度遗传算法代码,需求车辆行驶最优路径。,第1张

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车辆调度遗传算法代码,需求车辆行驶最优路径。、用遗传算法求解飞机巡航的程序的问题吗、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10630713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存