PSO无约束优化结果不一致问题

img

如图的粒子群优化问题,为什么我的结果比100小,x也没超出范围呀,而且每次结果都不一样,差的还挺多,但迭代完成后是收敛的。求解!感谢!
代码如下:

%%%%%%%%%%%%%粒子群算法求函数极值%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%
clear all;                  %清除所有变量
close all;                  %清图
clc;                        %清屏
N=100;                      %群体粒子个数
D=30;                        %粒子维数
T=800;                      %最大迭代次数
c1=1.5;                     %学习因子1
c2=1.5;                     %学习因子2
Wmax=0.8;                   %惯性权重最大值
Wmin=0.4;                   %惯性权重最小值
Xmax=5.12;                     %位置最大值
Xmin=-5.12;                    %位置最小值
Vmax=5;                     %速度最大值
Vmin=-5;                    %速度最小值
%%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%
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)=func2(x(i,:));
end
%%%%%%%%%%%%%初始化全局最优位置和最优值%%%%%%%%%%
g=ones(1,D);
gbest=inf;
for i=1:N
    if(pbest(i)1,T);
%%%%%%%%按照公式依次迭代直到满足精度或者迭代次数%%%%%%
for i=1:T
%     if mod(T,20) == 0
%         figure
%         plot(x(:,1),x(:,2),'*');
%     end
    for j=1:N
        %%%%%%%%%%更新个体最优位置和最优值%%%%%%%%%
        if (func2(x(j,:))if(pbest(j)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('适应度进化曲线')
fprintf('最优值为:%f',gb(end));
%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%
function value=func2(x)
    value=sum(x.^2-10.*cos(2.*pi.*x)+10);
end

结果:

img

img

把算出来的x带入原来的式子中看一下答案是否真的比100小,如果所有的x符合范围条件并且最后的结果也确实是比100小,那么最优值就是80多

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:PSO优化算法