%% 2019.8.10 智能算法对比
clc;
clear all;
%% 参数设置
%% 测试函数网址1 https://www.cnblogs.com/devilmaycry812839668/p/6371704.html?utm_source=itdadao&utm_medium=referral
%% 网址2 https://wenku.baidu.com/view/cad168124431b90d6c85c7ca.html
option.pro=4; %选择测试函数
option.sucess_error=0.01; %寻优结果和真实最优解的差距小于 该值,则认为 寻优成功
option.D=10; %维数
switch option.pro
case 1 %Rastrigin's 函数
option.bound=[-5*ones(option.D,1),5*ones(option.D,1)];
option.aimFcn=@aimFcn_1;
option.Minimum=0;
string=['Rastrigin Function, Global Minimum=0'];
case 2 %SCHAFFER FUNCTION N. 2
option.bound=[-5,5;-5,5];
option.aimFcn=@aimFcn_2;
option.Minimum=0;
string=['Schaffer function 1, Global Minimum=0'];
case 3 %Ackley函数
option.bound=[-5*ones(option.D,1),5*ones(option.D,1)];
option.aimFcn=@aimFcn_3;
option.Minimum=0;
string=['Ackley function, Global Minimum=0'];
case 4 %Griewank函数
option.bound=[-5*ones(option.D,1),5*ones(option.D,1)];
option.aimFcn=@aimFcn_4;
option.Minimum=0;
string=['Griewank function, Global Minimum=0'];
case 5 %Shubert
option.bound=[-5,5;-5,5];
option.aimFcn=@aimFcn_5;
option.Minimum=-186.73;
string=['Shubert function 2, Global Minimum= -186.73'];
case 6 %sphere
option.bound=[-5*ones(option.D,1),5*ones(option.D,1)];
option.aimFcn=@aimFcn_6;
option.Minimum=0;
string=['Sphere function , Global Minimum=0'];W
end
%% 实验参数
option.repeat_num=20; %重复实验10次,取平均值
%% 算法参数
option.peiod=100 ; %Maximum Iterations 最大迭代次数
option.genMax=option.peiod;
option.M=30; %Population Size 种群规模
option.popSize=option.M;
option.show_t=1; %是否显示迭代次数
option.show_pc=0; %是否显示迭代收敛图
option.creat_x=@creat_x_1;
option.by=@bianyi_1;
option.p1=0.9; %交叉概率 GA
option.p2=0.01; %变异概率 GA
option.p3=0.3; %灾变概率 GA
option.k1=10; % 自适应GA 1 交叉概率系数1
option.k2=0.05; % 自适应GA 1 交叉概率系数2
option.k3=10; % 自适应GA 1 变异概率系数1
option.k4=0.01; % 自适应GA 1 变异概率系数2
option.p1_max=0.9; % 自适应GA 2 交叉概率系数1
option.p1_min=0.1; % 自适应GA 2 交叉概率系数2
option.p2_max=0.1; % 自适应GA 2 变异概率系数1
option.p2_min=0.01; % 自适应GA 2 变异概率系数2
option.c1 = 2; %学习因子1 APSO
option.c2 = 2; %学习因子2 APSO
option.wmax = 1.2; %最大权重 APSO
option.wmin = 0.5; %最小权重 APSO
option.b=1;
option.p=option.p3;
%% 海豚算法
option.speed_D=2; %最大速度
option.search_T=20; %随即搜索次数
option.A=1;
option.e=3;
%% 混沌测试搜索
option.chaos_k=10;
option.u=4;
%% 狼群算法
option.p=0.05;
option.time_try=5; %尝试次数
option.step_WPA=2; %步长
option.w=0.8; %召集距离
option.p_wofl_D=0.5; %探狼比例
%% 萤火虫
option.r_FA=1; %光吸收系数
option.beta_FA=1;
option.a_FA=0.1;
%% 狮群算法
option.adlut_lion_p=0.2;
%% 鸡群算法
option.p_CSO=[0.5,0.1,0.4]; %公鸡,母鸡,小鸡比例
%% CS
option.a=1;
option.sigma=0.6966;
option.beta=2;
option.w0=5; %惯性权重
% 松鼠算法
option.P_dp_SSA=0.8;
option.Gc_SSA=0.05;
option.Max_Dg_SSA=1;
option.CD_SSA=[0.675,1.5];
option.sigma=0.6966;
option.beta=2;
option.a=(option.bound(:,2)-option.bound(:,1))/5; %步长控制变量
%% 初始种群生成
for i=1:option.repeat_num
data=[];
x=cell(option.popSize,1);
fit=zeros(option.popSize,1);
for j=1:option.popSize
x{j}=option.creat_x(option,data);
v{j}=randn(size(x{j}));
fit(j)=option.aimFcn(x{j},option,data);
end
data.x=x;
data.fit=fit;
data.v=v;
%%
tic
[fit_record1(i,:),best_result1]=Apso(option,data); %粒子群
time(i,1)=toc;
[min_according(i,1),gen(i,1),success(i,1)]=according(fit_record1(i,:),option);
tic
[fit_record2(i,:),best_result2]=Aga1(option,data); %遗传
time(i,2)=toc;
[min_according(i,2),gen(i,2),success(i,2)]=according(fit_record2(i,:),option);
tic
[fit_record3(i,:),best_result3]=GAPSO(option,data); %遗传粒子群
time(i,3)=toc;
[min_according(i,3),gen(i,3),success(i,3)]=according(fit_record3(i,:),option);
end
time=mean(time);
gen=mean(gen);
std_according=std(min_according)
mean_according=mean(min_according);
max_according=max(min_according);
min_according=min(min_according);
mean_success=mean(success);
fit_record1=mean(fit_record1);
fit_record2=mean(fit_record2);
fit_record3=mean(fit_record3);
figure
hold on
plot(fit_record1,'LineWidth',2)
plot(fit_record2,'LineWidth',2)
plot(fit_record3,'LineWidth',2)
legend('PSO','GA','GAPSO')
filename201=['智能算法算法收敛曲线(',string,')'];
filename=[filename201,'.fig'];
saveas(gcf,filename,'fig');% 保存
filename=[filename201,'.jpg'];
saveas(gcf,filename,'jpg');% 保存
figure
hold on
plot(log10(fit_record1),'LineWidth',2)
plot(log10(fit_record2),'LineWidth',2)
plot(log10(fit_record3),'LineWidth',2)
legend('PSO','GA','GAPSO')
filename201=['智能算法算法收敛曲线log10(',string,')'];
filename=[filename201,'.fig'];
saveas(gcf,filename,'fig');% 保存
filename=[filename201,'.jpg'];
saveas(gcf,filename,'jpg');% 保存
%%
result_estimate=[std_according;max_according;min_according;mean_according;gen;mean_success;time];
xlswrite(['智能算法对比结果.xlsx'],result_estimate,option.pro);
%% 测试函数
figure
x=option.bound(1,1):(option.bound(1,2)-option.bound(1,1))/100:option.bound(1,2);
y=option.bound(2,1):(option.bound(2,2)-option.bound(2,1))/100:option.bound(2,2);
Z=zeros(length(x),length(y));
x_new=repmat(x,length(y),1);
y_new=repmat(y',1,length(x));
for i=1:length(x)
for j=1:length(y)
Z(i,j)=option.aimFcn([x_new(i,j),y_new(i,j)],option,data);
end
end
mesh(x,y,Z)
title(string);
xlabel('x')
ylabel('y')
zlabel('f')
filename201=['测试函数(',string,')'];
filename=[filename201,'.fig'];
saveas(gcf,filename,'fig');% 保存
min(min(Z))
%%
temp=[0,x;
y',Z];
xlswrite(['测试函数.xlsx'],temp,option.pro);