有没有高手懂人工蜂群算法的MATLAB的,求讲解一下代码

u011004173 2015-12-08 08:00:51
主代码
clear all
clc
NI=30;%试验次数
t=zeros(1,NI);
for ni=1:NI
tic;
%人工蜂群算法
%算法参数
%采蜜蜂个数 CN 引领蜂
%蜜源 MN
%工蜂数目 GN 跟随蜂
N=50;
CN=N;
MN=N;
GN=N;
Limit=200;
%问题参数
%问题维数
D=15;
%变量范围
xmax=100*ones(1,D);
xmin=-100*ones(1,D);
%最大迭代次数
K=1000;
limit=50;
xcn=zeros(N,D);
xgn=zeros(N,D);
xmn=zeros(N,D);
popu=zeros(2*N,D);
fpopu=zeros(1,2*N);
%算法初始化
for i=1:2*N
popu(i,:)=xmin+rand(1,D).*(xmax-xmin);
end
%适应值计算
for i=1:2*N
fpopu(i)=func(popu(i,:));
end
[B,d]=sort(fpopu);
i=1;
while i<=N
xmn(i,:)=popu(d(i),:);
fmn(i)=B(i);
i=i+1;
end

xcn=xmn;
fcn=fmn;

%迭代开始
k=1;
while k<=K
g=k;
%引领蜂探索
for i=1:CN
j=ceil(rand*D);
d=ceil(N*rand);
xcn(i,j)=xmn(i,j)+(2*rand-1)*(xmn(i,j)-xmn(d,j));
end
for i=1:CN
fcn(i)=func(xcn(i,:));
if fcn(i)<fmn(i)
xmn(i,:)=xcn(i,:);
fmn(i)=fcn(i);
end
end
%跟随蜂跟随引领蜂
xgn=xcn;
fgn=fcn;
sf=sum(fgn);%目标函数的总和
for a=1:GN
p(a)=fgn(a)/sf;%所占的概率
end
for i=1:GN
r=rand;
fd=0;
sm=0;
m=1;
sr=0;
while m<=GN && fd==0
sm=sm+p(m);
if sm>=r
sr=m;
fd=1;
end
m=m+1;
end
j=ceil(rand*D);
d=ceil(N*rand);
xcn(sr,j)=xmn(sr,j)+(2*rand-1)*(xmn(sr,j)-xmn(d,j));
for i=1:GN
fgn(i)=func(xgn(i,:));
if fgn(i)<fcn(i)
xcn(i,:)=xgn(i,:);
fcn(i)=fgn(i);
end
end
end
if g==limit
for i=1:MN
if fmn(i)==B
xmn(i,:)=xmin+rand(1,D).*(xmax-xmin);
fmn(i)=func(xmn(i,:));
end
end
end
k=k+1;
g=k;
history(k)=min(fmn);
end
t(ni)=toc;
best(ni)=min(fmn);
end
t1_aver=mean(t)
best_1=min(best)
worst_1=max(best)
mean_1=mean(best)
std_1=std(best)
figure(1)
k=1:K;
axis([0 K -20 10])
semilogy(k,history(k),'b')


函数代码
function [F]=func(x)
F=0;
D=15;
for i=1:D
F=F+x(i)^2;
end


还一个排序的,不知道是干吗的
clear all
clc
%排序
m=[1 3 8 5 4];
[B,b]=sort(m);
B(3)



小弟是一窍不通,还望指点,万分感谢
...全文
937 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧