题目:计算函数f(x)=
∑
i
=
1
n
x
i
2
\sum_{i=1}^{n}x_i^2
∑i=1nxi2(-20≤
x
i
x_i
xi≤20)的最小值,其中个体x的维数n=10。
解答:优化结束后,根据所得的图可知,优化后的结果为x=[-0.6325 0.1572 -0.4814 0.1091 -0.3154 0.2236 -0.3991 0.5907 0.0221 -0.1172]×10^-4,
Matlab代码:
%初始化
clear all; %清除所有变量
close all; %清图
clc; %清屏
N=100; %群体粒子个数
D=10; %粒子维数
T=200; %最大迭代次数
c1=1.5; %学习因子1
c2=1.5; %学习因子2
w=0.8; %惯性权重
Xmax=20; %位置最大值
Xmin=-20; %位置最小值
Vmax=10; %速度最大值
Vmin=-10; %速度最小值
%初始化种群个体(限定位置和速度)
x=rand(N,D)*(Xmax-Xmin)+Xmin;
v=rand(N,D)*(Vmax-Vmin)+Vmin;
%初始化个体最优位置和最优值
p=x;
pbest=ones(N,1);
for i=1:N
pbest(i)=func1(x(i,:));
end
%初始化全局最优位置和最优值
g=ones(1,D);
gbest=inf;
for i=1:N
if(pbest(i)<gbest)
g=p(i,:);
gbest=pbest(i);
end
end
gb=ones(1,T);
%按照公式依次迭代直到满足精度或者迭代次数
for i=1:T
for j=1:N
%更新个体最优位置和最优值
if(func1(x(j,:))<pbest(j))
p(j,:)=x(j,:);
pbest(j)=func1(x(j,:));
end
%更新全局最优位置和最优值
if(pbest(j)<gbest)
g=p(j,:);
gbest=pbest(j);
end
%更新位置和速度值
v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
x(j,:)=x(j,:)+v(j,:);
%边界条件处理
for ii=1:D
if(v(j,ii)>Vmax)|(v(j,ii)<Vmin)
v(j,ii)=rand*(Vmax-Vmin)+Vmin;
end
if(x(j,ii)>Xmax)|(x(j,ii)<Xmin)
x(j,ii)=rand*(Xmax-Xmin)+Xmin;
end
end
end
%记录历代全局最优值
gb(i)=gbest;
end
g; %最优个体
gb(end); %最优值
figure;
plot(gb);
xlabel('迭代次数');
ylabel('适应度值');
title('适应度进化曲线');
%适应度函数
function result=func1(x);
summ=sum(x.^2);
result=summ;
end