最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

PSO_MATLAB+程序

来源:动视网 责编:小OO 时间:2025-10-02 08:43:12
文档

PSO_MATLAB+程序

%------基本粒子群优化算法(ParticleSwarmOptimization)-----------%------名称:基本粒子群优化算法(PSO)%------作用:求解优化问题%------说明:全局性,并行性,高效的群体智能算法%------作者:马天雨%------单位:中南大学信息科学与工程学院%------时间:2009年4月12日%格式标准化clearall;clc;formatlong;%初始化各个因子c1=1.4962;   %学习因子c1c2=1.4962;   %
推荐度:
导读%------基本粒子群优化算法(ParticleSwarmOptimization)-----------%------名称:基本粒子群优化算法(PSO)%------作用:求解优化问题%------说明:全局性,并行性,高效的群体智能算法%------作者:马天雨%------单位:中南大学信息科学与工程学院%------时间:2009年4月12日%格式标准化clearall;clc;formatlong;%初始化各个因子c1=1.4962;   %学习因子c1c2=1.4962;   %
%------基本粒子群优化算法(Particle Swarm Optimization)-----------

%------名称:基本粒子群优化算法(PSO)

%------作用:求解优化问题

%------说明:全局性,并行性,高效的群体智能算法

%------作者:马天雨

%------单位:中南大学信息科学与工程学院

%------时间:2009年4月12日

%格式标准化

clear all;

clc;

format long;

%初始化各个因子

c1=1.4962;    %学习因子c1

c2=1.4962;    %学习因子c2

w=0.7298;     %惯性权重w

N=20;         %粒子群规模

D=6;          %搜索空间维数(本程序适合3维及以上,不能求解1,2维)

eps=10^(-6);  %满足条件的误差(在不知道最小值时候不用设置)

MaxDT=500;    %粒子群繁殖的代数

%初始化粒子的速度和位置,数据结构用矩阵A表示

for i=1:N

    for j=1:2*D

        A(i,j)=rand;

    end

end

for i=1:N

    for j=2*D+1:3*D

        A(i,j)=A(i,j-2*D);

    end

end

%计算各个粒子的适应度

for i=1:N

    A(i,3*D+1)=fitness(A(i,1:D),D);

end

%对粒子的适应度进行排序

B=sortrows(A,3*D+1);

%排序后适应度低的前面一半粒子直接进入下一代

NextGeneration=zeros(N,3*D+1);

for i=1:N/2

    for j=1:3*D+1

        NextGeneration(i,j)=B(i,j);

    end

end

%后一半粒子进行遗传选择和交叉操作

for i=1:N/2

    for j=1:3*D+1

        Cross(i,j)=B(i+N/2,j);

    end

end

%产生一个随机的交叉位置

for i=1:N/4

    Anumber=randperm(D-1);

    if Anumber(1)~=1

        position=Anumber(1);

    else

        position=Anumber(2);

    end

    %交叉进行

    for j=position:D-1

        temp=Cross(i,j);

        Cross(i,j)=Cross(N/2-i+1,j);

        Cross(N/2-i+1,j)=temp;

    end

end

%交叉结束,进行更新

for i=1:N/2

    Cross(i,3*D+1)=fitness(Cross(i,1:D),D);

    if Cross(i,3*D+1)        for j=2*D+1:3*D

            Cross(i,j)=Cross(i,j-2*D);

        end

    else

        for j=2*D+1:3*D

            Cross(i,j)=B(i,j);

        end

    end

end

%下面选择最好的粒子N/2个进入下一代

Pool=zeros(N,3*D+1);

for i=1:N/2

    for j=1:3*D+1

        Pool(i,j)=B(i+N/2,j);

    end

end

for i=1+N/2:N

    for j=1:3*D+1

        Pool(i,j)=Cross(i-N/2,j);

    end

end

%POOLX表示排序后的粒子选择池

PoolX=sortrows(Pool,3*D+1);

for i=1+N/2:N

    for j=1:3*D+1

        NextGeneration(i,j)=PoolX(i-N/2,j);

    end

end

Pbest=NextGeneration(i,2*D+1:3*D);

for i=2:N

    if NextGeneration(i,3*D+1)        Pbest=NextGeneration(i,2*D+1:3*D);

    end

end

%根据粒子群公式进行迭代(Stander PSO Step)

%速度更新

for i=1:N

    for j=D+1:2*D

        A(i,j)=w*NextGeneration(i,j)+c1*rand*(NextGeneration(i,j+D)-NextGeneration(i,j-D))+c2*rand*(Pbest(j-D)-NextGeneration(i,j-D));

    end

end

%位置更新

for i=1:N

    for j=1:D

        A(i,j)=NextGeneration(i,j)+A(i,j+D);

    end

    A(i,3*D+1)=fitness(A(i,1:D),D);

    if A(i,3*D+1)        for j=2*D+1:3*D

            A(i,j)=A(i,j-2*D);

        end

    else

        for j=2*D+1:3*D

            A(i,j)=NextGeneration(i,j-2*D);

        end

    end

end

%下面进入主要循环,循环到最大次数得到最优解和最小值

%DDTime=1;

for time=1:MaxDT

    B=sortrows(A,3*D+1);

    NextGeneration=zeros(N,3*D+1);

    for i=1:N/2

        for j=1:3*D+1

            NextGeneration(i,j)=B(i,j);

        end

    end

    %遗传选择交叉

    for i=1:N/2

        for j=1:3*D+1

            Cross(i,j)=B(i+N/2,j);

        end

    end

    for i=1:N/4

        Anumber=randperm(D-1);

        if Anumber(1)~=1

            position=Anumber(1);

        else

            position=Anumber(2);

        end

        

        for j=position:D-1

            temp=Cross(i,j);

            Cross(i,j)=Cross(N/2-i+1,j);

            Cross(N/2-i+1,j)=temp;

        end

    end

    %交叉结束,进行更新

    for i=1:N/2

        Cross(i,3*D+1)=fitness(Cross(i,1:D),D);

        if Cross(i,3*D+1)            for j=2*D+1:3*D

                Cross(i,j)=Cross(i,j-2*D);

            end

        else

            for j=2*D+1:3*D

                Cross(i,j)=B(i,j);

            end

        end

    end

    %下面选择最好的粒子N/2个进入下一代

    Pool=zeros(N,3*D+1);

    for i=1:N/2

        for j=1:3*D+1

            Pool(i,j)=B(i+N/2,j);

        end

    end

    for i=1+N/2:N

        for j=1:3*D+1

            Pool(i,j)=Cross(i-N/2,j);

        end

    end

    

    PoolX=sortrows(Pool,3*D+1);

    for i=1+N/2:N

        for j=1:3*D+1

            NextGeneration(i,j)=PoolX(i-N/2,j);

        end

    end

    Pbest=NextGeneration(i,2*D+1:3*D);

    for i=2:N

        if NextGeneration(i,3*D+1)            Pbest=NextGeneration(i,2*D+1:3*D);

        end

    end

    %根据粒子群公式进行迭代

    for i=1:N

        for j=D+1:2*D

            A(i,j)=w*NextGeneration(i,j)+c1*rand*(NextGeneration(i,j+D)-NextGeneration(i,j-D))+c2*rand*(Pbest(j-D)-NextGeneration(i,j-D));

       end

    end

    

    for i=1:N

        for j=1:D

            A(i,j)=NextGeneration(i,j)+A(i,j+D);

        end

        A(i,3*D+1)=fitness(A(i,1:D),D);

        if A(i,3*D+1)            for j=2*D+1:3*D

                A(i,j)=A(i,j-2*D);

            end

        else

            for j=2*D+1:3*D

                A(i,j)=NextGeneration(i,j-2*D);

            end

        end

    end

    Pg(time)=fitness(Pbest,D);

    %DDTime=DDTime+1;

    %if fitness(Pbest,D)        %break;

    %end

end

%算法结束,得到的结果显示如下:

disp('****************************************************')

disp('最后得到的最优位置为:')

X=Pbest'

disp('得到的函数最小值为:')

Minimize=fitness(Pbest,D)

disp('****************************************************')

%绘制进化代数和适应度关系曲线图

xx=linspace(1,MaxDT,MaxDT);

yy=Pg(xx);

plot(xx,yy,'b-')

hold on

grid on

title('带交叉因子的粒子群优化算法进化代数与适应度值关系曲线图')

legend('粒子适应度曲线走势')

%------算法结束---DreamSun GL & HF-------------------------

文档

PSO_MATLAB+程序

%------基本粒子群优化算法(ParticleSwarmOptimization)-----------%------名称:基本粒子群优化算法(PSO)%------作用:求解优化问题%------说明:全局性,并行性,高效的群体智能算法%------作者:马天雨%------单位:中南大学信息科学与工程学院%------时间:2009年4月12日%格式标准化clearall;clc;formatlong;%初始化各个因子c1=1.4962;   %学习因子c1c2=1.4962;   %
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top