%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%主程序.m,直接运行主程序就可以得到一次结果,b_value是收敛图线(公告最优值).
% x,y;xa,ya分别代表初始鱼群分布和最终鱼群分布,best_num是当前解域最优人工鱼数目.
tic;%主程序开始
global afs;
global af_total;
global afs_x;
global afs_y;
global afs_value;
global b_x;
global b_y;
global b_value;
global iterate_times;
global passed_times;
afs=[];
af_total=20;
afs_value=0;
b_value=-10;
passed_times=0;
iterate_times=50;
for i=1:1:af_total
afs{i}=af();
afs_x(i)=get(afs{i},'x');
x(i)=afs_x(i);
afs_y(i)=get(afs{i},'y');
y(i)=afs_y(i);
end
tic;
for j=1:1:iterate_times
passed_times=passed_times+1;
%公告牌初始化
if passed_times>1
b_value(passed_times)=b_value(passed_times-1);
else
b_x=0
b_y=0;
b_value(1)=-1;
end
%best_af是当前状态最优人工鱼,由它判断当前解域,best_num是当前解域中鱼的数目
best_af=af();
best_x=0;
best_y=0;
best_num=0;
for i=1:1:af_total
afs{i}=evaluate(afs{i});
if foodconsistence(afs{i})>foodconsistence(best_af)
best_af=afs{i};
end
afs_x(i)=get(afs{i},'x');
afs_y(i)=get(afs{i},'y');
%公告牌更新
if foodconsistence(afs(i))>b_value(passed_times)
b_x=get(afs{i},'x');
b_y=get(afs{i},'y');
b_value(passed_times)=foodconsistence(afs{i});
end
end
for i=1:1:af_total
if dstc(afs{i},best_af)<2
best_x=best_x+get(afs{i},'x');
best_y=best_y+get(afs{i},'y');
best_num=best_num+1;
end
end
best_x=best_x/best_num;
best_y=best_y/best_num;
afs_ value(passed_times)=foo(best_x,best_y);
for i=1:1;af_total;
afs_x(i)=get(afs{i},'x');
xa(i)=afs_x(i);
afs_y(i)=get(afs{i},'y');
ya(i)=afs_y(i);
end
end
et=toc;
fprintf('\n执行时间:%f\n',et);
x_axes=1:1:passed_times;
plot(x_axes,abs(b_value),'r');
hold on;
plot(x_axes,abs(afs_value),'k');
axis([0,iterate_times,0,1.2]);
xlabel('迭代次数')
ylabel('f(x,y)')
title('鱼群算法')
toc%主程序结束
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%