基于粒子群算法的无约束优化问题求解

news2024/11/16 23:56:40

基于粒子群算法的无约束优化问题求解

  • 1 引言
  • 2 粒子群算法
    • 2.1 粒子群优化原理
    • 2.2 粒子群算法寻优策略与参数控制
    • 粒子群算法流程
  • 3 粒子群算法求解无约束优化问题
    • 3.1 粒子群算法求解Sphere函数(单峰测试函数)
    • 3.2 Schwefel's Problem 2.26(多峰测试函数)
    • 3.3 Rastrigin's Function(多峰测试函数)
    • 3.4 Griewank's Function(多峰测试函数)
  • 4 参考

1 引言

粒子群算法(Particle Swarm Optimization,PSO)是由美国心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出的一种算法,算是比较老也是非常经典的算法之一。

PSO是非常适合于连续领域问题优化的算法,且已经在此取得相当成功的应用。 离散版本改进将PSO运用到离散领域(组合优化)之中12,如TSP、CVRP问题。

在连续优化问题中,无约束优化问题除了可以用梯度下降算法,牛顿法,共轭梯度等算法,智能优化算法因其寻优速度快,全局收敛等特点,也得到了广泛应用。

2 粒子群算法

2.1 粒子群优化原理

将问题搜索空间类比于鸟类的飞行空间,每一只鸟抽象为一个无质量的粒子(Particle),用于表征一个候选解,食物表征为最优解。优化寻求最优解的过程等同于鸟群觅食的过程,鸟群快速找到食物的一个有效方法就是搜寻目前离食物最近的同伴的位置。因此每个粒子都有速度和位置两个属性,粒子通过权衡自身经验(本身找到的最优解pbest)和群体经验(整个整群的最优解gbest)来迭代更新自己,找到最优解。

鸟类寻优过程中,沿自身飞行方向寻找食物的同时,会根据自身经验和鸟群间信息共享,调整自己的位置和速度,以期找到最优解。

2.2 粒子群算法寻优策略与参数控制

粒子按速度更新公式(1)和位置更新公式(2)寻找最优解:
v i j ← ω v i j + c 1 r 1 ( p b e s t i j − x i j ) + c 2 r 2 ( g b e s t j − x i j ) x i j ← x i j + v i j \begin{align} v_{i}^j &\leftarrow \omega v_{i}^j+c_1r_1(pbest_{i}^j-x_{i}^j)+c_2r_2(gbest^j-x_{i}^j) \\ x_{i}^j &\leftarrow x_{i}^j+v_{i}^j \end{align} vijxijωvij+c1r1(pbestijxij)+c2r2(gbestjxij)xij+vij
其中,

  • D D D——代表搜索空间为D维(即为自变量的个数)。 j j j粒子维度索引, j = 1 , 2 , . . . , D j=1,2,...,D j=1,2,...,D
  • x i x_{i} xi——代表第 i i i个粒子的位置(即为一个解), x i = ( x i 1 , x i 2 , . . . , x i j , . . . , x i D ) x_{i}=(x_{i}^1,x_{i}^2,...,x_{i}^j,...,x_{i}^D) xi=(xi1,xi2,...,xij,...,xiD)
  • v i v_{i} vi——代表第 i i i个粒子的速度, v i = ( v i 1 , v i 2 , . . . , v i j , . . . , v i D ) v_{i}=(v_{i}^1,v_{i}^2,...,v_{i}^j,...,v_{i}^D) vi=(vi1,vi2,...,vij,...,viD)
  • p b e s t i pbest_{i} pbesti——代表粒子 i i i在搜索到的最优位置, v i = ( p b e s t i 1 , p b e s t i 2 , . . . , p b e s t i j , . . . , p b e s t i D ) v_{i}=(pbest_{i}^1,pbest_{i}^2,...,pbest_{i}^j,...,pbest_{i}^D) vi=(pbesti1,pbesti2,...,pbestij,...,pbestiD)
  • g b e s t j gbest^{j} gbestj——整个鸟群搜索到的最优位置。 g b e s t j gbest^{j} gbestj p b e s t i j pbest_{i}^j pbestij关系为: g b e s t j = min ⁡ { p b e s t i j } j = 1 D gbest^{j}= \min \{pbest_{i}^j\}_{j=1}^D gbestj=min{pbestij}j=1D
  • ω \omega ω——惯性权重(inertia weight),动态调整惯性权重可以平衡收敛的全局性和收敛速度。 ω \omega ω越大,探索新区域的能力越强,有利于全局搜索,跳出局部最优; ω \omega ω越小,逐渐退化成爬山算法,有利于算法收敛。推荐取值范围 ω ∈ [ 0.4 , 2 ] \omega \in [0.4,2] ω[0.4,2],另有实验表明 ω = 0.7298 \omega=0.7298 ω=0.7298时,算法有较好的收敛性能。
  • c 1 c_1 c1——加速系数,表征粒子个体的经验,该值越大,证明鸟群在寻找食物过程中,越倾向于根据自己的经验知识寻找食物;该值越小,表示不注重自己的经验,鸟在寻找食物过程中“随大流、从众”。
  • c 2 c_2 c2——加速系数,表征整个鸟群的经验知识,该值越大,越注重鸟之间的信息共享;该值越小,鸟之间没有信息交流,算法演变为随机探索,导致算法收敛速度缓慢。
    实验表明, c 1 = c 2 = 1.479 c_1=c_2=1.479 c1=c2=1.479时算法有较好的收敛性能。
  • maxVelocity——最大速度。该参数在上述公式没有体现,为了平衡算法的探索能力与开发能力,需要设定一个合理的速度范围,限制粒子的最大速度,即粒子下一步迭代可以移动的最大距离。maxVelocity越大,粒子飞行速度快,探索能力强,但粒子容易飞过最优解;maxVelocity越小,飞行速度慢,开发能力强,但是收敛速度慢,且容易陷入局部最优解;一般为对应变量取值范围的10~20%,可根据实际情况调试,但不能大于粒子(解)的变化范围3

粒子群算法流程

在这里插入图片描述

  1. 初始化:算法最大迭代次数MAXGEN;每个粒子的位置x和速度v;位置限制边界xMinxxMax,即自变量取值范围;最大速度限制,根据经验设置最大速度maxVelocity,一般为对应变量取值范围的10~20%3
  2. 评估每个粒子(计算目标函数值和适应度)。
  3. 更新粒子的速度v和位置x
  4. 判断是否越界。速度越界和位置越界都需要判断。看了网上很多博客及程序,有的程序没有进行越界判断,有的只有速度越界判断45,有的则进行了速度越界和位置越界判断67。自己进行编程发现:对于单峰测试函数,没有越界判断依然能够得出最优解。
  5. 评估每个粒子(计算目标函数值和适应度)。
  6. 更新粒子的历史最优位置pbest
  7. 更新全局最优位置gbest

3 粒子群算法求解无约束优化问题

为了验证粒子群算法的求解性能,分别采用了单峰测试函数和多峰测试函数进行试验。便编程时,只需定义一个抽象的问题类Problem,使不同的测试函数继承
Problem,每次进行PSO求解时,只需传入不同的测试函数即可,降低了代码的耦合性。基于粒子群算法的无约束优化问题求解(Java)

3.1 粒子群算法求解Sphere函数(单峰测试函数)

Sphere函数8除了全局极小值外,还有d(维度)个局部极小值。呈连续、下凹、单峰,该问题的维度是 n=30,函数解为 f ( x 1 , x 2 , . . . , x 30 ) = f ( 0 , 0 , . . . , 0 ) = 0 f(x_1,x_2,...,x_{30})=f(0,0,...,0)=0 f(x1,x2,...,x30)=f(0,0,...,0)=0
min ⁡ f ( x ) = ∑ i = 1 30 x i 2 , − 100 ≤ x i ≤ 100 \min f(x) = \sum_{i=1}^{30} x_i^2,\quad -100 \leq x_i \leq 100 minf(x)=i=130xi2,100xi100

求解结果:

全局最优解:0.00	0.00	-0.00	0.00	-0.00	0.00	-0.00	-0.00	0.00	-0.00	-0.00	-0.00	-0.00	0.00	0.00	-0.00	-0.00	0.00	-0.00	0.00	-0.00	0.00	-0.00	0.00	0.00	0.00	0.00	0.00	-0.00	-0.00	
全局极小值:0.00

目标函数收敛图:

3.2 Schwefel’s Problem 2.26(多峰测试函数)

Schwefel’s函数是一个典型的欺骗问题,有1个全局极小值点,距离另一个局部最优点很远,因此如果陷入局部最优就很难跳出。Schwefel’s函数的表达式为如下。该问题的维度是 n=30,函数有全局最小值,解为 f ( x 1 , x 2 , . . . , x 30 ) = f ( 420.9687 , 420.9687 , . . . , 420.9687 ) = − 12569.5 f(x_1,x_2,...,x_{30})=f(420.9687,420.9687,...,420.9687)=-12569.5 f(x1,x2,...,x30)=f(420.9687,420.9687,...,420.9687)=12569.5

min ⁡ f ( x ) = − ∑ i = 1 30 x i sin ⁡ ( ∣ x ∣ ) , − 500 ≤ x i ≤ 500 \min f(x) = -\sum_{i=1}^{30} x_i \sin(\sqrt{|x|}), \quad -500 \leq x_i \leq 500 minf(x)=i=130xisin(x ),500xi500

3.3 Rastrigin’s Function(多峰测试函数)

Rastrigin’s 函数8有许多局部极小值。它是高度多模态的,但极小值的位置是规则分布的。该问题的维度是 n=30,函数解为 f ( x 1 , x 2 , . . . , x 30 ) = f ( 0 , 0 , . . . , 0 ) = 0 f(x_1,x_2,...,x_{30})=f(0,0,...,0)=0 f(x1,x2,...,x30)=f(0,0,...,0)=0

min ⁡ f ( x ) = ∑ i = 1 30 [ x i 2 − 10 cos ⁡ ( 2 π x i ) + 10 ] , − 5.12 ≤ x i ≤ 5.12 \min f(x) = \sum_{i=1}^{30} [x_i^2-10 \cos(2\pi x_i)+10], \quad -5.12 \leq x_i \leq 5.12 minf(x)=i=130[xi210cos(2πxi)+10],5.12xi5.12

3.4 Griewank’s Function(多峰测试函数)

Griewank函数具有许多的局部极小值,这些极小值是规则分布的。。该问题的维度是 n=30,函数解为 f ( x 1 , x 2 , . . . , x 30 ) = f ( 0 , 0 , . . . , 0 ) = 0 f(x_1,x_2,...,x_{30})=f(0,0,...,0)=0 f(x1,x2,...,x30)=f(0,0,...,0)=0

min ⁡ f ( x ) = 1 4000 ∑ i = 1 30 x i 2 − ∏ i = 1 30 cos ⁡ ( x i i ) + 10 ] , − 600 ≤ x i ≤ 600 \min f(x) = \frac{1}{4000}\sum_{i=1}^{30} x_i^2 -\prod_{i=1}^{30} \cos(\frac{x_i}{ \sqrt{i}})+10], \quad -600 \leq x_i \leq 600 minf(x)=40001i=130xi2i=130cos(i xi)+10],600xi600

4 参考


  1. Shi X H, Liang Y C, Lee H P, et al. Particle swarm optimization-based algorithms for TSP and generalized TSP[J/OL]. Information Processing Letters, 2007, 103(5): 169-176. https://doi.org/10.1016/j.ipl.2007.03.010. ↩︎

  2. Wei-Neng Chen, Jun Zhang, Chung H S H, et al. A Novel Set-Based Particle Swarm Optimization Method for Discrete Optimization Problems[J/OL]. IEEE Transactions on Evolutionary Computation, 2010, 14(2): 278-300. https://doi.org/10.1109/TEVC.2009.2030331. ↩︎

  3. 粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读 ↩︎ ↩︎

  4. 用python3实现粒子群优化算法 ↩︎

  5. 粒子群(PSO)算法概念及代码实现 ↩︎

  6. 粒子群算法原理及实现 ↩︎

  7. 粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解 ↩︎

  8. 23种标准测试函数解析 ↩︎ ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Win7怎么安装Python?

Win7怎么安装Python? 如果你正在使用Windows 7操作系统,想要安装Python,那么你来对了地方。Python是一种利用广泛的编程语言,可用于开发Web应用程序、数据分析和科学计算、机器学习等各种领域。 在此篇文章中,我们会…

MATLAB matlab人脸识别源码+使用说明+操作说明内容清晰适合新手

程序运行界面: 部分代码: function varargout facerecg(varargin) % FACERECG MATLAB code for facerecg.fig % FACERECG, by itself, creates a new FACERECG or raises the existing % singleton*. % % H FACERECG returns the hand…

Revit中如何导入、导出明细表?

Revit中明细表的作用非常大,项目中的数据归类整理及统计都离不开它,今天给大家分享一下如何在Revit中进行明细表标准的导出及导入,减少在实际项目中的重复性工作。 1、首先在Revit中新建一个项目文件,在平面视图中随便画几条管道…

用git下载gitee上的项目资源

目录 用git下载gitee上的项目资源 用git 的clone 命令 然后到gitee上复制相关的下载地址: 粘贴到clone后面即可(注意地址与clone之间有空格!!!) 运行结果: 用git下载gitee上的项目资源 用git…

学习vue2笔记

学习vue2笔记 文章目录 学习vue2笔记脚手架文件结构关于不同版本的Vuevue.config.js配置文件ref属性props配置项mixin(混入)插件scoped样式总结TodoList案例webStorage组件的自定义事件全局事件总线(GlobalEventBus)消息订阅与发布(pubsub&am…

LeetCoda 打卡day53--动态规划之最长子序列

一个人的朝圣 — LeetCode打卡第52天 知识总结 Leetcode 1143. 最长公共子序列题目说明代码说明 Leetcode 53. 最大子数组和题目说明代码说明 Leetcode 1035. 不相交的线题目说明代码说明 知识总结 今天几道最长子序列的题目, 都可以用一个固定的模版完成. 理解其中递推公式的…

字典序最小回文串

字典序最小回文串 题目解读 给你一个由 小写英文字母 组成的字符串 s ,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 ,使 s 变成一个 回文串 。如果执行 最少 操作次数…

DAY38——动态规划

步骤: 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目一. 斐波那契数列 1. 确定dp数组以及下标的含义 dp[i]的定义为:第i个数的斐波那契数值是dp[i] 2. 确定递推公式 状态…

FFmpegFrameGrabber视频抽帧工具类

Bytedeco 通过视频链接进行关键帧抽取图片&#xff0c;利用FFmpegFrameGrabber对视频流进行抽帧处理。 一、引入POM依赖 <dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.1</version><…

TCP 拥塞状态机演进

下面是 TCP 拥塞状态机&#xff1a; 但它只是冰山一角&#xff0c;这只是 loss-based 状态机&#xff0c;实现一个完全的 delay-based cc 就对不上这个状态机。 该状态机来自 RFC5681&#xff0c;源自 RFC2581&#xff0c;RFC2001&#xff0c;大概在 1990 年代&#xff0c;l…

10分钟内创意爆发,这些头脑风暴技巧让你IDEA满满

当初道叔刚入广告行业&#xff0c;与同事经历了一次困扰的头脑风暴&#xff0c;老板让他们想出一个大集团公司年会的主题口号。我们7-8个团队成员耗费了一个下午的时间&#xff0c;提出了几十个提议&#xff0c;但最终硬是没有一个能满足需求。许多人可能也有过道叔这样的经历。…

Js保留树型数据指定层级

自定义一个树型的数据 const tree [{value: 1, label: "1",children: [{value: 11, label: "1-1",children: [{value: 111, label: "1-1-1"}]}]}, {value: 2, label: "2"}]保留指定层级的方法 function keepNodesAtLevel(data, level…

vue源码阅读之Watcher类

我们上次分析vue源码讲的是收集依赖&#xff0c;数据变化之后我们把依赖收集到dep类中&#xff0c;通过这个管理器进行管理。 里面有一个subs数组&#xff0c;用来存放依赖&#xff0c;并且定义了几个实例方法用来依赖进行添加&#xff0c;删除&#xff0c;通过操作。 比如ad…

mysql基础5——mysql主从

文章目录 一、基本了解二、主从原理三、主从复制3.1 从无到有3.1.1 服务器初始化3.1.2 配置主库3.1.3 配置从库3.1.4 效果验证 3.2 从有到无3.2.1 主库全备&#xff0c;并同步到从库3.2.2 配置主库3.2.3 配置从库3.2.4 效果验证 四、数据库运维4.1 几个参数4.2 查看进程列表 一…

【案例实战】高并发业务的多级缓存架构一致性解决方案

我们在高并发的项目中基本上都离不开缓存&#xff0c;那么既然引入缓存&#xff0c;那就会有一个缓存与数据库数据一致性的问题。 首先&#xff0c;我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 读写分离模式&#xff0c;是最常见的Redis缓存模式&a…

树莓派教程2023

摘要&#xff1a;本教程只适用于最新版树莓派64位系统&#xff08;debian11&#xff09; 树莓派官网&#xff08;之前是org&#xff09;&#xff1a; https://www.raspberrypi.com/ 一.烧录系统 1.官网下载官方烧写器 https://downloads.raspberrypi.org/imager/imager_late…

部署Redis到云服务器

购买某服务商的云服务器 在云服务器中设置TCP端口号 配置云服务器的开放端口 通过telneat测试端口是否可用 配置redis服务器 需要配置一下自己云服务器的ip 保护模式关闭、允许其他远端连接 设置和云服务器开放一致的端口号 打开此项设置redis的连接密码&#xff0c;更加…

一、计算复杂度

补充说明&#xff1a; 1、决定性问题&#xff1a; 一个决定性问题(decision problem)是指其输出&#xff0c;只有“是”或“否”的问题。 一、P问题&#xff08;polynomial time class&#xff09; 1、问题描述&#xff1a; 可于确定型图灵机以多项式时间求解的决定性问题…

STM32学习之keil5环境搭建

1.keil5是开发ARM内核芯片最常用的集成开发环境IDE。STM32开发环境的搭建主要分为两步&#xff1a; 第一步&#xff0c;安装Kile5.到keil官网下载&#xff1a;Keil Embedded Development Tools for Arm, Cortex-M, Cortex-R4, 8051, C166, and 251 processor families. 第二步…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI指数的生态质量评价及拓展应用

第一章 生态环境脆弱性评价内涵及基于文献可视化方法研究热点分析 一、基本原理 生态环境脆弱性内涵 生态环境脆弱性评价研究 生态环境脆弱性驱动力研究 生态环境脆弱性研究热点 二、文献可视化软件介绍及常用功能介绍 VOS Viewer文献可视化及研究热点分析&#xff…