tic
clc;
clear;
close all;
warning off;
addpath 'my_fishswarm_toolbox\'
addpath 'fitness_box\'
Num_Fish = 15; %鱼个数
Iteration = 80; %迭代次数
Num_search = 5; %最多试探次数
Dist_Visual = 2.5; %感知距离
crowd = 0.618; %拥挤度因子
step = 0.1; %步长
Ker = 3; %优化参数维度
%鱼群初始化
Value_Limit =[-1,1,Ker];
%这里修改,作为优化搜索的范围区间
Value_Limit2=[0 ,0.999;
0 ,0.999;
-0.9 ,0.9];
X = func_init(Num_Fish,Value_Limit,Value_Limit2);
Value_Limit_Store = Value_Limit2(1:Ker,:);
gen = 1;
BestY = -1*ones(1,Iteration); %最优的函数值
BestX = -1*ones(Ker,Iteration); %最优的自变量
besty = -999; %最优函数值
[Y] = func_consistence(X);
while(gen<=Iteration)
gen
for J=1:Num_Fish
J
%聚群行为
[Xi1,Yi1]=func_Fish_swarm (X,J,Dist_Visual,step,crowd,Num_search,Value_Limit_Store,Y);
%追尾行为
[Xi2,Yi2]=func_Fish_Follow(X,J,Dist_Visual,step,crowd,Num_search,Value_Limit_Store,Y);
if Yi1>Yi2
X(:,J)=Xi1;
Y(1,J)=Yi1;
else
X(:,J)=Xi2;
Y(1,J)=Yi2;
end
end
[Ymax,index]=max(Y);
if Ymax > besty
besty = Ymax;
bestx = X(:,index);
BestY(gen) = Ymax;
[BestX(:,gen)] = X(:,index);
else
BestY(gen) = BestY(gen-1);
[BestX(:,gen)] = BestX(:,gen-1);
end
gen = gen + 1;
end
figure
plot(1:Iteration,1./BestY)
xlabel('迭代次数');
ylabel('优化值');
disp(['最优解X:',num2str(bestx' ,'%1.5f ')]);
disp(['最优解Y:',num2str(1/besty,'%1.5f ')]);
%矩形
if Ker == 2
save test1.mat Iteration bestx besty BestY
end
%三角形
if Ker == 3
save test2.mat Iteration bestx besty BestY
end
toc