粒子群优化算法实现寻找函数最值
粒子群算法简介
粒子群优化(Particle Swarm Optimization, PSO),又称微粒群算法,是由J. Kennedy和R. C. Eberhart等于1995年开发的一种演化计算技术,来源于对一个简化社会模型的模拟。其中“群”来源于微粒群匹配M. M. Millonas在开发应用于人工生命的模型时所提出的群体智能的5个基本原则。“粒子(particle)”是一个折衷的选择,因为既需要将群体中的成员描述为没有质量、没有体积的,同时也需要描述它的速度和加速状态。
粒子群算法参数:
1.群体规模 2.惯性权重 3.加速常数c1和c2 4. 最大速度Vmax 5.最大代数Gmax
粒子群算法原理:
粒子群算法是基于群体的,根据粒子所处的环境将粒子移动到好的区域。假设现有一个规模大小为的粒子群,粒子群的个体位置分布记为X={x1,x2……xn},对应速度记为V={v1,v2……vn};粒子群个体在运动过程中所经过的最优位置(即粒子适应度最大时对应的位置)记为P={p1,p2……pn},在编程中常将此设为pbest数组;粒子群的全局最优位置用gbest表示。
核心的运动思想代码:
速度变化
vi=w*vi+c1*rand()*(pi-xi)+c2*rand()*(gbest-xi)
位置变化
xi=xi+vi
其中rand()表示区间[0,1]随机生成的小数。
在速度变化方程中 w*vi 表示微粒此前的惯性,c1*rand()*(pi-xi) 表示微粒本身基于自我历史适应度的思考,c2*rand()*(gbest-xi)表示微粒群之间的社会信息共享。
算法流程图:
例子
求解f(x)=x+5sin(5x)+2cos(4x)在区间上的函数最值。
在编程前首先观察一下函数的图像:
编程实现:
import numpy as np
import matplotlib.pyplot as plt
import math
import random#群体规模
m=30#惯性权重
w=1# 加速常数
c1=2
c2=5# 最大速度
Vmax=3# 最大代数
Gmax=10#目标函数,也就是适应度
def aimFunction(x):y=x+5*math.sin(5*x)+2*math.cos(4*x)return y#左右边界
left=0
right=10
#随机初始化粒子群位置和速度
x=np.random.uniform(left,right,m)
y=x+5*np.sin(5*x)+2*np.cos(4*x)
v=np.random.uniform(0,Vmax,m)pbset=x.copy()
y_best=y.copy()
gbset=x[y.argmax()]i=0while i<Gmax:for k in range(m):v[k] = w * v[k] + c1 * random.random() * (pbset[k] - x[k]) + c2 * random.random() * (gbset - x[k])# 速度限制if v[k]>Vmax:v[k]=Vmaxif v[k]<0:v[k] = 0.01x[k]=x[k]+v[k]if x[k]<left:x[k]=leftif x[k]>right:x[k]=righty=x+5*np.sin(5*x)+2*np.cos(4*x)for k in range(m):if y_best[k]<y[k]:y_best[k]=y[k]pbset[k]=x[k]gbset=pbset[y_best.argmax()]i+=1print(gbset,aimFunction(gbset))
粒子群优化算法实现寻找函数最值相关推荐
- 粒子群优化算法(Particle Swarm Optimization)的 Matlab(R2018b)代码实现
这里以 2D Michalewicz function 为对象来演示粒子群算法. 1.Michalewicz function 2.代码详解 2.1 画Michalewicz函数的网格图形 f=@(x ...
- 【MATLAB教程案例11】基于PSO粒子群优化算法的函数极值计算matlab仿真及其他应用
FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...
- 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...
- 粒子群优化算法的寻优算法——非线性函数极值寻优Matlab
粒子群算法的起源 1995年,受到鸟群觅食行为的规律性启发,James Kennedy和Russell Eberhart建立了一个简化算法模型,经过多年改进最终形成了粒子群优化算法(Particle ...
- 2021-01-26 粒子群优化算法(PSO)以及Matlab实现
粒子群优化算法(PSO)以及Matlab实现 1.粒子群算法 粒子群算法是一种智能优化算法.关于智能,个人理解,不过是在枚举法的基础上加上了一定的寻优机制.试想一下枚举法,假设问题的解空间很小,比如一 ...
- 粒子群优化算法(1)
背景: 粒子群优化算法起源于对鸟群觅食活动的分析.鸟群在觅食的时候通常会毫无征兆的聚拢,分散,以及改变飞行的轨迹,但是在不同个体之间会十分默契的保持距离.所以粒子群优化算法模拟鸟类觅食的过程,将待求解 ...
- 智能算法系列之粒子群优化算法
本博客封面由ChatGPT + DALL·E 2共同创作而成. 文章目录 前言 1. 算法思想 2. 细节梳理 2.1 超参数的选择 2.2 一些trick 3. 算法实现 3.1 问题场景 3. ...
- 采用粒子群优化算法实现投资组合优化【Matlab实现】
目录 一. 粒子群算法 1.1 概念 1.1.1 粒子群优化算法思想 1.1.2 更新规则 1.1.3 惩罚项 1.2 程序框图 二.投资组合优化 三.Matlab实现 3.1 结果及可视化 ...
- 自适应变异粒子群matlab,一种自适应变异粒子群优化算法的制作方法
本算法属于数据挖掘领域,涉及到SVM分类器和参数寻优,特别涉及到其变异操作,使得能够最大限度的搜索到全局最优解. 背景技术: 网格划分法是SVM分类器中常用的一种参数寻优方法,原因如下:一是网格划分法 ...
最新文章
- php 缓存模块,PHP缓存之模块缓存(APC)_PHP教程
- 写给程序员的 18 幅对联,你能看懂几个?
- CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》
- prometheus rfc3339 php date 转换
- 在Tomcat7.0中设置默认服务器和不加端口名访问
- java如何加载lambda_Java 8 lambda表达式引入及简单使用
- 06 事件处理函数绑定与事件对象
- Web Reference和Service Reference的区别
- javascript “||”、“”的运用
- 【干货】《深度学习:Deep Learning》课程PPT下载
- android subclipse subversive
- 操作高通QXDM5,点击重置按钮出现报错
- 【比较】2022 程式语言排名与分析,该学习哪一种程式语言?
- 登录Unity官方商店时提示Sorry, this link is no longer valid.(此链接已失效)
- pc模式 华为mate30_很实用!华为Mate 30全系支持PC模式,无线充+投屏更方便!
- Spring Security完成安全认证
- 路由器与无线网如何连接到服务器,两个路由器无线连接怎么设置_如何将两个路由器无线连接-192路由网...
- PHP 数组基本概念
- google chrome F11全屏快捷键
- python文件ab,Python文件
热门文章
- springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控
- java数据结构与算法之顺序表与链表深入分析
- 南京大学2020计算机考研分数线,2020年南京大学考研分数线公布
- 创建虚拟机步骤以及开启电脑虚拟设置方法
- 文字添加横线的h5实现
- Mybatis一发入魂
- 将Planet卫星影像数据添加到QGIS, ArcGIS Pro 或 ArcGIS 10.X方法,以ArcGIS Pro为例。
- 呼叫系统的技术实现原理和运作流程
- 论文阅读 (四):MILIS: Multiple Instance Learning with Instance Selection.
- 计算机的新兴技术在测绘工程领域的应用,测绘新技术在测绘工程测量中应用探讨.doc...