MATLAB 粒子群算法,例题与常用模版

本文详细介绍了MATLAB中实现粒子群优化(PSO)算法的原理、优势、基本流程,并通过具体例子展示了如何手动实现PSO算法求解函数极值。讨论了自适应权重法、线性递减权重法、遗传算法和模拟退火等方法,并提到了MATLAB粒子群工具箱的应用。
摘要由CSDN通过智能技术生成

本文学习自:Particle Swarm Optimization in MATLAB - Yarpiz Video Tutorial 与《精通MATLAB智能算法》

1. 简介:

Particle Swarm Optimization ,粒子群优化算法,常用来找到方程的最优解。

2. 算法概述:

每次搜寻都会根据自身经验(自身历史搜寻的最优地点)和种群交流(种群历史搜寻的最优地点)调整自身搜寻方向速度

3. 算法优势:
  • 相较于传统算法计算速度非常快,全局搜索能力也很强;
  • PSO对于种群大小不十分敏感,所以初始种群往往设为500-1000,不同初值速度影响也不大;
  • 粒子群算法适用于连续函数极值问题,对于非线性、多峰问题均有较强的全局搜索能力。
4. 算法基本原理

一个形象的例子:

A与B两个小粒子初始时在河的两侧,他们想要找到河最深处。如果A某时刻所在位置的深度比B的浅,A就会像B的方向走,反之亦然。 当A到达Global Minimum(全局最小值)时,B会一直向着A前进,直到在optimum solution(全剧最优解)处汇合。
在这里插入图片描述

4.1 概述

从上面的示例中我们得到两个准则,也可以说是每个粒子的必要特性:

  1. Communication : 彼此互相通知
  2. Learning : 不停地学习以达最优解

数量众多的粒子通过相互的交流与学习,全部粒子最终将汇聚到一点,即问题的解。粒子间相互交流与学习的过程用数学或计算机语言描述为迭代

迭代的意义在于不断寻找更优的值,从理论上来说,如果我们掌握了一种可以不停寻找到更优解答的方法,通过不停的迭代,我们就能够找到最优的答案

Learning the concept of better is the main problem that an optimizer should solve. Then an optimizer learns the concept of better, it is able to solve any kind of optimuzation.Because the solution of optimization problem is to find the best one . So if we know what is the better, we actually can discover the concept of best.

4.2 粒子的基本信息

回顾粒子群算法概述:
每次搜寻都会根据自身经验(自身历史搜寻的最优地点)和种群交流(种群历史搜寻的最优地点)调整自身搜寻方向和速度

我们首先聚焦与粒子本身,或许全部粒子研究起来很复杂,但单个粒子的属性是很简单的。

首先,每个粒子包含两个基本信息,Position(位置) & Velocity(速度)。
在粒子群算法的每次迭代中,每个粒子的位置和速度都会更新。

  • 我们用 X i ( t ) ⃗ \vec {X_i(t)} Xi(t) 记录位置
  • V i ( t ) ⃗ \vec { V_i (t)} Vi(t) 记录方向与速度
    在这里插入图片描述
4.3 粒子的个体极值与全局极值

回顾粒子群算法概述:
每次搜寻都会根据自身经验(自身历史搜寻的最优地点)种群交流(种群历史搜寻的最优地点)调整自身搜寻方向和速度。

仅有上述位置与速度两个信息还不够,我们之前提到过,每一个粒子是会学习的。 每个粒子还拥有下面两个信息(每个信息都是一个向量):

  • 每一个粒子有它自己的记忆,会记住自己的best position , best experience,即个体极值 (personal best), 标记为 P i ( t ) ⃗ \vec { P_i (t)} Pi(t)

  • 当前时刻全局的最优解,即全局极值(Common best experience among the members),标记为 g i ( t ) ⃗ \vec { g_i (t)} gi(t)

    总结:PSO初始化为一群随机粒子,然后通过迭代找到最优解。在每一次迭代过程中,粒子通过跟踪两个极值来更新自己,一个是粒子本身所找到的最优解,这个解称为个体极值 P i ( t ) ⃗ \vec { P_i (t)} Pi(t) ;另一个极值是整个种群目前找到的最优解,这个极值是全局极值 g i ( t ) ⃗ \vec { g_i (t)} gi(t)

在这里插入图片描述

4.4 找到新位置

根据平行四边形法则,已知个体极值与整体极值,有了新时刻的速度 V i ⃗ ( t + 1 ) \vec {V_i}(t+1) Vi (t+1) ,会得到新的位置 X i ⃗ ( t + 1 ) \vec {X_i}(t+1) Xi (t+1)

在这里插入图片描述

状态转移方程:

v i j ⃗ ( t + 1 ) = w v i j ⃗ ( t ) + c 1 r 1 ( p i j ( t ) − x i j ⃗ ( t ) ) + c 2 r 2 ( g j ( t ) − x i j ⃗ ( t ) ) (4-1) \vec {v_{ij}}(t+1) = w\vec{v_{i j}} (t) + c_1r_1(p_{ij} (t) - \vec{x_{ij}}(t))+c_2r_2(g_j(t)-\vec{x_{ij}}(t)) \tag{4-1} vij (t+1)=wvij (t)+c1r1(pij(t)xij (t))+c2r2

  • 386
    点赞
  • 1926
    收藏
    觉得还不错? 一键收藏
  • 62
    评论
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值