《matlab蚁群算法代码,蚁群算法(ACO)MATLAB实现.docx》由会员分享,可在线阅读,更多相关《matlab蚁群算法代码,蚁群算法(ACO)MATLAB实现.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、matlab蚁群算法代码,蚁群算法(ACO)MATLAB实现()蚁群算法的由来蚁群算法(ant colony optimization)最早是由Marco Dorigo等在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找物时,通过分泌种称为信息素的物激素交流觅信息从能快速的找到标,据此提出了基于信息正反馈原理的蚁群算法。蚁群算法的基本思想来源于然界蚂蚁觅的最短路径原理,根据昆科学家的观察,发现然界的蚂蚁虽然视觉不发达,但它们可以在没有任何提的情况下找到从物源到巢的最短路径,并在周围环境发变化后,适应地搜索新的最佳路径。蚂蚁在寻找物源的时候,能在其过的路径上释放种叫信息素的激素,使定范
2、围内的其他蚂蚁能够察觉到。当些路径上通过的蚂蚁 越来越多时,信息素也就越来越多,蚂蚁们选择这条路径的概率也就越,结果导致这条路径上的信息素增多,蚂蚁这条路的概率增 加,不息。这种选择过程被称为蚂蚁的催化为。对于单个蚂蚁来说,它并没有要寻找最短路径,只是根据概率选择;对于整个蚁群 系统来说,它们却达到了寻找到最优路径的客观上的效果。这就是群体智能。()蚁群算法能做什么蚁群算法根据模拟蚂蚁寻找物的最短路径为来设计的仿算法,因此般,蚁群算法来解决最短路径问题,并真的在旅商问题(TSP,个寻找最短路径的问题)上取得了较好的成效。前,也已渐渐应到其他领域中去,在图着问题、车辆调度问题、集成电路 设计、通
3、讯络、数据聚类分析等都有所应。(三)蚁群算法实现优化的 函数为F(x,y)= -(x.2+3*y.4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6)MATLABclear clcAnt = 300;%蚂蚁数量Times = 80;%移动次数Rou = 0.9;%荷尔蒙发挥系数P0 = 0.2;%转移概率Lower_1 = -1;%搜索范围Upper_1 = 1;Lower_2 = -1;Upper_2 = 1; for i=1:AntX(i,1)=(Lower_1+(Upper_1-Lower_1)*rand); X(i,2)=(Lower_1+(Upper_2-Lo
4、wer_2)*rand); Tau(i)=F(X(i,1),X(i,2);end step=0.05;f=-(x.2+3*y.4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6); x,y=meshgrid(Lower_1:step:Upper_1,Lower_2:step:Upper_2); z=eval(f);figure(1); subplot(1,2,1);mesh(x,y,z); hold on;plot3(X(:,1),X(:,2),Tau,k*)hold on;text(0.1,0.8,-0.1,蚂蚁的初始位置分布); xlabel(x);ylabel(y
5、);zlabel(f(x,y);for T=1:Times lamda=1/T;Tau_Best(T),BestIndex=max(Tau); for i=1:AntP(T,i)=(Tau(BestIndex)-Tau(i)/Tau(BestIndex);%计算转移状态概率endfor i=1:Ant if P(T,i)temp1=X(i,1)+(2*rand-1)*lamda; temp2=X(i,2)+(2*rand-1)*lamda; else%全局搜索temp1=X(i,1)+(Upper_1-Lower_1)*(rand-0.5); temp2=X(i,2)+(Upper_2-Low
6、er_2)*(rand-0.5); endif temp1 temp1=Lower_1; endif temp1Upper_1 temp1=Upper_1; endif temp2 temp2=Lower_2; endif temp2Upper_2 temp2=Upper_2; endif F(temp1,temp2)F(X(i,1),X(i,2)%更新位置X(i,1)=temp1;X(i,2)=temp2; endendfor i=1:AntTau(i)=(1-Rou)*Tau(i)+F(X(i,1),X(i,2);%更新荷尔蒙endend subplot(1,2,2);mesh(x,y,z
7、); hold on; x=X(:,1);y=X(:,2);plot3(x,y,eval(f),k*);hold on;text(0.1,0.8,-0.1, 蚂 蚁 的 最 终 位 置 分 布 ); xlabel(x);ylabel(y);zlabel(f(x,y); max_value,max_index=max(Tau); maxX=X(max_index,1); maxY=X(max_index,2); maxValue=F(X(max_index,1),X(max_index,2); 123456789101112131415161718192021222324252627282930
8、31323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182clear clcAnt=300;%蚂蚁数量Times=80;%移动次数Rou=0.9;%荷尔蒙发挥系数P0=0.2;%转移概率Lower_1=-1;%搜索范围Upper_1=1;Lower_2=-1; Upper_2=1; fori=1:AntX(i,1)=(Lower_1+(Upper_1-Lower_1)*rand); X(i,2)=(Lower_1+(Upper_2-Lower_2
9、)*rand); Tau(i)=F(X(i,1),X(i,2);end step=0.05;f=-(x.2+3*y.4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6); x,y=meshgrid(Lower_1:step:Upper_1,Lower_2:step:Upper_2); z=eval(f);figure(1); subplot(1,2,1);mesh(x,y,z); holdon;plot3(X(:,1),X(:,2),Tau,k*)holdon;text(0.1,0.8,-0.1,蚂蚁的初始位置分布); xlabel(x);ylabel(y);zlabe
10、l(f(x,y); forT=1:Timeslamda=1/T; Tau_Best(T),BestIndex=max(Tau); fori=1:AntP(T,i)=(Tau(BestIndex)-Tau(i)/Tau(BestIndex);%计算转移状态概率end fori=1:Ant ifP(T,i)temp1=X(i,1)+(2*rand-1)*lamda; temp2=X(i,2)+(2*rand-1)*lamda; else%全局搜索temp1=X(i,1)+(Upper_1-Lower_1)*(rand-0.5); temp2=X(i,2)+(Upper_2-Lower_2)*(ra
11、nd-0.5); endiftemp1 temp1=Lower_1; end iftemp1Upper_1 temp1=Upper_1; endiftemp2 temp2=Lower_2; end iftemp2Upper_2 temp2=Upper_2; endifF(temp1,temp2)F(X(i,1),X(i,2)%更新位置X(i,1)=temp1;X(i,2)=temp2; endend fori=1:AntTau(i)=(1-Rou)*Tau(i)+F(X(i,1),X(i,2);%更新荷尔蒙endend subplot(1,2,2);mesh(x,y,z); holdon; x
12、=X(:,1);y=X(:,2);plot3(x,y,eval(f),k*); holdon;text(0.1,0.8,-0.1, 蚂 蚁 的 最 终 位 置 分 布 ); xlabel(x);ylabel(y);zlabel(f(x,y); max_value,max_index=max(Tau); maxX=X(max_index,1); maxY=X(max_index,2); maxValue=F(X(max_index,1),X(max_index,2); 优化函数:MATLABfunction f = F(x,y)f = -(x.2+3*y.4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6); end123functionf=F(x,y)f=-(x.2+3*y.4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6); end效果:/.l I D 且口岁.,._心 七 ,攻匕蚂蚁的初始位四分 布蚂蚁的砐终位岱分 布去0 、|-1OJ-1桌 伈宴冬X Vv睾玄2各玄 2X汒-3-3-4-4-5-510 5y。-1-1X-1-1x