决策优化建模与仿真-现代优化算法
 发布时间 
 阅读量: 
 阅读量 
现代优化算法
根据表1的数据可知:敌方共有40个目标点其经纬度信息如上所示。
基地位于经纬度(70,40)的位置。
假设飞机的最大速度定为每小时1000公里。
从基地起飞后该机将执行侦察任务飞越所有敌方目标点最后返回至起飞基地。
每次侦察单个目标点的时间忽略不计。
采用改进后的遗传算法计算该机完成全部侦察任务所需的总时间假设飞行过程可持续足够长的时间。

MATLAB代码
 tic
    
 clc,clear 
    
 load sj40.txt %加载敌方40个目标的数据
    
 x=sj40(:,1:2:8);x=x(:); 
    
 y=sj40(:,2:2:8);y=y(:); 
    
 sj40=[x y]; 
    
 d1=[70,40]; 
    
 sj0=[d1;sj40;d1]; 
    
 %距离矩阵 d
    
 sj40=sj0*pi/180; 
    
 d=zeros(42); 
    
 for i=1:41 
    
     for j=i+1:42 
    
     temp=cos(sj40(i,1)-sj40(j,1))*cos(sj40(i,2))*cos(sj40(j,2))+sin(sj40(i,2))*sin(sj40(j,2));
    
     d(i,j)=6370*acos(temp); 
    
     end
    
 end
    
 d=d+d';L=42;w=50;dai=40; 
    
 %通过改良圈算法选取优良父代 A
    
 for k=1:w 
    
     c=randperm(40); 
    
     c1=[1,c+1,42]; 
    
     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); 
    
         end
    
     end
    
     end
    
 end
    
 J(k,c1)=1:42; 
    
 end 
    
 J=J/42; 
    
 J(:,1)=0;J(:,42)=1; 
    
 rand('state',sum(clock)); 
    
 %遗传算法实现过程
    
 A=J; 
    
 for k=1:dai %产生0~1间随机数列进行编码
    
     B=A; 
    
     c=randperm(w); 
    
     %交配产生子代 B
    
 for i=1:2:w 
    
     F=2+floor(40*rand(1)); 
    
     temp=B(c(i),F:42); 
    
     B(c(i),F:42)=B(c(i+1),F:42); 
    
     B(c(i+1),F:42)=temp; 
    
 end 
    
 %变异产生子代 C
    
 by=find(rand(1,w)<0.1); 
    
 if length(by)==0 
    
     by=floor(w*rand(1))+1;
    
 end
    
 C=A(by,:); 
    
 L3=length(by); 
    
 for j=1:L3 
    
     bw=2+floor(40*rand(1,3)); 
    
     bw=sort(bw); 
    
     C(j,:)=C(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:42]); 
    
 end
    
 G=[A;B;C]; 
    
 TL=size(G,1); 
    
 %在父代和子代中选择优良品种作为新的父代
    
 [dd,IX]=sort(G,2);temp(1:TL)=0; 
    
 for j=1:TL 
    
     for i=1:41
    
     temp(j)=temp(j)+d(IX(j,i),IX(j,i+1));
    
     end
    
 end
    
 [DZ,IZ]=sort(temp);
    
 A=G(IZ(1:w),:);
    
 end
    
 path=IX(IZ(1),:) 
    
 long=DZ(1) 
    
 toc 
    
 xx=sj0(path,1);yy=sj0(path,2); 
    
 plot(xx,yy,'-o') 
          
    
 path =
    
  
    
   列 1 至 14
    
  
    
      1    20    21    29    22    26     6    25    24    23    17     7    36    28
    
  
    
   列 15 至 28
    
  
    
     19    14    41     8    33    27    13    31     4    18     5    11    40    32
    
  
    
   列 29 至 42
    
  
    
     16    34    30     9    35    15    39    10    12    37    38     2     3    42
    
  
    
  
    
 long =
    
  
    
    2.9393e+04
    
  
    
 历时 0.201601 秒。
        
计算结果为29.4小时左右。其中的一个巡航路径如上图所示。
全部评论 (0)
 还没有任何评论哟~ 
