遗传算法求解最优化问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | tic clc , clear load sj.txt %加载敌方100个目标的数据 x=sj(:,1:2:8);x=x(:); y=sj(:,2:2:8);y=y(:); sj=[x y]; d1=[70,40]; sj0=[d1;sj;d1]; %距离矩阵d sj=sj0* pi /180; d= zeros (102); for i =1:101 for j = i +1:102 temp= cos (sj( i ,1)-sj( j ,1))* cos (sj( i ,2))* cos (sj( j ,2))+ sin (sj( i ,2))* sin (sj( j ,2)); d( i , j )=6370* acos (temp); end end d=d+d';L=102;w=50;dai=100;A=[]; %通过改良圈算法选取优良父代A for k=1:w c= randperm (100); c1=[1,c+1,102]; 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 A(k,:)=c1; end rand ( 'state' , sum ( clock )); %遗传算法实现过程 for k=1:dai %产生0~1 间随机数列进行编码 B=A; c= randperm (w); %交配产生子代B for i =1:2:w F=2+ floor (100* rand (1)); temp=B(c( i ),F:102); B(c( i ),F:102)=B(c( i +1),F:102); B(c( i +1),F:102)=temp; [dd,st]= sort (B(c( i ),:)); B(c( i ),st)=1:102; [dd,st]= sort (B(c( i +1),:)); B(c( i +1),st)=1:102; end for i =1:w c1=B( i ,:); 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 B( i ,:)=c1; 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 i =1:L3 bw=2+ floor (100* rand (1,3)); bw= sort (bw); c1=C( i ,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw(3)+1:102]); 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 C( i ,:)=c1; end G=[A;B;C]; TL= size (G,1); %在父代和子代中选择优良品种作为新的父代 temp(1:TL)=0; for i =1:TL for j =1:101 temp( i )=temp( i )+d(G( i , j ),G( i , j +1)); end end [dd,st]= sort (temp); A=G(st(1:w),:); end path =A(1,:) long=dd(1) toc xx=sj0( path ,1);yy=sj0( path ,2); plot (xx,yy, 'b-o' ) %多次运行最小值为:39.24小时 |
分类:
MATLAB
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术