粒子群算法的理解及Python实现

  • 1.粒子群算法概述
  • 2 基本PSO算法流程图
  • 3 粒子群算法的Python实现

1.粒子群算法概述

粒子群算法 来源于对鸟群捕食模型的修正。
假设在一个n维空间中,有一群鸟(m只)在捕食,食物位于n维空间的某个点上。

假设鸟每次都能够判断离食物更近还是更远了,这样鸟在捕食的过程中会根据自己的经验以及鸟群中的 其他鸟的位置决定自己的速度,根据当前的位置和速度,可得下一刻的位置,这样每只鸟通过向自己和鸟群学习不断更新自己的速度和位置,直到最终获得食物,或者是离食物足够近。

对于某一时刻的第i只鸟,可用两个向量描述,鸟的位置向量Pi =(xi1,xi2,…xin), 鸟的速度 Vi =(Vi1,Vi2,…Vin)(i=1,2,…m)。
更新速度的表达式:

更新位置的表达式:

粒子 i 经过的历史最好位置:

种群经过的历史最好位置:

优点:粒子群算法作为一种优化算法,在解空间,粒子追随最优的粒子进行搜索。
它比蚁群算法、遗传算法等更简单,参数少,无需梯度信息,收敛速度更快。

设想这样一个场景:
一群鸟在随机搜索食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪,但是他们知道自己当前的位置距离食物还有多远。
那么找到食物的最优策略是什么?
最简单有效的方法是:搜寻目前离食物最近的鸟的周围区域。

2 基本PSO算法流程图

3 粒子群算法的Python实现

import numpy as np
import matplotlib.pyplot as pltclass PSO(object):def __init__(self, population_size, max_steps):self.w = 0.6  # 惯性权重self.c1 = self.c2 = 2self.population_size = population_size  # 粒子群数量self.dim = 2  # 搜索空间的维度self.max_steps = max_steps  # 迭代次数self.x_bound = [-10, 10]  # 解空间范围self.x = np.random.uniform(self.x_bound[0], self.x_bound[1],(self.population_size, self.dim))  # 初始化粒子群位置self.v = np.random.rand(self.population_size, self.dim)  # 初始化粒子群速度fitness = self.calculate_fitness(self.x)self.p = self.x  # 个体的最佳位置self.pg = self.x[np.argmin(fitness)]  # 全局最佳位置self.individual_best_fitness = fitness  # 个体的最优适应度self.global_best_fitness = np.min(fitness)  # 全局最佳适应度def calculate_fitness(self, x):return np.sum(np.square(x), axis=1)def evolve(self):fig = plt.figure()for step in range(self.max_steps):r1 = np.random.rand(self.population_size, self.dim)r2 = np.random.rand(self.population_size, self.dim)# 更新速度和权重self.v = self.w*self.v+self.c1*r1*(self.p-self.x)+self.c2*r2*(self.pg-self.x)self.x = self.v + self.xplt.clf()plt.scatter(self.x[:, 0], self.x[:, 1], s=30, color='k')plt.xlim(self.x_bound[0], self.x_bound[1])plt.ylim(self.x_bound[0], self.x_bound[1])plt.pause(0.01)fitness = self.calculate_fitness(self.x)# 需要更新的个体update_id = np.greater(self.individual_best_fitness, fitness)self.p[update_id] = self.x[update_id]self.individual_best_fitness[update_id] = fitness[update_id]# 新一代出现了更小的fitness,所以更新全局最优fitness和位置if np.min(fitness) < self.global_best_fitness:self.pg = self.x[np.argmin(fitness)]self.global_best_fitness = np.min(fitness)print('best fitness: %.5f, mean fitness: %.5f' % (self.global_best_fitness, np.mean(fitness)))pso = PSO(100, 100)
pso.evolve()
plt.show()

运行结果:
初始结果:

最后结果:

参考博客:

https://blog.csdn.net/chen_jp/article/details/7947059
https://blog.csdn.net/winycg/article/details/79120154
https://blog.csdn.net/zuochao_2013/article/details/53431767?ref=myread

优化算法笔记|粒子群算法理解及Python实现相关推荐

  1. 优化算法(粒子群算法)

    基本概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为研究.粒子群优化 ...

  2. 【优化预测】粒子群算法优化BP神经网络预测温度matlab源码

    一.粒子群算法及RBF简介 1 粒子群算法简介 1.1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模 ...

  3. 优化算法:粒子群算法,遗传算法,差分进化算法

    目录 1.粒子群算法(PSO) 2.遗传算法 3.差分进化算法 1.粒子群算法(PSO) 整个粒子群优化算法的算法框架如下: step1种群初始化,可以进行随机初始化或者根据被优化的问题设计特定的初始 ...

  4. 【微电网优化】基于粒子群算法求解智能微电网调度问题附matlab代码

    1 简介 搭建光伏,风力发电机和储能电池的数学模型.充分考虑对蓄电池的充放电保护,制定优化调度策略.应用粒子群算法(PSO)对其优化调度模型进行求解,在算法中增加了蓄电池满充满放的限制条件,同时使系统 ...

  5. 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  6. 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 混合储能系统容量优化matlab 采用粒子群算法编制风光互补发电储能系统的容量优化程序

    混合储能系统容量优化matlab 采用粒子群算法编制风光互补发电储能系统的容量优化程序,程序采用超级电容和蓄电池的方案,得到最佳蓄电池和超级电容个数. YID:5348663612411738爱熬夜的 ...

  8. 智能优化算法之粒子群算法(PSO)

    1. 粒子群算法思想起源 粒子群优化算法 ( P a r t i c l e S w a r m o p t i m i z a t i o n , P S O ) (Particle Swarm o ...

  9. 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

    演化计算(蚁群算法.粒子群算法.遗传算法.演化规则......) 1.概念 2.传统算法和演化计算 3.一般步骤 1.概念   演化计算主要用于解决预测优化问题.由于演化计算利用一组解求解,所以这一组 ...

最新文章

  1. Ubuntu 系统 卸载OpenJDK 8
  2. nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
  3. 不止视觉,CMU研究员让机器人学会了听音辨物
  4. thirft支持双向通信
  5. 201671030107胡文艳实验三作业互评与改进报告
  6. php phpass,ass.php · ciweiin/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com
  7. malloc 结构体_二进制安全之堆溢出(系列)——堆基础 amp; 结构(二)
  8. 吃PHP小孩智力好,这7种鱼千万不能给孩子吃,会影响孩子的智力!
  9. 互联网日报 | 5月12日 星期三 | 全国人口共14.1178亿人;长安汽车迈入2000万辆时代;Soul递交纳斯达克招股书...
  10. P1546 最短网络 Agri-Net
  11. ubuntu atpdpkg
  12. 移动端报表JS开发演示样例
  13. 开源.NET项目 CSS、JS资源优化类库及工具
  14. scala 资源 copy 自知乎
  15. TSAP(2) : 时区切换
  16. 2021Java春招,java求职简历模板下载
  17. 我的梦想是成为一名计算机程序员英语怎么说,我梦想将来成为一名程序员英语作文...
  18. 【个人网站】零基础个人网站搭建完整教程(附免费源码)
  19. zabbix通过yum安装,启动报错zabbix-agent.service never wrote its PID file. Failing.
  20. 基于翻译模型(Trans系列)的知识表示学习

热门文章

  1. 数据自治开放的软件开发和运行环境
  2. markdown 中的一些 html 使用属性
  3. Mysql启动自己主动设置max_connections为其它值
  4. React v16.0正式版发布
  5. Windows 10三月更新补丁竟高达3.99TB
  6. Vjios P1736 铺地毯【暴力,思维】
  7. Thinking In Java 读书笔记
  8. XP下,文件夹添加右键命令行
  9. Java泛型中extends和super的理解(转)
  10. MYSQL临时表创建索引