logo资料库

果蝇算法的程序.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
%例 计算函数 f=x1^2+x2^2+...+x9^2+x10^2 的最小值 %***设置参数 %清空运行环境 clc clear %初始果蝇群体位置 X_axis=5*rands(1,10); Y_axis=5*rands(1,10); maxgen=10000; %迭代次数 sizepop=50; %种群规模 yy=zeros(1,maxgen); Xbest=zeros(maxgen,10); Ybest=zeros(maxgen,10); Xmin=zeros(1,10); %*********果蝇寻优开始 %利用嗅觉寻找食物 for i=1:sizepop %初始果蝇个体飞行距离 X(i,:)=X_axis+20*rand()-10;
Y(i,:)=Y_axis+20*rand()-10; %求出与原点之距离 for j=1:10 D(i,j)=(X(i,j)^2+Y(i,j)^2)^0.5; end %味道浓度为距离之倒数,先求出味道浓度判定值 for j=1:10 S(i,j)=1/D(i,j); end %利用味道浓度判定函数求出味道浓度(类似 Fitness 适应度函数) x1=S(i,1); x2=S(i,2); x3=S(i,3); x4=S(i,4); x5=S(i,5); x6=S(i,6); x7=S(i,7); x8=S(i,8); x9=S(i,9); x10=S(i,10);
Smell(i)=x1^2+x2^2+x3^2+x4^2+x5^2+x6^2+x7^2+x8^2+x9^2+x10^2; end %***根据初始味道浓度值寻找初始极值 [bestSmell bestindex]=min(Smell); %%利用视觉寻找伙伴聚集味道浓度最高之处 %做法是保留最佳值初始位置及初始味道浓度 X_axis=X(bestindex,:); Y_axis=Y(bestindex,:); Smellbest=bestSmell; %果蝇迭代寻优 for g=1:maxgen for i=1:sizepop %由上一代最佳位置处增加果蝇个体飞行距离 X(i,:)=X_axis+20*rand()-10; Y(i,:)=Y_axis+20*rand()-10; %求出与原点之距离 for j=1:10 D(i,j)=(X(i,j)^2+Y(i,j)^2)^0.5; end %味道浓度为距离之倒数,先求出味道浓度判定值 for j=1:10 S(i,j)=1/D(i,j);
end %利用味道浓度判定函数求出味道浓度(类似 Fitness 适应度函数) x1=S(i,1); x2=S(i,2); x3=S(i,3); x4=S(i,4); x5=S(i,5); x6=S(i,6); x7=S(i,7); x8=S(i,8); x9=S(i,9); x10=S(i,10); Smell(i)=x1^2+x2^2+x3^2+x4^2+x5^2+x6^2+x7^2+x8^2+x9^2+x10^2; end %***根据味道浓度值寻找极值 [bestSmell bestindex]=min(Smell); %***迭代保留最佳值位置与味道浓度 if bestSmell
%每代最优值纪录到 yy 数组中 yy(g)=Smellbest; Xbest(g,:)=X_axis; Ybest(g,:)=Y_axis; end %相当于解码的过程,将果蝇与原点距离转化为所求问题变量的值 T=zeros(maxgen,10); for k=1:maxgen for t=1:10 T(k,t)=1/(sqrt(Xbest(k,t)^2+Ybest(k,t)^2));%解码每代的最优变量 end end [fmin,Xmindex]=min(yy); fmin%最小值 bestx=T(Xmindex,:)%最小值所对应的自变量所对应的值
分享到:
收藏