python 实现粒子群算法(带绘制)

本文章用python实现了粒子群算法,

标准PSO的算法流程如下:

  1. 初始化一群微粒(群体规模为m),包括随机的位置和速度;
  2. 评价每个微粒的适应度;
  3. 对每个微粒,将它的适应值和它经历过的最好位置pbest的作比较,如果较好,则将其作为当前的最好位置pbest;
  4. 对每个微粒,将它的适应值和全局所经历最好位置gbest的作比较,如果较好,则重新设置gbest的索引号;
  5. 根据方程变化微粒的速度和位置;
  6. 如未达到结束条件(通常为足够好的适应值或达到一个预设最大代数Gmax),回到2)。

 公式为:

# 速度 = 速度 + 学习因子(c1)*rand(0~1)*(最好位置-当前位置)+学习因子(c2)*rand(0~1)*(群体最好位置-当前位置)
# 位置 = 位置+速度

代码如下:

import math
import random
import matplotlib.pyplot as plt
import numpy as npdef initialization(n, v_m, x_1, x_2):  # 初始化粒子群(鸟群)p = []for i in range(n):p.append([random.uniform(-5, 5), random.uniform(-0.5, 0.5), 0, 0, -float('Inf')])  # 位置,速度,当前值,最好位置,最好值return pdef fun(x):  # 适应度,这里求最大值# ⁅𝑥^3+2𝑥^2−𝑒^𝑥−10𝑥⁆        可以扔win10计算器里看看长什么样(-5~5)return pow(x, 3) + 2 * pow(x, 2) - pow(math.e, x) - 10 * xdef PSO(particle, p_number, v_max, x_max, x_min, loop_max, c1, c2, fig):all_good = 0  # 群体最好值的粒子索引loop = 0while True:# 计算所有粒子的值,并更新最好结果for i in range(p_number):particle[i][2] = fun(particle[i][0])if particle[i][2] > particle[i][4]:particle[i][3] = particle[i][0]particle[i][4] = particle[i][2]if particle[i][4] > particle[all_good][4]:  # 超过自己的最优值才能超越群体的最优值all_good = iPlt_PSO(fig, particle, x_max, x_min, all_good)  # 绘制图形if loop >= loop_max:  # 循环终止条件breakloop += 1# 更新速度和位置# 速度 = 速度 + 学习因子(c1)*rand(0~1)*(最好位置-当前位置)+学习因子(c2)*rand(0~1)*(群体最好位置-当前位置)# 位置 = 位置+速度for i in range(p_number):particle[i][1] += c1 * random.random() * (particle[i][3] - particle[i][0]) + c2 * random.random() * (particle[all_good][3] - particle[i][0])if particle[i][1] > v_max:  # 限制最大速度particle[i][1] = v_maxelif particle[i][1] < -v_max:particle[i][1] = -v_maxparticle[i][0] += particle[i][1]if particle[i][1] > x_max:  # 限制位置范围particle[i][1] = x_maxelif particle[i][1] < x_min:particle[i][1] = x_minpassdef Plt_PSO(fig, particle, x_max, x_min, all_good):  # 绘制训练过程# 清除上次绘图fig.clf()# 设置显示范围plt.xlim(x_min, x_max)scatter_x = [i[0] for i in particle]scatter_y = [i[2] for i in particle]plt.scatter(scatter_x, scatter_y, c='b', alpha=0.5)  # 绘点散点plt.scatter(particle[all_good][3], particle[all_good][4], c='r', alpha=0.8)  # 最好的结果plot_x = np.linspace(x_min, x_max, (x_max - x_min) * 20)plot_y = [fun(x) for x in plot_x]plt.plot(plot_x, plot_y)    # 曲线# 刷新图形plt.draw()plt.pause(0.5)v_max = 0.25  # 粒子最大速度
x_max = 5  # 最右边界
x_min = -5  # 最左边界
p_number = 10  # 粒子数目
loop_max = 20  # 循环轮数
c1 = 2  # 个体经验系数
c2 = 2  # 群体经验系数
particle = initialization(p_number, v_max, x_max, x_min)
fig = plt.figure()
plt.pause(1)  # 方便录像用,开窗口后等1秒再出图,你们建议删去
# 结果中,蓝色点就是粒子点,红色的是整个群体到达过的最佳点。
PSO(particle, p_number, v_max, x_max, x_min, loop_max, c1, c2, fig)
plt.show()

所用函数形状为:

这里取-5~5的部分

结果如下:

粒子群算法过程

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

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

相关文章

C++day2作业

把课上strcut的练习&#xff0c;尝试着改成class #include <iostream>using namespace std; class Stu { private:int age;string sex;int hign; public:int soce;void get_information();void set_information(); }; void Stu::set_information() {static Stu s1;cout …

【CSAPP】探究BombLab奥秘:Phase_1的解密与实战

&#x1f4cb; 前言 ​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《斯坦福大学之CSAPP》⏰诗赋清音&#xff1a;桃花灼灼春风暖&#xff0c;心随乐曲扬徐徐。 苦尽甘来梦未阑&#xff0c;岁月长河任舟游。 ​ &#x1f389;欢迎…

积极拥抱信创,思迈特软件与麒麟软件NeoCertify完成认证

近日&#xff0c;思迈特软件与麒麟软件有限公司进行了联合测试&#xff0c;并顺利完成产品兼容性测试。经评测&#xff0c;思迈特软件一站式大数据分析平台&#xff08;Smartbi Insight V11&#xff09;与银河麒麟高级服务器操作系统&#xff08;飞腾版&#xff09;V10、&#…

【Java面试题】java的反射机制

1.什么是反射 反射是在运行的时候&#xff0c;知道要操作的类是什么&#xff0c;并且在运行时获取类的完整构造&#xff0c;并调用对应的 方法 2.反射的主要功能 1. 在运行时判断任意一个对象所属的类 2.在运行时构造任意一个类的对象 3.在运行时判断任意一个类的成员变量…

ubuntu 在线安装 python3 pip

ubuntu 在线安装 python3 pip 安装 python3 pip sudo apt -y install python3 python3-pip升级 pip python3 -m pip install --upgrade pip

Kotlin 枚举类

使用 enum 修饰符&#xff1b;每个枚举常量都是一个对象&#xff0c;枚举常量以逗号分隔 // 枚举类 enum class Direction {NORTH, SOUTH, WEST, EAST }// 每一个枚举都是枚举类的实例&#xff0c;所以可以这样初始化 enum class Color(val rgb: Int) {RED(0xFF0000),GREEN(0x…

【Harmony OS - Stage应用模型】

基本概念 大类分为&#xff1a; Ability Module&#xff1a; 功能模块 、Library Module&#xff1a; 共享功能模块 编译时概念&#xff1a; Ability Module在编译时打包生成HAP&#xff08;Harmony Ability Package&#xff09;&#xff0c;一个应用可能会有多个HAP&#xf…

SQL高级:窗口函数

窗口函数,顾名思义,它的操作对象是窗口,即一个小的数据范围,而不是整个结果集。并且它是一个函数,在SQL中使用,所以一定有返回值。 窗口函数是SQL中非常有趣的部分,这一节我们就来学习一下它。 辅助表 方便我们后边的讲解,这里我们要建一张学生成绩表,建表语句如下…

深入理解与运用C语言中的Continue关键字

各位少年 在C语言编程中&#xff0c;循环语句是我们处理重复任务的重要工具。今天&#xff0c;我们将一起探讨一种能够优化循环结构的关键字——Continue。 一、理解Continue关键字 Continue关键字在C语言中用于跳过当前循环迭代的剩余部分&#xff0c;并立即开始下一次迭代…

test perf-02-性能测试之 LoadRunner LoadRunner 和 jmeter 的对比详细表格

LoadRunner LoadRunner is the premium, market leading performance testing solution for project teams. 特性 支持广泛的应用程序 极大地减少了在负载测试软件中模拟用户事务所需的时间和技能。 各种各样的连续测试 将负载测试集成到开发工具中:IDE、jUnit、nUnit、J…

Python从入门到熟练

文章目录 Python 环境Python 语法与使用基础语法数据类型注释数据类型介绍字符串列表元组集合字典 类型转换标识符运算符算数运算符赋值运算符复合运算符 字符串字符串拼接字符串格式化 判断语句bool 类型语法if 语句if else 语句if elif else 语句 循环语句while循环for 循环r…

Nacos身份认证权限绕过+漏洞利用工具分享

目录 一 JWT JWT: JWT的使用场景&#xff1a; JWT构造&#xff1a; 二 漏洞描述&#xff1a; 三 环境搭建 四 漏洞复现 五 工具漏洞复现 六 修复建议 七 工具分享 本文由掌控安全学院 - 小博 投稿 一 JWT JWT: JSON Web Token (JWT)是一个开放标准(RFC 7519)&…

记chrome的hackbar无法post php://input的问题

尽管hackbar支持post请求体&#xff0c;但是当请求体里面没有等于号的时候&#xff0c;无法post出去&#xff0c;这样如果需要使用php://input绕过waf的时候就没法做。 在开发人员工具的网络里面可以看到不使用等于号的情况下没有荷载。 之后在这里看到了解决方法&#xff0c;…

ctf_show(web入门笔记)持续更新中

信息收集 1-2&#xff1a;查看源代码 3&#xff1a;bp抓包 4&#xff1a;robots.txt&#xff08;这个文件里会写有网站管理者不想让爬虫的页面或其他&#xff09; 5&#xff1a;网站源代码泄露index.phps 6&#xff1a;同样也是源码泄露&#xff0c;&#xff08;拿到以后还…

Python可视化之Matplotlib

文章目录 Matplotlib与可视化分析简单图形的绘制pylot的高级功能添加图例与注释 Matplotlib与可视化分析 我们之前对数据的处理与分析&#xff0c;其实最终还是要利用可视化工具进行更加直观的输出 我们开业通过 pip install matplotlib命令来安装对应的模块 简单图形的绘制…

【FileZilla】FileZilla的使用及主动模式与被动模式----图文并茂详细讲解

一 FileZilla的简介 1.1 是什么 一个免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。它具有可控性、有条理的界面和管理多站点的简化方式&#xff0c;使得FileZilla客户端版成为一个方便高效的FTP客户端工具。而FileZilla Serve…

go 语言程序设计第2章--程序结构

2.1 名称 如果一个实体在函数中声明&#xff0c;它只在函数局部有效。如果声明在函数外&#xff0c;它将对包里面所有源文件可见。 实体第一个字母的大小写决定其可见性是否跨包。如果名称以大写字母开头&#xff0c;它是导出的&#xff0c;意味着它对包外是可见和可访问的。包…

rime中州韵 weasel.custom.yaml 配置 之 输入环境识别

当我们在使用输入法时&#xff0c;有些词汇或者功能效果&#xff0c;只会在特定的应用内才会用到&#xff0c;例如在微信中输入微信特有的表情&#xff0c;那如果这些词汇在非微信的输入环境中也显示&#xff0c;则会带来干扰。 我们就有一个需要&#xff0c;需要 rime 能识别…

TiDB在WMS物流系统的应用与实践 (转)

业务背景 北京科捷物流有限公司于2003年在北京正式成立,是ISO质量管理体系认证企业、国家AAAAA级物流企业、海关AEO高级认证企业,注册资金1亿元,是中国领先的大数据科技公司——神州控股的全资子公司。科捷物流融合B2B和B2C的客户需求,基于遍布全国的物流网络与自主知识产…

接口测试工具——ApiFox使用初体验 postman导出和ApiFox导入

目录 ApiFox使用初体验初步使用从postman导出到apifox导入 IDEA简单测试Postman测试工具post请求 接口测试工具swaggerKnife4j1.引入依赖2.配置3.常用注解4.接口测试 JMeter什么是JMeter?JMeter安装配置1.官网下载2.下载后解压3.汉语设置 JMeter的使用方法1.新建线程组2.设置参…