第10章 经典智能算法——10.1 粒子群算法的MATLAB实现(2)

简介: 第10章 经典智能算法——10.1 粒子群算法的MATLAB实现(2)

10.1  粒子群算法的MATLAB实现(2)


10.1.3  经典应用


粒子群算法经常与其他算法混合使用。混合策略就是将其他进化算法、传统优化算法或其他技术应用到PSO中,用于提高粒子多样性、增强粒子的全局探索能力,或者提高局部开发能力、增强收敛速度与精度。

常用的粒子群混合方法基于免疫的粒子群算法。该算法是在免疫算法的基础上采用粒子群优化对抗体群体进行更新,可以解决免疫算法收敛速度慢的缺点。


基于免疫的混合粒子群算法步骤如下所示。

确定学习因子c1c2、粒子(抗体)群体个数M

logistic回归分析映射产生M个粒子(抗体)xi及其速度vi,其中i=1,…,N,最后形成初始粒子(抗体)群体P0

产生免疫记忆粒子(抗体):计算当前粒子(抗体)群体P中粒子(抗体)的适应度值并判断算法是否满足结束条件,如果满足则结束并输出结果,否则继续运行。

更新局部和全局最优解,并根据下面的公式更新粒子位置和速度。

72c0eb059b496899ade802388b14ee6d_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

logistic映射产生N个新的粒子(抗体)。

基于浓度的粒子(抗体)选择:用群体中相似抗体百分比计算产生N + M个新粒子(抗体)的概率,依照概率大小选择N个粒子(抗体)形成粒子(抗体)群体P。然后转入第步。

算法流程图如图10-5所示。

9e890486d170a63bfa67d84a0a1c9500_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

10-5  免疫粒子群算法流程图


将实现自适应权重的优化函数命名为PSO_immu.m,在MATLAB中编写实现以上步骤的代码:

function [x, y, Result] = PSO_immu(func, N, c1, c2, w, MaxDT, D, eps, DS, replaceP, minD, Psum)
format long;
%%%%%% 给定初始化条件 %%%%%%
% c1 = 2;                     % 学习因子1
% c2 = 2;                     % 学习因子2
% w = 0.8;                    % 惯性权重
% MaxDT = 100;                % 最大迭代次数
% D = 2;                      % 搜索空间维数(未知数个数)
% N = 100;                    % 初始化群体个体数目
% eps = 10^(-10);             % 设置精度(在已知最小值时用)
% DS = 8;                     % 每隔DS次循环就检查最优个体是否变优
% replaceP = 0. 5;            % 粒子的概率大于replaceP将被免疫替换
% minD = 1e-10;               % 粒子间的最小距离
% Psum = 0;                   % 个体最佳的和
range = 100;
count = 0;
%%%%%% 初始化种群的个体 %%%%%%
for i = 1 : N
    for j = 1 : D
        x(i,j) = -range + 2 * range  * rand;    %随机初始化位置
        v(i,j) = randn;         % 随机初始化速度
    end
end
%%%%%% 先计算各个粒子的适应度,并初始化Pi和 Pg %%%%%%
for i = 1 : N
    p(i) = feval(func,x(i, : ));
    y(i, :) = x(i, :);
end
pg = x(1, :);       % Pg为全局最优
for i = 2 : N
    if feval(func, x(i, :)) < feval(func, pg)
        pg = x(i, :);
    end
end
%%%%%% 主循环,按照公式依次迭代,直到满足精度要求 %%%%%%
for t = 1 : MaxDT
    for i = 1 : N
        v(i, :) = w * v(i, :) + c1 * rand * (y(i, :) - x(i, :) ) + c2 * rand * (pg - x (i, :));
        x(i, :) = x(i, :) + v(i, :);
        if feval(func,x(i, :)) < p(i)
            p(i) = feval(func, x(i, :));
            y(i, :) = x(i, :);
        end
        if p(i) < feval(func, pg)
            pg = y(i, :);
            subplot(1, 2, 1);
            bar(pg, 0.25);
            axis( [0 3 -40 40]);
            title ( [ 'Iteration', num2str(t)]); pause(0.1);
            subplot(1, 2, 2);
            plot(pg(1, 1), pg(1, 2), 'rs', 'MarkerFacecolor', 'r', 'Markersize', 8)
            hold on;
            plot(x(:, 1),x(:, 2), 'k.');
            set(gca, 'Color', 'g')
            hold off;
            grid on;
            axis([-100 100 -100 100]);
            title(['Global Min = ' , num2str(p(i))]);
            xlabel(['Min_x= ', num2str(pg(1, 1)), 'Min_y= ', num2str(pg(1, 2))]);
        end
    end
    Pbest(t) = feval(func, pg);
%         if Foxhole(pg,D)<eps          % 如果结果满足精度要求则跳出循环
%             break;
%         end
%%%%%% 开始进行免疫 %%%%%%
    if t > DS
        if (mod(t, DS) == 0) && ((Pbest(t - DS + 1) - Pbest(t)) < 1e-020)
            % 如果连续DS代数,群体中的最优没有明显变优,则进行免疫
            % 在函数测试的过程中发现,经过一定代数的更新,个体最优不完全相等,但变化极小
            for i = 1 : N       % 先计算出个体最优的和
                Psum = Psum + p(i);
            end
            for i = 1 : N       % 免疫程序
                for j = 1 : N   % 计算每个个体与个体i的距离
                    distance(j) = abs(p(j)-p(i));
                end
                num = 0;
                for j = 1 : N   % 计算与第i个个体距离小于minD的个数
                    if distance(j) < minD
                        num = num + 1;
                    end
                end
                PF(i) = p(N - i + 1) / Psum;    % 计算适应度概率
                PD(i) = num / N;        % 计算个体浓度
                a=rand;         % 随机生成计算替换概率的因子
                PR(i) = a * PF(i) + (1 - a) * PD(i);    % 计算替换概率
            end
            for i = 1 : N
                if PR(i) > replaceP
                    x(i, :) = -range + 2 * range * rand(1, D);
                    count=count+1;
                end
            end
        end
    end
end
%%%%%% 最后给出计算结果 %%%%%%
x = pg(1, 1);
y = pg(1, 2);
Result = feval(func, pg);
%%%%%% 算法结束 %%%%%%
function probabolity(N, i)
PF = p(N - i) / Psum;   % 适应度概率
disp(PF);
for jj = 1 : N
    distance(jj) = abs(P(jj)-P(i));
end
num = 0;
for ii = 1 : N
    if distance(ii) < minD
        num = num + 1;
    end
end
PD = num/N;         % 个体浓度
PR = a * PF + (1 - a) * PD;     % 替换概率


10-2:使用基于模拟退火的混合粒子群算法,求解函数f8aef8cceb618c761ea744771c09a3d8_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg的最小值。其中-10 xi10,粒子数为50,学习因子均为2,退火常数取0.6,迭代步数为1000


首先建立目标函数代码:

function y = immuFunc(x)
    y = (cos(x(1)^2 + x(2)^2) - 1)/((1 + (x(1)^2 - x(2)^2))^2) + 0.5;
end


MATLAB命令行窗口中输入代码:

[xm, fv] = PSO_immu(@immuFunc, 50, 2, 2, 0.8, 100, 5, 0.0000001, 10, 0.6, 0.0000000000000000001, 0)

运行结果如下:

xm =
  -0.735230545314342
fv =
   1.241562924919382

得到目标函数取最小值时的自变量xm变化图,如图10-6所示。

5a20c53a344e65da2adff6ac8898350b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

10-6  目标函数取最小值时的自变量xm变化图


相关文章
|
3天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
110 80
|
20小时前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。
|
8天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
16天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
16天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
19天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
2天前
|
算法
基于EO平衡优化器算法的目标函数最优值求解matlab仿真
本程序基于进化优化(EO)中的平衡优化器算法,在MATLAB2022A上实现九个测试函数的最优值求解及优化收敛曲线仿真。平衡优化器通过模拟生态系统平衡机制,动态调整搜索参数,确保种群多样性与收敛性的平衡,高效搜索全局或近全局最优解。程序核心为平衡优化算法,结合粒子群优化思想,引入动态调整策略,促进快速探索与有效利用解空间。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
232 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码