clc
clear
close all
popnum=40;%种群数量
n=30;%维度
t_max=100;%最大迭代次数
%% 初始化
section=[-30 30];%自变量范围
% section=[-10 10];%自变量范围
x1=zeros(popnum,n);
for i=1:popnum
x1(i,:)=section(1)+(section(2)-section(1))*rand(1,n);
end
for j=1:popnum
[~,f(j)]=fit(x1(j,:));
end
Ff(1)=min(f);
%% 迭代过程
for i=1:t_max
if mod(i,10)==0
disp(['搜索进度',num2str(i/t_max*100),'%'])
end
%计算每个个体目标函数值
for j=1:popnum
Fit1(j)=fit(x1(j,:));
end
[FF,index]=min(Fit1);
Fit_best=FF(1);
P=x1(index(1),:);
%根据R计算T1值,计算群体范围的温度变化
R=rand(1);
if R>0.5
T=0;
else
T=1;
end
T1=T-t_max/(i-(t_max+1));
%种群中每个个体与最优个体之间的距离
f=2;%取值2-3
L=1.5;%取值1.5-2
SA=(sqrt(f*exp(-i/L)-exp(-i)))^2;
C=rand(1);
M=2;
for j=1:popnum
Pep=x1(j,:);
Dep=SA*P-C*Pep;
Pgrid=P-Pep;
A=M*(T1+Pgrid)*rand(1)-T1;
x1(j,:)=P-A.*Dep;
end
x1(x1>section(2))=section(1)+(section(2)-section(1))*rand;
x1(x1<section(1))=section(1)+(section(2)-section(1))*rand;
%记录历史最优值
for j=1:popnum
[~,f(j)]=fit(x1(j,:));
end
if min(f)<Ff(i)
Ff(i+1)=min(f);
else
Ff(i+1)=Ff(i);
end
end
figure(1)
plot(0:size(Ff,2)-1,Ff,'-k')
xlabel('迭代次数')
ylabel('函数值')
Ff(end)
- 1
- 2
- 3
- 4
前往页