Python优化算法03——粒子群算法

news/2023/10/4 1:55:05

参考文档链接:scikit-opt


本章继续Python的优化算法系列。

优化算法,尤其是启发式的仿生智能算法在最近很火,它适用于解决管理学,运筹学,统计学里面的一些优化问题。比如线性规划,整数规划,动态规划,非线性约束规划,甚至是超参数搜索等等方向的问题。

但是一般的优化算法还是matlab里面用的多,Python相关代码较少。博主在参考了很多文章的代码和模块之后,决定学习 scikit-opt   这个模块。这个优化算法模块对新手很友好,代码简洁,上手简单。而且代码和官方文档是中国人写的,还有很多案例,学起来就没什么压力...

缺点是包装的算法种类目前还不算多,只有七种:(差分进化算法、遗传算法、粒子群算法、模拟退火算法、蚁群算法、鱼群算法、免疫优化算法)      /(其实已经够用了)

本次带来的是 数学建模里面经常使用的粒子群算法的使用演示。数学原理就不多说了


首先安装模块,在cmd里面或者anaconda prompt里面输入:

pip install scikit-opt

这个包很小,很快就能装好。

粒子群算法

首先定义我们要求解的问题

def demo_func(x):x1, x2, x3 = xreturn x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2

 调用PSO求解

from sko.PSO import PSOpso = PSO(func=demo_func, n_dim=3, pop=40, max_iter=150, lb=[0, -1, 0.5], ub=[1, 1, 1], w=0.8, c1=0.5, c2=0.5)
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)

 画出y随着迭代次数的变化图

import matplotlib.pyplot as plt
plt.figure(figsize=(6,3))
plt.plot(pso.gbest_y_hist)
plt.show()

 

 


带非线性约束的粒子群算法

假如你的非线性约束是个圆内的面积 (x[0] - 1) ** 2 + (x[1] - 0) ** 2 - 0.5 ** 2<=0
这样写

def demo_func(x):x1, x2,x3 = xreturn x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2
constraint_ueq = (lambda x: (x[0] - 1) ** 2 + (x[1] - 0) ** 2 - 0.5 ** 2 ,)
pso = PSO(func=demo_func, n_dim=3, pop=40, max_iter=5000, lb=[-2, -2,-2], ub=[2, 2,2], constraint_ueq=constraint_ueq)
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)

 (粒子群算法没有等式约束,都是不等式)


参数详解 

输入参数

输出参数

 


粒子群算法画动图 

求解问题

import numpy as np
from sko.PSO import PSOdef demo_func(x):x1, x2 = xreturn -20 * np.exp(-0.2 * np.sqrt(0.5 * (x1 ** 2 + x2 ** 2))) - np.exp(0.5 * (np.cos(2 * np.pi * x1) + np.cos(2 * np.pi * x2))) + 20 + np.econstraint_ueq = (lambda x: (x[0] - 1) ** 2 + (x[1] - 0) ** 2 - 0.5 ** 2,
)max_iter = 50
pso = PSO(func=demo_func, n_dim=2, pop=40, max_iter=max_iter, lb=[-2, -2], ub=[2, 2], constraint_ueq=constraint_ueq)
pso.record_mode = True
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)

画图

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimationrecord_value = pso.record_value
X_list, V_list = record_value['X'], record_value['V']fig, ax = plt.subplots(1, 1)
ax.set_title('title', loc='center')
line = ax.plot([], [], 'b.')X_grid, Y_grid = np.meshgrid(np.linspace(-2.0, 2.0, 40), np.linspace(-2.0, 2.0, 40))
Z_grid = demo_func((X_grid, Y_grid))
ax.contour(X_grid, Y_grid, Z_grid, 30)ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)t = np.linspace(0, 2 * np.pi, 40)
ax.plot(0.5 * np.cos(t) + 1, 0.5 * np.sin(t), color='r')plt.ion()
p = plt.show()def update_scatter(frame):i, j = frame // 10, frame % 10ax.set_title('iter = ' + str(i))X_tmp = X_list[i] + V_list[i] * j / 10.0plt.setp(line, 'xdata', X_tmp[:, 0], 'ydata', X_tmp[:, 1])return lineani = FuncAnimation(fig, update_scatter, blit=True, interval=25, frames=max_iter * 10)
plt.show()ani.save('pso.gif', writer='pillow')

效果 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python自动化测试 namp端口扫描

一、介绍 namp是一款很好的渗透测试工具&#xff0c;特别是做网关设备的渗透测试比较好用 二、安装 安装python-namp 安装nmap https://nmap.org/dist/nmap-7.80-setup.exe 默认安装即可 三、函数介绍 PortScanner()类 1、scan(self, hosts‘127.0.0.1’, portsNone, argume…

【50关于Visual Studio 2019控制台输出中文出现乱码问题及解决办法】

文章目录关于Visual Studio 2019控制台输出中文出现乱码问题及解决办法1、从.txt文件中读取输出出现乱码2、从中文字符串中读取输出出现乱码关于Visual Studio 2019控制台输出中文出现乱码问题及解决办法 环境&#xff1a; Windows11 Visual studio 2019 中文输出出现乱码&am…

备战数学建模45-粒子群算法优化BP神经网络(攻坚站10)

BP神经网络主要用于预测和分类&#xff0c;对于大样本的数据&#xff0c;BP神经网络的预测效果较佳&#xff0c;BP神经网络包括输入层、输出层和隐含层三层&#xff0c;通过划分训练集和测试集可以完成模型的训练和预测&#xff0c;由于其简单的结构&#xff0c;可调整的参数多…

pandas基础语法

Series 一维数据结构&#xff0c;包含行索引和数据两个部分. s pd.Series([14, 15, 17],index[u‘张某’, u‘李某’, u‘段某’])DataFrame 二维数据结构&#xff0c;包含带索引的多列数据&#xff0c;各列的数据类型可能不同 df pd.DataFrame([[22, u‘北京’, u‘律师…

优秀的图文识别开源项目PandaOCR

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 需求背景 上午&#xff0c;一个小伙伴给我打电话。 “谷哥的小弟&#xff0c;你在干嘛呢&#xff1f;” “排队&#xff0c;做核酸&#xff1b;你呢&#xff1f;” “写…

Python基于HRHet的跌倒检测系统(源码&教程)

1.背景 随着当今社会老龄化的加快,老年人口比例越来越大,老年人的身体健康及安全问题逐渐成为家庭及社会关注的焦点。老年人跌倒是导致其伤残、失能甚至死亡的主要原因之一,老年人跌倒后不能及时发现并寻求帮助往往会使后果更加严重,鉴于跌倒对老人的伤害之大,一款能够准确检测…

Qt5开发从入门到精通——第六篇四节( 图像与图片——显示SVG格式图片 )

欢迎小伙伴的点评✨✨&#xff0c;相互学习、互关必回、全天在线&#x1f373;&#x1f373;&#x1f373; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文章目录前…

【云原生】设备入云之FlexManager主流控制器读写

文章目录前言一、主流控制器数据类型1、 SIEMENS S7-200_Network1、位数据2、无符号整数3、单精度浮点2、Mitsubishi FX3U_FX3G1、位数据2、无符号整数3、单精度浮点二、主流控制器数据调用实例1、 SIEMENS S7-200 数据调用1、状态位调用2、浮点数据调用3、无符号整数调用4、辅…

面试必问——什么是BFC问题

什么是BFC问题 面试必会知识BFC 一、什么是BFC BFC即 Block Formatting Contexts (块级格式化上下文)&#xff0c; 是 W3C CSS2.1 规范中的一个概念。BFC是指浏览器中创建了一个独立的渲染区域&#xff0c;并且拥有一套渲染规则&#xff0c;他决定了其子元素如何定位&#x…

基于 attention 机制的 LSTM 神经网络 超短期负荷预测方法学习记录

LSTM&#xff08;long short-term memory)长短期记忆 基础介绍 在标准LSTM体系结构中&#xff0c;有1个记忆单元状态和3个门&#xff0c;即更新门Γu、遗忘门Γf和输出门Γo&#xff0c;标准LSTM的体系结构如图2所示。采用x 1, x 2, …, x T 表示LSTM网络中的典型输入序列&am…

Linux常见命令

一、目录操作命令 1.目录切换 cd 命令&#xff1a;cd 目录 2 .目录查看 ls [-al] 命令&#xff1a;ls [-al] 3 .目录操作【增&#xff0c;删&#xff0c;改&#xff0c;查】 1 .创建目录【增】 mkdir 命令&#xff1a;mkdir 目录 2 删除目录或文件【删】rm 命令&#xff1a;rm …

数仓Hive和分布式计算引擎Spark多整合方式实战和调优方向

Hive与Spark之间整合有3种模式,本篇从Hive on Spark和Spark on Hive的使用出发,hive支持mr、tez和spark三种底层计算引擎,通过部署Hive on Spark环境实现Hive用到Spark的体验,Spark on Hive的使用则比较简单直接通过SQL操作Hive,最后罗列常见的一些大数据性能调优方法。@目…

Javaweb学生信息管理系统(Mysql+JSP+MVC+CSS)

目录 一.项目介绍 二.运行效果 1.登录界面 2.主界面&#xff08;点击学号修改学生信息&#xff09; 3.增加学生界面 ?编辑 三.项目目录结构 ?四.代码展示 1.jsp及css代码 ?①登录界面代码&#xff08;login.jsp&#xff09; ②登录界面css&#xff08;login.css&…

HTTP协议中的“报头”(header)和 “正文“ (body)详解

系列文章目录 Fiddler抓包&#xff1a;下载、安装及使用_crazy_xieyi的博客-CSDN博客 HTTP协议格式、URL格式及URL encode_crazy_xieyi的博客-CSDN博客 GET和POST有什么区别&#xff1f;_crazy_xieyi的博客-CSDN博客 文章目录 一、请求“报头”(header)详解二、请求 "…

springboot校园师生出入登记系统java ssm

后台主要是管理员&#xff0c;管理员功能包括个人中心&#xff0c;通知公告管理&#xff0c;用户管理&#xff0c;工作人员管理&#xff0c;进门登记管理&#xff0c;出门登记管理&#xff0c;出入统计管理&#xff0c;外来登记管理等&#xff1b; 系统对这些功能进行整合 本次…

【操作系统】系统启动流程

文章目录系统启动流程&#xff08;Linux&#xff09;BIOSMBRGRUB2启动引导内核引导systemd固件和BIOSBIOS分类关于legacy关于uefibootloader 启动管理器kernel初始化systemd - 守护进程总结系统启动流程&#xff08;Linux&#xff09; 1. BIOS 加电自检 2. 把 MBR 加载到内存 …

MyBatis的各种查询功能(5种)

MyBatis的各种查询功能(5种) 查询一个实体类对象&#xff1a; 新建一个SelectMapper的接口文件 新建一个SelectMapper.xml的映射文件 新建一个测试类SelectMapperTest.java文件 在接口文件中添加查询一条语句的方法声明 在映射文件中添加sql语句 在测试类中编写查询一条语句…

spark(day04)

数据挖掘 数据挖掘∶也就是data mining&#xff0c;是一个很宽泛的概念&#xff0c;也是一个新兴学科&#xff0c;旨在如何从海量数据中挖掘出有用的信息来。 数据挖掘这个工作Bl&#xff08;商业智能&#xff09;可以做&#xff0c;统计分析可以做&#xff0c;大数据技术可以做…

哈希的使用

文章目录1. 哈希的使用1.1 unordered_set1.2 unordered_map1.3 测试效率2 练习题2.12.21. 哈希的使用 map、set和哈希的区别&#xff1a; map是双向迭代器&#xff0c;哈希表是单向迭代器。map有序&#xff0c;哈希无序。map查找是logn&#xff0c;哈希是O(1); 1.1 unordered…

Java | static关键字的应用【工具类、代码块和单例】

在上一篇文章讲完了static关键字的一些基础知识后&#xff0c;我们就来说一说这个关键字在应用开发中具体可以怎么使用吧&#xff0c;希望看完这篇文章可以对您有帮助&#x1f4d6; static关键字在具体开发中的应用一、工具类1、什么是工具类&#xff1f;2、使用工具类有什么好…
最新文章