数学建模:18 粒子群算法

这篇具有很好参考价值的文章主要介绍了数学建模:18 粒子群算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

基础的粒子群算法

流程图

核心公式

改进惯性权重

线性递减的惯性权重

非线性递减的惯性权重

自适应的惯性权重

随机的惯性权重

改进学习因子

压缩学习因子

非对称学习因子

改进:自动退出迭代

测试函数

Matlab 自带的粒子群函数 particleswarm

粒子群算法求解方程组

粒子群算法拟合多元函数

粒子群算法拟合微分方程


基础的粒子群算法

思想:

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

流程图

数学建模:18 粒子群算法

初始化参数:

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的向量)

核心公式

数学建模:18 粒子群算法

数学建模:18 粒子群算法

  • 最初提出的论文(没有惯性权重)中 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 最好递减

线性递减的惯性权重

数学建模:18 粒子群算法

非线性递减的惯性权重

数学建模:18 粒子群算法

自适应的惯性权重

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

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

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

数学建模:18 粒子群算法

数学建模:18 粒子群算法

随机的惯性权重

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

数学建模:18 粒子群算法

另一种随机:

数学建模:18 粒子群算法

改进学习因子

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

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

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

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

压缩学习因子

数学建模:18 粒子群算法

数学建模:18 粒子群算法

非对称学习因子

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

数学建模:18 粒子群算法

数学建模:18 粒子群算法

改进:自动退出迭代

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

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

数学建模:18 粒子群算法

测试函数

数学建模:18 粒子群算法

Matlab 自带的粒子群函数 particleswarm

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

数学建模:18 粒子群算法

数学建模:18 粒子群算法

自适应:

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

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

数学建模:18 粒子群算法

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

数学建模:18 粒子群算法

%% 求解函数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

粒子群算法求解方程组

数学建模:18 粒子群算法

vpasolve:依赖初始值

数学建模:18 粒子群算法

fsolve:依赖初始值

数学建模:18 粒子群算法

particleswarm:

数学建模:18 粒子群算法

粒子群算法拟合多元函数

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

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

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

数学建模:18 粒子群算法

数学建模:18 粒子群算法

粒子群算法拟合微分方程

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

例题:使用网格搜索(即枚举法)、粒子群算法来寻找 SIR 模型中使得拟合效果最优的参数;上面两个方法求出来的参数固定,如何让参数是变化的文章来源地址https://www.toymoban.com/news/detail-462748.html

到了这里,关于数学建模:18 粒子群算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模学习(2):数学建模各类常用的算法全解析

    常见的评价算法  1.层次分析法 基本思想         是定性与定量相结合的多准则决策、评价方法。将决策的有关元素分解成 目标层、准则层和方案层 ,并通过人们的 判断对决策方案的 优劣进行排序 ,在此基础上进行定性和定量分析。它把人的思维过程层次化、数量化,

    2024年02月09日
    浏览(53)
  • 数学建模-退火算法和遗传算法

    退火算法和遗传算法 一.退火算法 退火算法Matlab程序如下: [W]=load(\\\'D:100个目标经度纬度.txt\\\'); 二、遗传算法 [E]=xlsread(\\\'D:100个目标经度纬度\\\');  % 加载敌方 100 个目标的数据, 数据按照表格中的位置保存在纯文本文件 sj.txt 中 x=[E(:,1)]; y=[E(:,2)]; e =[x y]; d1=[70,40]; e =[d1;  e ;d1];

    2024年02月20日
    浏览(56)
  • 清风数学建模——拟合算法

    概念 在前面的篇幅中提到可以使用插值算法,通过给定的样本点推算出一定的曲线从而推算出一些想要的值。但存在一些问题。一是若样本点过多,那么多项式的次数过高会造成龙格现象;二是为了避免龙格现象而通过分段的思想求得拟合曲线,但这样会导致曲线函数非常复

    2024年02月12日
    浏览(40)
  • 数学建模 插值算法

    有问题 牛顿差值也有问题 它们都有龙格现象,一般用分段插值。 插值预测要比灰色关联预测更加准确,灰色预测只有2次 拟合样本点要非常多,样本点少差值合适

    2024年02月16日
    浏览(37)
  • 数学建模:拟合算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 根据1到12点间的温度数据求出温度与时间之间的近似函数关系 F ( t ) F(t) F ( t ) ,由 F ( t ) F(t) F ( t ) 推断 t =13.5 时的温度。这种根据离散数据求数据间近似函数关系的问题称为 曲线拟合问题 。 拟合问题与插值问题的区别在于

    2024年02月10日
    浏览(35)
  • 数学建模之插值算法

    注:本文面向应用,参考了清风大大的资料以及司守奎老师的《数学建模算法与应用》,属作者的个人学习总结。 当已知函数点非常少的时候,我们经常要 模拟产生一些新的函数值 来支撑后续数据分析。这就是插值算法的应用目的。*插值算法还可以用来实现短期预测,但我

    2024年01月24日
    浏览(45)
  • 数学建模——插值算法

    概念:数模比赛中,常常需要根据有已知的函数点进行数、模型处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生“一些新的但又比较靠谱的值来满足需求,这就是插值的作用。 一维插值问题: 通过已有的点

    2024年02月16日
    浏览(38)
  • 【数学建模】——拟合算法

    拟合算法定义:与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。 插值和拟合的区别: 例子: 此例子中如果用插值算法,因

    2024年02月16日
    浏览(36)
  • 遗传算法模型--数学建模

    遗传算法是一种模仿自然选择和遗传机制的优化算法,主要用于求解最优化问题。它模拟了生物进化过程中的遗传、交叉和变异过程,通过不断地进化优秀的个体,逐渐搜索到全局最优解。 在开始之前,我们先来了解下遗传算法中的几个概念。 在遗传算法中,我们首先需要

    2024年02月16日
    浏览(40)
  • 数学建模部分算法

    Q1:模拟退火是什么算法? 模拟退火是模拟物理上退火方法,通过N次迭代(退火),逼近函数的上的一个 最值 (最大或者最小值)。 比如逼近这个函数的最大值C点: Q2:模拟退火为什么可行? 讨论这个问题需要理解一下物理原型是怎么样的,也就是原来是怎么“退火”的:

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包