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

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

第10章  经典智能算法


知识要点


人工智能学科诞生于20世纪50年代中期,当时由于计算机的产生与发展,人们开始了真正意义上的人工智能的研究,其在自动推理、认知建模、机器学习、神经元网络、自然语言处理、专家系统、智能机器人等方面的理论和应用上都取得了成果。

本章主要介绍粒子群算法、遗传算法、蚁群算法3种经典智能算法及其MATLAB实现方法。


学习要求


280c3f7f195a0c6e8c99d57ec86d6ddd_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


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


粒子群算法(Particle Swarm OptimizationPSO)属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解。它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,没有遗传算法的交叉Crossover)和变异Mutation)操作,它通过追随当前搜索到的最优值来寻找全局最优。


10.1.1  基本原理


PSO可以用于解决优化问题。在PSO中,每个优化问题的潜在解都是搜索空间中的一只鸟,称为粒子。所有的粒子都有一个由被优化的函数决定的适值(Fitness Value),每个粒子还有一个速度决定它们飞行的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

粒子位置的更新方式如图10-1所示。

61951b2c9c44234bacaad1407cc463cf_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

10-1  粒子位置的更新方式


其中,x表示粒子起始位置,v表示粒子飞行的速度,p表示搜索到的粒子的最优位置。

PSO初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己:一个是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。

另外,也可以不用整个种群而只用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

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

bed780fd46d3eb6e037b4877d461db97_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

i个粒子的飞行速度也是一个D维的向量,记为

20edf03130c1bcddab0ce6e4d644cb6f_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

i个粒子迄今为止搜索到的最优位置称为个体极值,记为

bcadecceefc1f608add7ce29685d73fb_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

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

483fb556c3ecdbb871e3ffd8cc9577fa_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

在找到这两个最优值时,粒子根据如下公式来更新自己的速度和位置:

88bf78590ba79cdf6843d879f301571d_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

其中,c1c2为学习因子,也称加速常数(Acceleration Constant);r1r2[0,1]范围内的均匀随机数。


8cc35171309b88504ef413fee07cb4c1_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg右边由三部分组成:

第一部分为惯性Inertia)或动量Momentum)部分,反映了粒子的运动习惯(Habit,代表粒子有维持自己先前速度的趋势。

第二部分为认知Cognition)部分,反映了粒子对自身历史经验的记忆或回忆,代表粒子有向自身历史最佳位置逼近的趋势。

第三部分为社会Social)部分,反映了粒子间协同合作与知识共享的群体历史经验,代表粒子有向群体或邻域历史最佳位置逼近的趋势。


由于粒子群算法具有高效的搜索能力,因此有利于得到多目标意义下的最优解;通过代表整个解集种群,按并行方式同时搜索多个非劣解,即搜索到多个Pareto最优解。

同时,粒子群算法的通用性比较好,适合处理多种类型的目标函数和约束,并且容易与传统的优化方法结合,从而改进自身的局限性,更高效地解决问题。因此,将粒子群算法应用于解决多目标优化问题上具有很大的优势。



10.1.2  程序设计


基本粒子群算法的流程图如图10-2所示。其具体过程如下:


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

10-2  基本粒子群算法流程图

初始化粒子群,包括群体规模N、每个粒子的位置xi和速度vi

计算每个粒子的适应度值Fit[i]

对每个粒子,用它的适应度值Fit[i]和个体极值pbest(i)比较,如果Fit[i] > pbest(i),则用Fit[i]替换pbest(i)

对每个粒子,用它的适应度值Fit[i]和个体极值gbest(i)比较,如果Fit[i] > pbest(i),则用Fit[i]替换gbest(i)

更新粒子的速度vi和位置xi

如果满足结束条件(误差足够好或达到最大循环次数)则退出,否则返回


MATLAB中编程实现的基本粒子群算法基本函数为PSO,其调用格式如下:

[xm, fv] = PSO(fitness, N, c1, c2, w, M, D)

其中,fitness为待优化的目标函数,也称适应度函数。N是粒子数目,c1是学习因子1c2是学习因子2w是惯性权重,M是最大迭代次数,D是自变量的个数,xm是目标函数取最小值时的自变量,fv是目标函数的最小值。

使用MATLAB实现基本粒子群算法代码如下:

function [xm, fv] = PSO(fitness, N, c1, c2, w, M, D)
%%%%% 给定初始化条件 %%%%%%
% c1学习因子1
% c2学习因子2
% w惯性权重
% M最大迭代次数
% D搜索空间维数
% N初始化群体个数数目
%%%%%% 初始化种群的个体(可以在这里限定位置和速度的范围) %%%%%%
format long;
for i = 1 : N
    for j = 1 : D
        x(i, j) = randn;        % 随机初始化位置
        v(i, j) = randn;        % 随机初始化速度
    end
end
%%%%%% 先计算各个粒子的适应度,并初始化Pi和Pg %%%%%%
for i = 1 : N
    p(i) = fitness(x(i, :));
    y(i, :) = x(i, :);
end
pg = x(N, :);       %Pg为全局最优
for i = 1 : (N - 1)
    if fitness(x(i, :)) < fitness(pg)
        pg = x(i, :);
    end
end
%%%%%% 进入主要循环,按照公式依次迭代,直到满足精度要求 %%%%%%
for t = 1 : M
    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 fitness(x(i, :)) < p(i)
            p(i) = fitness(x(i, :));
            y(i, :) = x(i, :);
        end
        if p(i) < fitness(pg)
            pg = y(i, :);
        end
    end
    Pbest(t) = fitness(pg);
end
%%%%%% 最终给出计算结果 %%%%%%
disp('*************************************************')
disp('目标函数取最小值时的自变量:')
xm = pg'
disp('目标函数的最小值为:')
fv = fitness(pg)
disp('*************************************************')


将上面的函数保存到MATLAB可搜索路径中,即可调用该函数。再定义不同的目标函数fitness和其他输入量,就可以用粒子群算法求解不同问题。

粒子群算法使用的函数有很多个,下面介绍两个常用的适应度函数。


1Griewank函数


Griewank函数的MATLAB代码如下:

function y = Griewank(x)        % Griewank函数
% 输入x,给定相应的y值,在x = (0, 0, ……, 0)处有全局极小点0
[row, col] = size(x);
if row > 1
    error('输入的参数错误');
end
y1 = 1 / 4000 * sum(x .^ 2);
y2 = 1;
for h = 1 : col
    y2 = y2 * cos(x(h) / sqrt(h));
end
y = y1 - y2 + 1;
y = - y;

绘制以上函数图像的MATLAB代码如下:

function DrawGriewank()     % 绘制Griewank函数图像
x = [-8 : 0.1 : 8];
y = x;
[X, Y] = meshgrid(x, y);
[row, col] = size(X);
for l = 1 : col
    for h = l : row
        z(h, l) = Griewank([X(h, l), Y(h, l)]);
    end
end
surf(X, Y, z);
shading interp

将以上代码保存为DrawGriewank.m文件,并运行上述代码,得到Griewank函数图像,如图10-3所示。

84516ffd73afc8fc1a277ed3867e9607_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

10-3  Griewank函数图像


2Rastrigin函数


Rastrigin函数的MATLAB代码如下:

function y = Rastrigin(x)       % Rastrigin函数
% 输入x,给定相应的y值,在x = (0, 0, ……, 0)处有全局极小点0
[row, col] = size(x);
if row > 1
    error('输入的参数错误');
end
y = sum(x .^ 2 - 10 * cos(2 * pi * x) + 10);
y = - y;

绘制以上函数图像的MATLAB代码如下:

function DrawRastrigin()
x = [-4 : 0.05 : 4];
y = x;
[X, Y] = meshgrid(x, y);
[row, col] = size(X);
for l = 1 : col
    for h = 1 : row
        z(h, l) = Rastrigin([X(h, l), Y(h, l)]);
    end
end
surf(X, Y, z);
shading interp

将以上代码保存为DrawRastrigin.m文件,并运行上述代码,得到Rastrigin函数图像,如图10-4所示。

221903f3839eb75be2a24bcd2ad8a6bc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

10-4  Rastrigin函数图像


10-1:利用上文介绍的基本粒子群算法求解下列函数的最小值。

7e38ba72169328077e45f591d4fd7f9e_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

利用基本粒子群算法求解最小值,首先需要确认不同迭代步数对结果的影响。设定题中函数的最小点均为0,粒子群规模为50,惯性权重为0.5,学习因子c11.5,学习因子c22.5,迭代步数分别取100100010000

MATLAB中建立目标函数代码,并保存为fitness.m文件:

function F = fitness(x)
F = 0;
for i = 1 : 30
    F = F + x(i)^2 + x(i) - 6
end

MATLAB命令行窗口中依次输入:

x = zeros(1, 30);
[xm1, fv1] = PSO(@fitness, 50, 1.5, 2.5, 0.5, 100, 30);
[xm2, fv2] = PSO(@fitness, 50, 1.5, 2.5, 0.5, 1000, 30);
[xm3, fv3] = PSO(@fitness, 50, 1.5, 2.5, 0.5, 10000, 30);

运行以上代码,比较目标函数取最小值时的自变量,如表10-1所示。

10-1  比较不同迭代步数下的目标函数值和最小值

5605ee9dd760ebfb9689fd4fdac40d29_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

从表10-1中可以看出,迭代步数不一定与获得解的精度成正比,即迭代步数越大,获得解的精度不一定越高。这是因为粒子群算法是一种随机算法,同样的参数也会算出不同的结果。

在上述参数的基础上,保持惯性权重为0.5、学习因子c11.5、学习因子c22.5、迭代步数为100不变,粒子群规模分别取10100500,运行以下MATLAB代码:

x = zeros(1, 30);
[xm1, fv1] = PSO(@fitness, 10, 1.5, 2.5, 0.5, 100, 30);
[xm2, fv2] = PSO(@fitness, 100, 1.5, 2.5, 0.5, 100, 30);
[xm3, fv3] = PSO(@fitness, 500, 1.5, 2.5, 0.5, 100, 30);

比较目标函数取最小值时的自变量,如表10-2所示。

10-2  比较不同粒子群规模下的目标函数值和最小值

fdafb1c00d70466a0cee9dd1b73d6b0d_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg

从表10-2中可以看出,粒子群规模越大,获得解的精度不一定越高。

综合以上不同迭代步数和不同粒子群规模运算得到的结果可知,在粒子群算法中,要想获得精度高的解,关键是各个参数之间的匹配。


相关文章
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
2天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
1月前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。

热门文章

最新文章