受到生物学家Frank Heppner建立的鸟群运动模型影响,James Kennedy和Russell Eberhart于1995年提出了粒子群优化算法(Particle Swarm Optimization, PSO),PSO算法的基本行为规则是:

1)       向背离最近的同伴的方向运动

2)       像目的地运动

3)       向群的中心运动

Kennedy和Eberhart受到这个模型的启发,将这个模型中的栖息地类比与所求解空间中的可能解的位置,通过个体间信息的传递,引导整个群体向可能解的方向移动,增加发现较好解的可能性。群体中的鸟被抽象为一个个没有质量没有形状的“粒子”,通过这些“粒子”的相互协作和信息共享,在复杂解空间寻找最好解。

混合PSO算法基于当前位置的适应值计算每个个体,并将这些适应值进行排序,然后将群体中一半适应值差的个体的当前位置和速度替换为另一半好的个体的当前位置和速度,并保留每个个体的最后位置pbest。因此,群体搜索集中到相对较优的空间,但还受到个体自身以前最好位置的影响。

混合PSO算法的流程如下:

1)       初始化所有粒子;

2)       评价每个粒子的适应值;

3)       使用适应值对粒子进行选择;

4)       调整粒子的搜索位置,粒子从新的位置开始搜索;

5)       检查终止条件。如果达到最大迭代次数或者最好解停滞不再变化,就终止迭代;否则回到步骤2)。

PSO算法主要包括以下几个要点:

(l)粒子以随机的方式在整个问题空间中流动并且可以对自己所处的环境

进行评价(计算适应度);

(2)每个粒子均可以记忆自己到过的最好位置;

(3)每个粒子可以感知邻近粒子己达到的最好位置;

(4)在改变速度的时候同时考虑自己到过的最好位置和邻近粒子已达到最

好位置"

PSO算法的实现步骤为:

(l)初始化粒子群。设群体规模为m,在允许的范围内随机设置粒子的初始位置和速度;

(2)评价每个粒子的适应值,即计算每个粒子的目标函数fitness,;

(3)对所有的i《{l,2,,,m},比较fitness和pbest。如果fitness优于pbest,则令pbest=fitness,, ;

(4)对所有的i《{l,2,,,m},比较声fitness和gbest,如果fitness优于gbest,则重新设置gbest的索引号g;

(5)根据(3-4),(3-5)式调整每一个粒子的位置和速度;

(6)检查终止条件"如果达到最大迭代次数 或者最好解停滞不再变化,就终止迭代;否则返回(2)。

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.max(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()

粒子群PSO算法 python实现(亲测)相关推荐

  1. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码

    粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...

  2. 基于粒子群PSO算法的风光发电与电动汽车充放电协同优化调度matlab程序_电动汽车v2g

    V2G模型 基于粒子群PSO算法的风光发电与电动汽车充放电协同优化调度matlab程序_电动汽车v2g 1.针对大规模电动汽车无序接入电网给电力系统带来的负荷压力问题,提出一种含不确定性电源的电动汽车 ...

  3. 粒子群(PSO)算法(附完整Matlab代码,可直接复制)

    在粒子群优化算法中,每个解可用一只鸟(粒子)表示,目标函数就是鸟群所需要寻找的食物源.寻找最优解的过程中,粒子包含两种行为:个体行为和群体行为. 个体行为:粒子根据自身在寻优过程中的最优解更新自己的位 ...

  4. 算法 - 粒子群(PSO)算法

    文章目录 0. 简介 1. 原理 2. 流程 3. 代码 4. 权重的选择 0. 简介 粒子群算法( particle swarm optimization, PSO)是计算智能领域,除了蚁群算法.鱼 ...

  5. Python实现粒子群PSO算法

    问题 粒子群算法是一种常见的群体智能演化算法,应用极其广泛.互联网随处可见大量的Python实现粒子群算法的代码,然而多数代码命名十分随意.注释较少.个别代码存在错误代码不规范等问题,给初学者学习带来 ...

  6. 基于粒子群PSO优化灰色神经网络的鞋销量预测

    目标 背影 灰色模型原理 神经网络原理 灰色神经网络原理 粒子群算法的原理 粒子群改进灰色神经网络原理 基于粒子群PSO优化灰色神经网络的鞋销量预测 效果图 结果分析 展望 参考 背影 提前预测销量, ...

  7. 优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包)

    目录 ▎标准PSO算法 ▎RDPSO算法 ▎标准PSO算法Python工具包 01 | 工具包适用范围 02 | 工具包安装方法 03 | 工具包使用实例 ▎参考文献 今天为各位讲解一种改进的粒子群优 ...

  8. apriori算法python_清华学霸亲测有效,每日自学两小时Python,学完就能做项目

    之前小编发过一些关于数据分析的文章,收到大家不少的好评,不过也有一些困惑: 入门数据分析该学哪些知识点?该看哪些书? 是从Python入手还是R语言?常用的算法有哪些? 可以练手做项目的数据库去哪里找 ...

  9. matlab粒子群加约束条件_多目标粒子群(PSO)与MATLAB程序视频教程及动态优化问题约束条件...

    [内容简介]<粒子群算法与应用和MATLAB程序详解视频>共15章186节视频,总学时1917分钟,合32小时.主要内容包括:粒子群算法(PSO)基本概念与算法流程,粒子群算法利用MATL ...

最新文章

  1. nodejs pm2使用
  2. NetBeans 时事通讯(刊号 # 27 - Sep 24, 2008)
  3. 大亚DP607超级密码,破解方法
  4. Colima:MacOS 上的极简容器运行时和 Kubernetes
  5. linux init 参数,Objective-C中实现覆写init函数以及在初始化时添加参数
  6. 【linux】linux 安装 protobuf 2.5.0 版本
  7. 网络启动安装linux客户机nfs设置,NFS服务端和客户端安装配置
  8. error C2440: “<function-style-cast>”: 无法从“IplImage *”转换为“cv::Mat”
  9. 6.4信号灯(Semaphores)
  10. DevOps团队如何选择监控工具
  11. Tumblr,instapaper分享
  12. H5移动端rem转成rpx
  13. 数学建模竞赛2022美赛
  14. FME转换器 文本替换(StringReplacer)
  15. 侯耀文两女告侯耀华争遗产
  16. 用 Python 简单做个 动态模拟太阳系运转 吧
  17. 前程无忧(学生版)-产品需求分析报告
  18. KMIP1.0环境搭建
  19. SAP-Script脚本重复操作功能了解下(懒人必备)
  20. Android使用ViewFlipper实现图片上下自动轮播

热门文章

  1. GIS招聘 | 自然资源部各地单位招聘(第一波)
  2. android语言切换不重启,Android不重启应用切换语言
  3. 生活随记-感恩父亲母亲
  4. VBA去除Excel中换行符
  5. 【蓝桥杯集训·每日一题】AcWing1394. 完美牛棚
  6. J Cheminform2022 | SwinOCSR+:基于Swin Transformer的end-to-end光学化学结构识别
  7. ajax更新局部jsp,jsp局部刷新
  8. 微信小程序自定义模态框,官方版本与自定义可扩展版本
  9. CLO-购买云服务器
  10. 使用dependency-check-maven对项目进行漏洞检查