数学建模:18 粒子群算法

2023-11-20

目录

基础的粒子群算法

流程图

核心公式

改进惯性权重

线性递减的惯性权重

非线性递减的惯性权重

自适应的惯性权重

随机的惯性权重

改进学习因子

压缩学习因子

非对称学习因子

改进:自动退出迭代

测试函数

Matlab 自带的粒子群函数 particleswarm

粒子群算法求解方程组

粒子群算法拟合多元函数

粒子群算法拟合微分方程


基础的粒子群算法

思想:

       搜索全局最优的过程中,由当前点向下一搜索位置前进的影响因素有:自身搜索过的最优解方向、鸟群得到的最优解方向、惯性

流程图

初始化参数:

n = 30;            % 粒子数量,粒子群算法的最大特点就是速度快,因此初始种群取50-1000都是可以的,虽然初始种群越大收敛性会更好,不过太大了也会影响速度;
narvs = 2;         % 变量个数
c1 = 2;            % 每个粒子的个体学习因子,也称为个体加速常数,文献表示取2合适
c2 = 2;            % 每个粒子的社会学习因子,也称为社会加速常数,文献表示取2合适
w = 0.9;           % 惯性权重,一般来说惯性权重取0.9‐1.2是比较合适的,一般取0.9就行
K = 100;           % 迭代的次数
vmax = [6 6];      % 粒子的最大速度:取变量可行域范围的10~20%
x_lb = [-15 -15];  % x的下界
x_ub = [15 15];    % x的上界

初始化粒子位置和速度(随机):

%% 初始化粒子的位置和速度
x = zeros(n,narvs);
for i = 1: narvs
    x(:,i) = x_lb(i) + (x_ub(i)-x_lb(i))*rand(n,1);    % 随机初始化粒子所在的位置在定义域内
end
v = -vmax + 2*vmax .* rand(n,narvs);  % 随机初始化粒子的速度(这里我们设置为[-vmax,vmax])

初始化该粒子的最优适应度对应的位置 pbest 为当前位置,全局最优位置 gbest 为 pbest 中最小的那个(因为求解的是最小值问题):

%% 计算适应度(注意,因为是最小化问题,所以适应度越小越好)
fit = zeros(n,1);  % 初始化这n个粒子的适应度全为0
for i = 1:n  % 循环整个粒子群,计算每一个粒子的适应度
    fit(i) = Obj_fun2(x(i,:));   % 调用Obj_fun2函数来计算适应度
end 
pbest = x;   % 初始化这n个粒子迄今为止找到的最佳位置(是一个n*narvs的向量)
ind = find(fit == min(fit), 1);  % 找到适应度最小的那个粒子的下标
gbest = x(ind,:);  % 定义所有粒子迄今为止找到的最佳位置(是一个1*narvs的向量)

核心公式

  • 最初提出的论文(没有惯性权重)中 c1、c2 取 2 比较合适最初提出的论文:Kennedy J , Eberhart R . Particle swarm optimization[C]// Proceedings of ICNN'95 ‐International Conference on Neural Networks. IEEE, 1995.
  • 惯性权重 0.9~1.2 合适,一般 0.9引入惯性权重的论文:SHI,Y. A Modified Particle Swarm Optimizer[C]// Proc. of IEEE ICEC conference, Anchorage. 1998.)

改进惯性权重

惯性权重大:利于全局搜索,不会陷入局部值

惯性权重小:倾向于局部最优值

算法前期应进行全局搜索,后期应局部搜索,所以 w 最好递减

线性递减的惯性权重

非线性递减的惯性权重

自适应的惯性权重

惯性权重和迭代次数、每个粒子的适应度有关

适应度大于平均适应度:惯性权重要大 ,因为这个解对应的适应度大,需要全局搜索

适应度小于平均适应度:惯性权重要小,因为这个解对应的适应度小,接近最优解(求最小值),需要局部搜索

随机的惯性权重

前面的惯性权重的缺点:迭代前期局部搜索能力不足、后期全局搜索能力不足

另一种随机:

改进学习因子

个体学习因子:在自身局部范围内搜索

社会学习因子:倾向于收敛到局部最优值

需要平衡,不能过早收敛也不能一直在自己范围里搜索

算法前期应 c1 大:局部搜索;后期 c2 大:倾向于收敛

压缩学习因子

非对称学习因子

算法前期应 c1 大:局部搜索;后期 c2 大:倾向于收敛

改进:自动退出迭代

当后期最优值基本不变,没必要一直迭代

设置一个计数器、函数变化量容忍度(变化误差范围)

测试函数

Matlab 自带的粒子群函数 particleswarm

Matlab  中  particleswarm  函数采用的是自适应邻域模式

自适应:

  • 邻域内粒子数越多,越偏向于全局搜索 —— 邻域模式,全局搜索(适应度又开始下降,应进入邻域模式,来进行全局搜索,以免陷入局部最优)
  • 邻域内粒子越少 —— 全局模式,局部搜索精准打击(当适应度停滞,应进行局部搜索,所以从邻域向全局模式转换,惯性系数 w 也应减小)

该函数如何自适应调整参数:

该函数怎么设置自动退出迭代:下面 6 中方法,前两种用的多

%% 求解函数y = x1^2+x2^2-x1*x2-10*x1-4*x2+60在[-15,15]内的最小值(最小值为8)
narvs = 2; % 变量个数
x_lb = [-15 -15]; % x的下界(长度等于变量的个数,每个变量对应一个下界约束)
x_ub = [15 15]; % x的上界
[x,fval,exitflag,output] = particleswarm(@Obj_fun2, narvs, x_lb, x_ub) 

%% 绘制最佳的函数值随迭代次数的变化图
options = optimoptions('particleswarm','PlotFcn','pswplotbestf')   
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 展示函数的迭代过程
options = optimoptions('particleswarm','Display','iter');
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 修改粒子数量,默认的是:min(100,10*nvars)
options = optimoptions('particleswarm','SwarmSize',50);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 在粒子群算法结束后继续调用其他函数进行混合求解(hybrid  n.混合物合成物; adj.混合的; 杂种的;) 
options = optimoptions('particleswarm','HybridFcn',@fmincon);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 惯性权重的变化范围,默认的是0.1-1.1
options = optimoptions('particleswarm','InertiaRange',[0.2 1.2]);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 个体学习因子,默认的是1.49(压缩因子)
options = optimoptions('particleswarm','SelfAdjustmentWeight',2);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 社会学习因子,默认的是1.49(压缩因子)
options = optimoptions('particleswarm','SocialAdjustmentWeight',2);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 最大的迭代次数,默认的是200*nvars
options = optimoptions('particleswarm','MaxIterations',10000);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 领域内粒子的比例 MinNeighborsFraction,默认是0.25 
options = optimoptions('particleswarm','MinNeighborsFraction',0.2);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 函数容忍度FunctionTolerance, 默认1e-6, 用于控制自动退出迭代的参数
options = optimoptions('particleswarm','FunctionTolerance',1e-8);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 最大停滞迭代数MaxStallIterations, 默认20, 用于控制自动退出迭代的参数
options = optimoptions('particleswarm','MaxStallIterations',50);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)

%% 不考虑计算时间,同时修改三个控制迭代退出的参数
tic
options = optimoptions('particleswarm','FunctionTolerance',1e-12,'MaxStallIterations',100,'MaxIterations',100000);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)
toc

%% 在粒子群结束后调用其他函数进行混合求解
tic
options = optimoptions('particleswarm','FunctionTolerance',1e-12,'MaxStallIterations',50,'MaxIterations',20000,'HybridFcn',@fmincon);
[x,fval] = particleswarm(@Obj_fun3,narvs,x_lb,x_ub,options)
toc

粒子群算法求解方程组

vpasolve:依赖初始值

fsolve:依赖初始值

particleswarm:

粒子群算法拟合多元函数

拟合工具箱只能对一维、二维函数进行拟合

       最小二乘法拟合的思想是让预测值与真实值的残差平方和最小,这里就可以把拟合问题转化成求使得残差平方和最小的参数,可用 fmincon (求解有条件约束求最小值)、fminuco / fminsearch(无约束最小值函数)、lsqcurvefit(非线性最小二乘拟合函数)等函数、粒子群算法

       使用粒子群算法不需要给出初始值,比较好,同时使用完粒子群算法后,可将结果作为其他函数如 fmincon 的初始值,混合使用

粒子群算法拟合微分方程

这里拟合的是只有数值解的微分方程

例题:使用网格搜索(即枚举法)、粒子群算法来寻找 SIR 模型中使得拟合效果最优的参数;上面两个方法求出来的参数固定,如何让参数是变化的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学建模:18 粒子群算法 的相关文章

随机推荐

  • 在r中rowsums_R语言初级教程(15): 矩阵(下篇)

    这是最后一篇讲解有关矩阵操作的博客 介绍有关矩阵的函数 主要有rowSums colSums rowMeans colMeans apply rbind cbind row col rowsum aggregate sweep max co
  • openssl 加密(encrypt)、解密(decrypt)、签名(sign)、验证(verify)

    一 使用openssl rsautl 进行加密 解密 签名 验证 kyzjj yyzc zjjcs04 openssl openssl rsautl help Usage rsautl options in file input file
  • 流程控制-顺序结构、分支结构、循环结构(个人复习)

    文章目录 流程控制 一 流程控制概念 1 什么是流程控制 2 分类 1 顺序结构 2 分支结构 3 循环结构 二 分支结构 1 if语句 2 switch 三 循环结构 1 概述 2 分类 3 for循环 4 多重循环 5 while循环
  • IOS9.0 调用QQ登录页面不显示

    使用最新的xcode7 1 和IOS9 0版本 调用最新的qqSDK 登录时 会出现一个问题 操作登录选项 页面加载不出来 提示如下 窗口提示最下方显示如下 login failed usercancell 0 最新的QQ文档并没有说明这个
  • Entity Framework Core系列教程-3为现有数据库生成实体模型

    在Entity Framework Core中为现有数据库创建模型 在这里 您将学习如何在Entity Framework Core中为现有数据库创建上下文和实体类 为现有数据库创建实体和上下文类称为Database First方法 EF
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • Android kotlin使用注解实现防按钮连点功能

    SingleClick Retention AnnotationRetention RUNTIME Target AnnotationTarget FUNCTION annotation class SingleClick 点击间隔时间 毫
  • 计算机网络那些事之 MTU 篇

    哈喽大家好 我是咸鱼 今天我们来聊聊计算机网络中的 MTU Maximum Transmission Unit 什么是 MTU MTU Maximum Transmission Unit 是指数据链路层中的最大传输单元 通俗点来讲 MTU
  • 建模方法(十)-灰色预测模型GM(1,1)

    引言 灰色预测的主要特点是模型使用的不是原始数据序列 而是生成的数据序列 其核心体系是灰色模型 Grey Model 简称GM 即对原始数据作累加生成 或其它方法生成 得到近似的指数规律再进行建模的方法 灰色预测模型对于不同问题采用不同模型
  • git常见问题总结

    文章目录 1 xxx com port 22 Connection refused 2 xcrun error invalid active developer path 3 终端使用git发现不能用这么办 4 lt lt lt lt lt
  • Python手册(Python Basics)--Python基础

    本站已停止更新 查看最新内容请移至本人博客 Wilen s Blog 文章目录 对象 标量 运算符 数据类型 tuple 元祖 list 列表 dict 字典 set 集合 列表 集合和字典推导式 iterator 迭代器 and gene
  • 设置mysql远程登录

    要将MySQL的root用户授权远程登录 请按照以下步骤操作 使用root用户登录到MySQL mysql u root p 在MySQL命令行中 输入以下命令以创建root用户可以从任何IP地址访问的用户 GRANT ALL PRIVIL
  • java: 二元运算符 ‘<‘ 的操作数类型错误 第一个类型: java.lang.Object 第二个类型: java.lang.Object

    在对对象进行大小比较时 运行就会出现下面报错 原因不能使用 gt 运算符对两个Object对象进行比较 gt 运算符只能直接用于原始整数类型 解决方法 1 将Object进行转换 转换成比如转换成Character类 String类 Int
  • 二分答案总结&例题解析

    对于二分我们最初的了解 就是在一个一次函数中 对于要求的点 x y 已知y 对于包含x值的区间二分 根据函数值与y比较 逐步靠近要求的点 直到最终求出要求的点 在程序执行时 二分的时间复杂度为logn 可以极大的减少查找的时间 二分的应用
  • Fiddler的安装和使用教程(详细)

    一 安装 1 fiddler工具下载网址 http www telerik com download fiddler 2 运行 FiddlerSetup exe一键完成安装 3 安装成功后点击关闭按钮 所选路径下多出一个Fiddler文件夹
  • 朋友问我,程序员和非程序员的思维模式有什么区别?

    英文 https javascript plainenglish io what is the difference in thinking model between programmers and normal persons 8ff8
  • dokcer命令一览

    Docker服务状态 安装参考 https yutian blog csdn net article details 119705377 1 为什么要使用Docker Docker是开发运维一体化的核心工具 提高开发 测试 运维的生命周期的
  • Linux下安装tomcat

    1 上传tomcat到root目录 通过ftp软件将tomcat上传到root目录下 在 usr local 创建一个tomcat目录 复制tomcat到 tomcat目录下 解压 tar 运行命令 tar xvf apachexxx 2
  • 如何在Oracle VM VirtualBox上安装ubuntu

    虚拟机链接 Virtual Box Downloads Oracle VM VirtualBox Ubuntu Ubuntu系统下载 Ubuntu 点开链接后进入首页如图 点击桌面系统进入 点击下载 下载完成后不用解压 打开Oracle V
  • 数学建模:18 粒子群算法

    目录 基础的粒子群算法 流程图 核心公式 改进惯性权重 线性递减的惯性权重 非线性递减的惯性权重 自适应的惯性权重 随机的惯性权重 改进学习因子 压缩学习因子 非对称学习因子 改进 自动退出迭代 测试函数 Matlab 自带的粒子群函数 p