优化算法笔记|粒子群算法理解及Python实现
粒子群算法的理解及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实现相关推荐
- 优化算法(粒子群算法)
基本概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为研究.粒子群优化 ...
- 【优化预测】粒子群算法优化BP神经网络预测温度matlab源码
一.粒子群算法及RBF简介 1 粒子群算法简介 1.1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模 ...
- 优化算法:粒子群算法,遗传算法,差分进化算法
目录 1.粒子群算法(PSO) 2.遗传算法 3.差分进化算法 1.粒子群算法(PSO) 整个粒子群优化算法的算法框架如下: step1种群初始化,可以进行随机初始化或者根据被优化的问题设计特定的初始 ...
- 【微电网优化】基于粒子群算法求解智能微电网调度问题附matlab代码
1 简介 搭建光伏,风力发电机和储能电池的数学模型.充分考虑对蓄电池的充放电保护,制定优化调度策略.应用粒子群算法(PSO)对其优化调度模型进行求解,在算法中增加了蓄电池满充满放的限制条件,同时使系统 ...
- 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 混合储能系统容量优化matlab 采用粒子群算法编制风光互补发电储能系统的容量优化程序
混合储能系统容量优化matlab 采用粒子群算法编制风光互补发电储能系统的容量优化程序,程序采用超级电容和蓄电池的方案,得到最佳蓄电池和超级电容个数. YID:5348663612411738爱熬夜的 ...
- 智能优化算法之粒子群算法(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 ...
- 演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)
演化计算(蚁群算法.粒子群算法.遗传算法.演化规则......) 1.概念 2.传统算法和演化计算 3.一般步骤 1.概念 演化计算主要用于解决预测优化问题.由于演化计算利用一组解求解,所以这一组 ...
最新文章
- Ubuntu 系统 卸载OpenJDK 8
- nginx 反向代理,动静态请求分离,proxy_cache缓存及缓存清除
- 不止视觉,CMU研究员让机器人学会了听音辨物
- thirft支持双向通信
- 201671030107胡文艳实验三作业互评与改进报告
- php phpass,ass.php · ciweiin/海洋cms 海洋影视管理系统 - 免费开源PHP - Gitee.com
- malloc 结构体_二进制安全之堆溢出(系列)——堆基础 amp; 结构(二)
- 吃PHP小孩智力好,这7种鱼千万不能给孩子吃,会影响孩子的智力!
- 互联网日报 | 5月12日 星期三 | 全国人口共14.1178亿人;长安汽车迈入2000万辆时代;Soul递交纳斯达克招股书...
- P1546 最短网络 Agri-Net
- ubuntu atpdpkg
- 移动端报表JS开发演示样例
- 开源.NET项目 CSS、JS资源优化类库及工具
- scala 资源 copy 自知乎
- TSAP(2) : 时区切换
- 2021Java春招,java求职简历模板下载
- 我的梦想是成为一名计算机程序员英语怎么说,我梦想将来成为一名程序员英语作文...
- 【个人网站】零基础个人网站搭建完整教程(附免费源码)
- zabbix通过yum安装,启动报错zabbix-agent.service never wrote its PID file. Failing.
- 基于翻译模型(Trans系列)的知识表示学习