精华内容
下载资源
问答
  • 粒子群算法matlab实例(含注释)
  • 粒子群算法MATLAB实例

    2021-04-07 12:28:31
    end end % 便利整个种群,求整个种群最佳的适应度和位置 %% 粒子群迭代 % 更新速度并对速度进行边界处理 % 更新位置并对位置进行边界处理 % 计算新种群各个个体位置的适应度 % 新适应度与个体历史最佳适应度做比较 ...
    %% 清空环境
    clc;clear all;close all;
    %% 设置种群参数
    %   需要自行配置
    sizepop = 500;                    % 初始种群个数
    dim = 30;                          % 空间维数
    ger =700;                       % 最大迭代次数     
    xlimit_max = 600*ones(dim,1);    % 设置位置参数限制(矩阵的形式可以多维)
    xlimit_min = -600*ones(dim,1);
    vlimit_max = 1*ones(dim,1);       % 设置速度限制
    vlimit_min = -1*ones(dim,1);
    c_1 = 0.8;                        % 惯性权重
    c_2 = 0.5;                        % 自我学习因子
    c_3 = 0.5;                        % 群体学习因子 
    

    %% 生成初始种群
    % 首先随机生成初始种群位置
    % 然后随机生成初始种群速度
    % 然后初始化个体历史最佳位置,以及个体历史最佳适应度
    % 然后初始化群体历史最佳位置,以及群体历史最佳适应度

    for i=1:dim
        for j=1:sizepop
            pop_x(i,j) = xlimit_min(i)+(xlimit_max(i) - xlimit_min(i))*rand;
            pop_v(i,j) = vlimit_min(i)+(vlimit_max(i) - vlimit_min(i))*rand;  % 初始种群的速度
        end
    end 
    gbest = pop_x;                                % 每个个体的历史最佳位置
    fitness_gbest = fun(pop_x);                   % 每个个体的历史最佳适应度
    zbest = pop_x(:,1);                           % 种群的历史最佳位置
    fitness_zbest = fitness_gbest(1);             % 种群的历史最佳适应度
    
    for j=1:sizepop
        if fitness_gbest(j) < fitness_zbest       % 如果求最小值,则为<; 如果求最大值,则为>; 
            zbest = pop_x(:,j);
            fitness_zbest=fitness_gbest(j);
        end
    end   % 便利整个种群,求整个种群最佳的适应度和位置
    

    %% 粒子群迭代
    % 更新速度并对速度进行边界处理
    % 更新位置并对位置进行边界处理
    % 计算新种群各个个体位置的适应度
    % 新适应度与个体历史最佳适应度做比较
    % 个体历史最佳适应度与种群历史最佳适应度做比较
    % 再次循环或结束

    
    iter = 1;                        %迭代次数
    record = zeros(ger, 1);          % 记录器
    while iter <= ger
        for j=1:sizepop  % 对每个个体依次处理
            %    更新速度并对速度进行边界处理 
            pop_v(:,j)= c_1 * pop_v(:,j) + c_2*rand*(gbest(:,j)-pop_x(:,j))+c_3*rand*(zbest-pop_x(:,j));% 速度更新
    
            for i=1:dim
                if  pop_v(i,j) > vlimit_max(i)
                    pop_v(i,j) = vlimit_max(i);
                end
                if  pop_v(i,j) < vlimit_min(i)
                    pop_v(i,j) = vlimit_min(i);
                end
            end
            
            %    更新位置并对位置进行边界处理
            pop_x(:,j) = pop_x(:,j) + pop_v(:,j);% 位置更新
            for i=1:dim
                if  pop_x(i,j) > xlimit_max(i)
                    pop_x(i,j) = xlimit_max(i);
                end
                if  pop_x(i,j) < xlimit_min(i)
                    pop_x(i,j) = xlimit_min(i);
                end
            end
    
      
            %    计算新种群各个个体位置的适应度
    
            fitness_pop(j) = fun(pop_x(:,j));                      % 当前个体的适应度
    
            
            %    新适应度与个体历史最佳适应度做比较
            if fitness_pop(j) < fitness_gbest(j)       % 如果求最小值,则为<; 如果求最大值,则为>; 
                gbest(:,j) = pop_x(:,j);               % 更新个体历史最佳位置            
                fitness_gbest(j) = fitness_pop(j);     % 更新个体历史最佳适应度
            end   
            
            %    个体历史最佳适应度与种群历史最佳适应度做比较
            if fitness_gbest(j) < fitness_zbest        % 如果求最小值,则为<; 如果求最大值,则为>; 
                zbest = gbest(:,j);                    % 更新群体历史最佳位置  
                fitness_zbest=fitness_gbest(j);        % 更新群体历史最佳适应度  
            end    
        end
        
        record(iter) = fitness_zbest;%最优值记录
        
        iter = iter+1;
    
    end
    

    %% 迭代结果输出

    plot(record);title('收敛过程')
    disp(['最优值:',num2str(fitness_zbest)]);
    disp('变量取值:');
    disp(zbest);
    

    %% 目标函数
    % 下列函数是一个多峰值的函数,在0向量处取得全局最小值0

    function result = fun(X)
        result = sum(X.^2)/4000 - prod(cos(X./((1:1:30).^0.5)')) + 1;
    end
    
    
    
    展开全文
  • 粒子群算法MATLAB编程实例
  • 粒子群算法实例 matlab

    2019-03-22 17:13:37
    粒子群算法实例 matlab。 最近初学粒子群算法,自己按照自己的理解把每个步骤都解释了,然后每个步骤都解释的很清楚,很适合初学者观看,里面有matlab的代码,还有文档讲解,反正对于我一个初学者来说是能够看得懂得...
  • 粒子群算法matlab实现

    2017-10-01 09:37:34
    实现粒子群算法matlab代码,包含3个文件,主要是用一个实例加以说明
  • 一、粒子群算法理论粒子群算法来源于鸟类集体活动的规律性,进而利用群体智能建立简化模型。它模拟的是鸟类的觅食行为,将求解问题的空间比作鸟类飞行的时间,每只鸟抽象成没有体积和质量的粒子,来表征一个问题的...

    d4f55e17377db56006837b7c21b2fe18.png

    来喽!

    一、粒子群算法理论

    粒子群算法来源于鸟类集体活动的规律性,进而利用群体智能建立简化模型。它模拟的是鸟类的觅食行为,将求解问题的空间比作鸟类飞行的时间,每只鸟抽象成没有体积和质量的粒子,来表征一个问题的可行解。

    1.1 粒子群算法建模

    粒子群算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数。每个粒子有了初始位置与初始速度,然后迭代寻优。每一次迭代中,每个粒子通过跟踪两个极值来更新自己的解空间中的位置和速度,一个是单个粒子本身在迭代中找到的最优粒子(个体极值),一个是所有粒子在迭代过程中的最优解粒子(全局极值)。

    1.2 粒子群算法特点

    (1)基于群体智能理论的优化算法,高效的并行算法。

    (2)粒子群算法随机初始化种群,使用适应值来评价个体的优劣程度,进行一系列的随机搜索。但粒子群算法根自己的速度来决定搜索,不需要进行交叉变异等操作,避免了复杂的操作。

    (3)每个粒子在算法结束时仍保持个体极值,所以除了得到问题的最优解以外,还能得到若干次优解,给出更多方案。

    (4)粒子群算法特有的记忆使其可以动态的跟踪当前搜索情况并调整搜索方向。

    二、粒子群算法种类

    2.1 基本粒子群算法

    假设在一个D维的目标搜索空间中,有N个粒子组成群落,其中第i个粒子表示为一个D维向量:

    第i个粒子飞行速度也是一个D维向量:

    第i个粒子迄今为止搜索到最优位置称为个体极值:

    整个粒子群迄今为止搜索到的最优位置为全局极值:

    在找到这两个最优值后,粒子群更新自己的速度和位置:

    其中,

    是学习因子(加速常数);
    为[0,1]范围内的均匀随机数;
    是粒子速度;
    增加了粒子飞行的随机性。更新速度的式子由三部分组成,第一部分为‘惯性’,反应了粒子群运动的‘习惯’;第二部分是‘认知’,反映了对自身历史经验的记忆;第三部分是‘社会’,反映了粒子间协同合作知识共享的群体历史经验。

    2.2 标准粒子算法

    引入了两个新的概念:

    探索:指粒子在一定程度上离开原先的轨迹,向新的方向搜索,体现了开拓未知区域的能力,探索能力是全局搜索能力。

    开发:指粒子在一定程度上继续在原先的轨迹上进行进一步搜索,是局部搜索能力。

    1998年,Shi Yuhui等人提出了带有惯性权重的改进粒子群算法:

    第一个式子有三个部分,第一部分保证算法的全局收敛性,第二、三部分保证局部收敛能力。w较大,全局收敛能力强局部收敛能力减弱;w较小,全局收敛能力减弱,局部收敛能力较强。当w=1时,与基本粒子算法相同,实验结果表明:w在0.8~1.2之间有更快的收敛速度,w>1.2时,容易陷入局部极值。

    在搜索时还可以对w进行动态调整,采用较多的是Shi提出的线性递减权值策略:

    表示最大进化代数;
    表示惯性最大权重;
    表示惯性最小权重。

    2.3 压缩粒子群算法

    Clerc等人利用约束因子来控制最终的收敛,可以有效搜索不同区域:

    为压缩因子:

    实验结果表明:与使用惯性权重的粒子群算法比较,使用具有压缩因子的粒子群算法有更快的收敛速度。

    2.4 离散粒子群算法

    Kennefy和Eberhart提出了离散二进制版的粒子群算法。将离散的问题映射到了连续的粒子运动空间,计算上扔保留速度-位置更新的运算规则。粒子在空间状态的取值只限于0,1两个值,而速度的每一维

    代表每一位
    取值为1的可能性,因此
    的公式保持不变,但是
    只能在[0,1]之间取值:

    1d4de3e9db8ece8b1e2fcf7ab82c31b7.png

    r是从

    分布产生的随机数。

    三、粒子群算法流程

    4b4022667c5f9dfb8c12b39b72625a0f.png

    四、MATLAB实例及仿真

    参数说明:

    粒子种群规模N:一般为100~200。

    惯性权重w:控制算法的开发和探索能力,一般取值为[0.8,1.2]。

    加速常数

    :调节向
    方向飞行的最大步长,分别决定了粒子个体经验和群体经验对粒子运动轨迹的影响。
    粒子缺乏认知能力,
    个体之间没有信息交互,所以一般设置
    ,通常取
    。这样个体经验和群体经验有了同样的影响力。

    粒子最大速度

    :粒子速度在每一维都有一个最大速度限制值,用来对粒子速度进行钳制,该值太大,粒子也许会飞过优秀区域,太小粒子们可能会陷入局部最优,无法移动足够远跳出局部最优。研究发现 设定
    和调整惯性权重的作用是等效的,所以
    一般用于初始化进行设定,二不再对最大速度进行细致的选择和调节。

    邻域结构设定:全局版的粒子群算法将整个群体作为粒子的邻域,具有搜索快的优点但是容易陷入局部最优。局部版本粒子群算法将位置相近的个体作为粒子的邻域,收敛速度慢,不易陷入局部最优。实际中可先采用全局粒子群算法寻找最优解方向,再采用局部粒子群算法细致搜索。

    边界条件处理:边界吸收的方法。

    例1:计算函数

    的最小值,其中个体x的维数n=10,这是一个简单的平方和函数,只有一个极小点x=(0,0,...,0),理论上最小值分f(0,0,...,0)=0。

    解:

    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)<Vmin)||(v(j,ii)>Vmax)
                    v(j,ii)=rand*(Vmax-Vmin)+Vmin;
                end
                if (x(j,ii)<Xmin)|(x(j,ii)>Xmax)
                    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

    9cb744fe0cb4eb5b677452245950b7a8.png

    例2:求函数

    的最小值,其中x的取值范围是[-4,4],y的取值范围是[-4,4]。这是一个有多个局部极值的函数。函数图形如图:
    clear all;
    close all;
    clc;
    x=-4:0.02:4;
    y=-4:0.02:4;
    N=size(x,2);
    for i=1:N
        for j=1:N
            z(i,j)=3*cos(x(i)*y(j))+x(i)+y(j)*y(j);
        end
    end
    mesh(x,y,z)
    xlabel('x')
    ylabel('y')

    69b2d594061c1b3a1443a381e248b969.png

    解:

    clear all;
    close all;
    clc;
    N=100;                         %群体粒子个数
    D=2;                           %粒子维数
    T=200;                         %最大迭代次数
    c1=1.5;                        %学习因子1
    c2=1.5;                        %学习因子2
    Wmax=0.8;                      %惯性权重最大值
    Wmin=0.4;                      %惯性权重最小值
    Xmax=4;                        %位置最大值
    Xmin=-4;                       %位置最小值
    Vmax=1;                        %速度最大值
    Vmin=-1;                       %速度最小值
    %初始化个体
    x=rand(N,D)*(Xmax-Xmin)+Xmin;
    v=rand(N,D)*(Vmax-Vmin)+Vmin;
    %初始化个体最优位置和最优值
    p=x;
    pbest=ones(1,D);
    for i=1:N
        pbest(i)=func2(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 (func2(x(j,:))<pbest(j))
                p(j,:)=x(j,:);
                pbest(j)=func2(x(j,:));
            end
            %更新全局最优位置和最优值
            if (pbest(j)<gbest)
                g=p(j,:);
                gbest=pbest(j);
            end
            %计算动态惯性权重值
            w=Wmax-(Wmax-Wmin)*i/T;
            %更新位置和速度
            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)<Vmin)||(v(j,ii)>Vmax)
                   v(j,ii)=rand*(Vmax-Vmin)+Vmin;
                end
                if (x(j,ii)<Xmin)||(x(j,ii)>Xmax)
                    x(j,ii)=rand*(Xmax-Xmin)+Xmin;
                end
            end
        end
        gb(i)=gbest;
    end
    g;%最优个体
    gb(end);%最优值
    figure
    plot(gb)
    xlabel('迭代次数')
    ylabel('适应度值')
    title('适应度进化曲线')
    %适应度函数
    function value=func2(x)
    value=3*cos(x(1)*x(2))+x(1)+x(2)^2;
    end
            

    e3c7b012417169ab46f8f9b458370c2b.png

    例3:用离散粒子群算法求函数

    的最小值,其中x的取值范围是[0,9],这是一个有局部多个极值的函数,图形如图所示:
    clear all;
    close all;
    clc;
    x=0:0.01:9;
    y=x+6*sin(4*x)+9*cos(5*x);
    plot(x,y)
    xlabel('x')
    ylabel('f(x)')

    5ca4c582baf0d80490725cc689a4e46b.png

    解:

    clear all;
    close all;
    clc;
    N=100;                         %群体粒子个数
    D=20;                           %粒子维数
    T=200;                         %最大迭代次数
    c1=1.5;                        %学习因子1
    c2=1.5;                        %学习因子2
    Wmax=0.8;                      %惯性权重最大值
    Wmin=0.4;                      %惯性权重最小值
    Xs=9;                        %位置最大值
    Xx=0;                       %位置最小值
    Vmax=10;                        %速度最大值
    Vmin=-10;                       %速度最小值
    %初始化个体
    x=randi([0,1],N,D);
    v=rand(N,D)*(Vmax-Vmin)+Vmin;
    %初始化个体最优位置和最优值
    p=x;
    pbest=ones(N,1);
    for i=1:N
        pbest(i)=func3(x(i,:),Xs,Xx);
    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 (func3(x(j,:),Xs,Xx)<pbest(j))
                p(j,:)=x(j,:);
                pbest(j)=func3(x(j,:),Xs,Xx);
            end
               %更新全局最优位置和最优值
            if (pbest(j)<gbest)
                g=p(j,:);
                gbest=pbest(j);
            end
              %计算动态惯性权重值
              w=Wmax-(Wmax-Wmin)*i/T;
              %更新位置和速度
            v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
           %边界条件处理
            for ii=1:D
                if (v(j,ii)<Vmin)||(v(j,ii)>Vmax)
                   v(j,ii)=rand*(Vmax-Vmin)+Vmin;
                end
            end
            vx(j,:)=1./(1+exp(-v(j,:)));
            for jj=1:D
               if vx(j,jj)>rand
                   x(j,jj)=1;
               else
                   x(j,jj)=0;
               end
            end
        end
        gb(i)=gbest;
    end
    g;%最优个体
    m=0;
    for j=1:D
        m=g(j)*2^(j-1)+m;
    end
    f1=Xx+m*(Xs-Xx)/(2^D-1);%最优值
    figure
    plot(gb)
    xlabel('迭代次数')
    ylabel('适应度值')
    title('适应度进化曲线')
    %适应度函数
    function result=func3(x,Xs,Xx)
    m=0;
    D=length(x);
    for j=1:D
        m=x(j)*2^(j-1)+m;
    end
    f=Xx+m*(Xs-Xx)/(2^D-1);%译码成十进制数
    fit=f+6*sin(4*f)+9*cos(5*f);
    result=fit;
    end
      

    1753a4513a01d084889f4ef506a82c2c.png

    例4:0-1背包问题,有N件物品和容积为V的包,第i件物品的容积是c(i),价值是w(i),求将这些物品放入包中,使物体的总容积不超过背包容积,且总价值和最大。假设物品数量为10,背包容量为300.每件物品的体积为[95,75,23,73,50,22,6,57,89,98];价值为[89,59,19,43,100,72,44,16,7,64];

    解:

    clear all;
    close all;
    clc;
    N=100;                          %群体粒子个数
    D=10;                           %粒子维数
    T=200;                          %最大迭代次数
    c1=1.5;                         %学习因子1
    c2=1.5;                         %学习因子2
    Wmax=0.8;                       %惯性权重最大值
    Wmin=0.4;                       %惯性权重最小值
    Vmax=10;                        %速度最大值
    Vmin=-10;                       %速度最小值
    V=300;                          %背包容量
    C=[95,75,23,73,50,22,6,57,89,98];            %物品体积
    W=[89,59,19,43,100,72,44,16,7,64];           %物品价值
    afa=2;                                       %惩罚函数系数
    %初始化个体
    x=randi([0,1],N,D);
    v=rand(N,D)*(Vmax-Vmin)+Vmin;
    %初始化个体最优位置和最优值
    p=x;
    pbest=ones(N,1);
    for i=1:N
        pbest(i)=func4(x(i,:),C,W,V,afa);
    end
    %初始化全局最优位置和最优值
    g=ones(1,D);
    gbest=eps;
    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 (func4(x(j,:),C,W,V,afa)>pbest(j))
                p(j,:)=x(j,:);
                pbest(j)=func4(x(j,:),C,W,V,afa);
            end
            %更新全局最优位置和最优值
            if (pbest(j)>gbest)
                g=p(j,:);
                gbest=pbest(j);
            end
             %计算动态惯性权重值
              w=Wmax-(Wmax-Wmin)*i/T;
              %更新位置和速度
              v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))+c2*rand*(g-x(j,:));
         %边界条件处理
            for ii=1:D
                 if (v(j,ii)<Vmin)||(v(j,ii)>Vmax)
                 v(j,ii)=rand*(Vmax-Vmin)+Vmin;
                 end
            end
            vx(j,:)=1./(1+exp(-v(j,:)));
            for jj=1:D
                 if vx(j,jj)>rand
                 x(j,jj)=1;
                 else
                 x(j,jj)=0;
                 end
            end
        end
        gb(i)=gbest;
    end
    g;%最优个体
    figure
    plot(gb)
    xlabel('迭代次数')
    ylabel('适应度值')
    title('适应度变化曲线')
    %适应度函数
    function result=func4(f,C,W,V,afa)
    fit=sum(f.*W);
    TotalSize=sum(f.*C);
    if TotalSize<=V
        fit=fit;
    else
        fit=fit-afa*(TotalSize-V);
    end
    result=fit;
    end
            

    4af4e3f1f3e3202d81442d831597c899.png

    希望我明天继续爱学习!!!

    展开全文
  • 算法以“群体”和“进化”为基本概念,将每个解看作搜索空间中的一个粒子。每个粒子都有一定的速度,其大小根据自身历史经验和种群经验进行动态调整。粒子通过不断地迭代飞行来寻找空间中最优解的位置,每次迭代,...

    4af98f89b0c8e93e85882064281a3cec.png

    1 PSO算法的提出

    1.1 标准PSO算法

    PSO算法最早提出于1995年,是一种基于随机初始解的搜索算法。算法以“群体”和“进化”为基本概念,将每个解看作搜索空间中的一个粒子。每个粒子都有一定的速度,其大小根据自身历史经验和种群经验进行动态调整。粒子通过不断地迭代飞行来寻找空间中最优解的位置,每次迭代,粒子的速度和位置按照下式进行更新。

    1d0c1c9eb4033f598cb809d9d70c052f.png
    粒子速度位置更新公式

    式中c1和c2表示粒子的学习因子;r1和r2为两个随机数;v和x表示粒子的速度和位置;w为惯性权重。标准PSO的性能很大程度上处决于其各项参数,参数选择不当会导致在算法初期,容易陷入局部最优或在算法后期收敛速度慢、精度低等问题。

    1.2 PSO算法的改进思路

    标准PSO算法容易陷入局部最优问题主要是由于其惯性权重被固定,不能根据算法实际收敛情况进行调整而导致的。因此,让惯性权重能够根据种群收敛情况进行动态调节是对算法进行改进的主要思路,目前提出的改进粒子群算法也大多是采用这种思路。

    2 用PSO算法求函数极值示例

    2.1 求一元函数最大(小)值问题

    例:求函数下面一元函数在指定区间的最小值

    6781d9b4e084f882f77879c0bd464587.png

    在Matlab中绘制该函数的图像如下:

    d73ae398338ca5c08ac4448f8381aa45.png

    下面开始在Matlab中求该函数的最小值,具体代码如下:

    首先绘制函数图像并显示出粒子的初始分布

    %% 绘制函数图像
    x = 1:0.01:2;
    y = sin(10*pi*x)./ x;
    f1=figure('color',[1 1 1]);
    plot(x,y)
    hold on
    %% 设置种群参数
    N=10; %种群规模
    M=30; %最大迭代次数
    D=1; %粒子搜索空间维数
    w=0.729; %惯性权重
    c1=2; %认知学习因子
    c2=2; %社会学习因子
    popmax=2; %粒子最大位置
    popmin=1; %粒子最小位置
    vmax=0.5; %粒子最大运动速度
    vmin=-0.5; %粒子最小运动速度
    %% 种群初始化
    for i=1:N
        for j=1:D
            pop(i,j)=rand+1; 
            v(i,j)=0.5*rands(1); 
        end
    end
    for i=1:N
        fpi(i)=fitness(pop(i,:)); 
        pi(i,:)=pop(i,:); 
    end
    pg=pop(1,:);
    for i=2:N
        if fitness(pop(i,:))<fitness(pg)
            fpg=fitness(pop(i,:)); 
            pg=pop(i,:);
        end
    end
    %% 绘制初始状态图
    plot(pi,fpi,'ro','MarkerFaceColor','r','MarkerEdgeColor','k','MarkerSize',5)
    title('粒子初始分布图')
    xlabel('X')
    ylabel('Y')

    结果如下:

    e716e0237a088966e5c259414da18fdc.png

    开始迭代寻优过程,得出结果

    %% 进入迭代寻优过程
    for t=1:M
        for i=1:N
            v(i,:)=w*v(i,:)+c1*rand*(pi(i,:)-pop(i,:))+c2*rand*(pg-pop(i,:)); %更新粒子速度
            if v(i,:)>vmax
                v(i,:)=vmax;
            elseif v(i,:)<vmin
                v(i,:)=vmin;
            end
            pop(i,:)=pop(i,:)+v(i,:); %更新粒子位置
            if pop(i,:)>popmax
                pop(i,:)=popmax;
            elseif pop(i,:)<popmin
                pop(i,:)=popmin;
            end
            if fitness(pop(i,:))<fpi(i)
                fpi(i)=fitness(pop(i,:));
                pi(i,:)=pop(i,:);
            end
            if fpi(i)<fpg
                fpg=fpi(i);
                pg=pi(i,:);
            end
        end
        yy(t)=fpg;
    end

    结果如下:

    bd1acb1b8911a375bb5cf80c37a438f6.png

    2.2 求二元函数最大(小)值问题

    例:求函数下面二元函数在指定区间的最大值

    296f8cb078979e02ac4eebab303a3fd4.png

    同样,首先在Matalb中绘制改函数的图像,如下:

    4dff8a21e1a51d94cb73a190c2fc5102.png

    绘制函数图像并显示出粒子的初始分布

    %% 绘制函数图像
    f1=figure('color',[1 1 1]);
    [x,y]=meshgrid(-5:0.1:5,-5:0.1:5);
    z = x.^2+y.^2-10*cos(2*pi*x)-10*cos(2*pi*y)+20;
    mesh(x,y,z);
    %% 设置种群参数
    N=60; %种群规模
    M=100; %最大迭代次数
    D=2; %粒子搜索空间维数
    w=0.729; %惯性权重
    c1=2; %认知学习因子
    c2=2; %社会学习因子
    popmax=5; %粒子最大位置
    popmin=-5; %粒子最小位置
    vmax=1; %粒子最大运动速度
    vmin=-1; %粒子最小运动速度
    %% 初始化种群
    for i=1:N
        for j=1:D
            pop(i,j)=5*rands(1); %初始化粒子位置
            v(i,j)=rands(1); %初始化粒子速度
        end
    end
    pg=pop(1,:); 
    for i=2:N
        if fitness(pop(i,:))>fitness(pg)
            pg=pop(i,:); %pg为全局最优粒子的位置
            fpg=fitness(pg); %fpg为全局最优粒子对应的适应值
        end
    end    

    结果如下:

    a24e2d0e5b0fe6dda4ebd9959618b8af.png

    开始迭代寻优过程,得出结果

    73e373c52349bd5b686447dc1aa33acb.png

    下图为粒子的适应度变化曲线

    aae5731a6c6724477bd203b54aa34f50.png

    3 结束语

    PSO算法是一类不确定算法,不确定性体现了自然界生物的生物机制,并且在求解某些特定问题方面优于确定性算法;同时它也是是一类概率型的全局优化算法其优点在于算法能有更多机会求解全局最优解。它不依赖于优化问题本身的严格数学性质,是一种基于多个智能体的仿生优化算法。该算法物理概念明确,收敛性好。但也存在易陷入局部最优、参数依赖性大等不足。

    展开全文
  • 求量子粒子群算法matlab应用实例

    千次阅读 2020-02-29 14:24:52
    最近在做毕业设计,要用量子粒子群算法实现优化,自己看的一头雾水,哪位好心人有相关的案例可以分享一下吗?拜托了!

    最近在做毕业设计,要用量子粒子群算法实现优化,自己看的一头雾水,哪位好心人有相关的案例可以分享一下吗?拜托了!

    展开全文
  • 多个函数利用多种粒子群算法解决优化问题: 用二阶粒子群优化算法求解无约束优化问题 用二阶振荡粒子群优化算法求解无约束优化问题 用混沌粒子群优化算法求解无约束优化问题 用基于选择的粒子群优化算法求解无...
  • 遗传算法简单实例matlab ...粒子群算法简单实例matlab https://github.com/Zoyeeee/Particle-swarm-optimization-PSO- 蚁群算法简单实例matlab https://github.com/Zoyeeee/ASO-
  • 粒子群算法实例

    2019-03-28 12:52:51
    这是粒子群算法的一个文件,含有相关讲解和代码,代码复制到matlab中就可以用了
  • 粒子群算法实例详解

    2018-09-09 16:30:51
    粒子群算法作为MATLAB智能算法之一,其优点是简单好用
  • 实例简介】动态粒子群算法实例截图】【文件目录】最优化方法matlab├── Fk.m├── Hess.m├── JFk.m├── JacobiH.m├── N1.m├── P131.m├── P166.m├── P176.m├── P177.m├── P18.m├── ...
  • 使用matlab编程,分为多个.m文件编写,包括支配关系选择,全局领导者选择,删除多于的非劣解,创建...套用算法只需要改动Mycost函数与主函数中粒子的取值与维度,即主函数中问题定义处与MOPSO设置处,其余不需要改动
  • 粒子群算法工具箱应用简介 1。引言 粒子群算法(PSO算法) 定义:粒子群算法,又称粒子群优化算法(Partical Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法(Evolutionary Algorithm - EA),由...
  • 遗传算法和粒子群算法程序设计及实例应用
  • 本文主要包含以下内容: 遗传算法和粒子群算法的程序设计的一般结构。主要介绍两类算法的程序设计中的主要思想。 介绍在Matlab编程中一些需要注意的细节。...一个遗传算法实例和一个粒子群算法实例
  • 标准粒子群算法的进化过程如下 matlab源码 %该脚本要命名为func2.m %%%%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%%%%%% function value=func2(x) value=sin(x(1)*x(1)+x(2))+cos(5*x(1))+x(1)+x(2); %...
  • MATLAB粒子群算法工具箱求解的实例分析
  • 文章目录问题描述仿真过程matlab源码 问题描述 仿真过程 matlab源码 %该脚本要命名为func1.m %%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%...%%%%%%%%%%%%%%%%%粒子群算法求函数极值%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%
  • 视频讲解+粒子群优化算法PPT+演讲稿+matlab算法实例
  • 使用粒子群算法求最优解问题相较于传统算法计算速度非常快,全局搜索能力也很强;PSO对于种群大小不十分敏感,所以初始种群设为500-1000,速度影响也不大; 粒子群算法适用于连续函数极值问题,对于非线性、多峰问题...
  • Matlab粒子群算法工具箱使用方法及实例演示》由会员分享,可在线阅读,更多相关《Matlab粒子群算法工具箱使用方法及实例演示(22页珍藏版)》请在人人文库网上搜索。1、粒子群算法工具箱应用简介,1。引言,粒子群算法...
  • 文章目录问题描述仿真过程matlab源码 问题描述 仿真过程 matlab源码 %此脚本要命名为func3.m %%%%%%%%%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%%%%%%%%%%%%% function result=func3(x,Xs,Xx) m=0; D=length...

空空如也

空空如也

1 2 3 4 5 6
收藏数 111
精华内容 44
关键字:

粒子群算法matlab实例

matlab 订阅