2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
粒子群优化算法-Python版本和Matlab函数 particleswarm
调用
前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab下的粒子群函数。
前文参看:粒子群优化算法(PSO)
以Ras函数(Rastrigin's Function)为目标函数,求其在x1,x2∈[-5,5]上的最小值。这个函数对模拟退火、进化计算等算法具有很强的欺骗性,因为它有非常多的局部最小值点和局部最大值点,很容易使算法陷入局部最优,而不能得到全局最优解。如下图所示,该函数只在(0,0)处存在全局最小值0。
Python代码实现
import numpy as np
import matplotlib.pyplot as plt
# 目标函数定义
def ras(x):
y = 20 + x[0] ** 2 + x[1] ** 2 - 10 * (np.cos(2 * np.pi * x[0]) + np.cos(2 * np.pi * x[1]))
return y
# 参数初始化
w = 1.0
c1 = 1.49445
c2 = 1.49445
maxgen = 200 # 进化次数
sizepop = 20 # 种群规模
# 粒子速度和位置的范围
Vmax = 1
Vmin = -1
popmax = 5
popmin = -5
# 产生初始粒子和速度
pop = 5 * np.random.uniform(-1, 1, (2, sizepop))
v = np.random.uniform(-1, 1, (2, sizepop))
fitness = ras(pop) # 计算适应度
i = np.argmin(fitness) # 找最好的个体
gbest = pop # 记录个体最优位置
zbest = pop[:, i] # 记录群体最优位置
fitnessgbest = fitness # 个体最佳适应度值
fitnesszbest = fitness[i] # 全局最佳适应度值
# 迭代寻优
t = 0
record = np.zeros(maxgen)
while t < maxgen:
# 速度更新
v = w * v + c1 * np.random.random() * (gbest - pop) + c2 * np.random.random() * (zbest.reshape(2, 1) - pop)
v[v > Vmax] = Vmax # 限制速度
v[v < Vmin] = Vmin
# 位置更新
pop = pop + 0.5 * v
pop[pop > popmax] = popmax # 限制位置
pop[pop < popmin] = popmin
'''
# 自适应变异
p = np.random.random() # 随机生成一个0~1内的数
if p > 0.8: # 如果这个数落在变异概率区间内,则进行变异处理
k = np.random.randint(0,2) # 在[0,2)之间随机选一个整数
pop[:,k] = np.random.random() # 在选定的位置进行变异
'''
# 计算适应度值
fitness = ras(pop)
# 个体最优位置更新
index = fitness < fitnessgbest
fitnessgbest[index] = fitness[index]
gbest[:, index] = pop[:, index]
# 群体最优更新
j = np.argmin(fitness)
if fitness[j] < fitnesszbest:
zbest = pop[:, j]
fitnesszbest = fitness[j]
record[t] = fitnesszbest # 记录群体最优位置的变化
t = t + 1
# 结果分析
print(zbest)
plt.plot(record, 'b-')
plt.xlabel('generation')
plt.ylabel('fitness')
plt.title('fitness curve')
plt.show()
结果为
[0.99699579 0.00148844]
可以知道求解的点非最小值,算法陷入了局部最小值。
删除自适应变异部分的注释,运行后结果如下,可以看出收敛到全局最优解。
[0.00022989 0.00014612]
Matlab有个自带的粒子群优化函数particleswarm也可以使用。本例的代码如下:
y = @(x) 20 + x(1).^2 + x(2).^2 - 10*(cos(2*pi*x(1))+cos(2*pi*x(2)));
rng default
options = optimoptions('particleswarm','SwarmSize',200,'HybridFcn',@fmincon,'MaxIterations',200, 'Display','iter');
lb = [-5 -5]; % 这是变量的下限
ub = [5 5]; % 这是变量的上限
[x,fval,exitflag,output] = particleswarm(y,length(lb),lb,ub,options);
结果如下
particleswarm详细资料参考:
https://www.mathworks.com/help/gads/particleswarm.html
Matlab文档
2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用相关推荐
- matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法
智能算法之粒子群优化算法: %% 初始化种群 f= % 函数表达式 % 求这个函数的最大值 figure(1);ezplot(f,[0,0.01,20]); N = 50; % 初始种群个数 d = ...
- 优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包)
目录 ▎标准PSO算法 ▎RDPSO算法 ▎标准PSO算法Python工具包 01 | 工具包适用范围 02 | 工具包安装方法 03 | 工具包使用实例 ▎参考文献 今天为各位讲解一种改进的粒子群优 ...
- Python自定义:粒子群优化算法
Python中的粒子群算法 例子算法又被称作飞鸟觅食算法,是一种常见的现代启发式优化算法.在Python中,处于不同的情况考虑,我们都可能使用到该算法.在这里我给出三种情况下的解决方案或者替代方案. ...
- 【python】利用python实现简单粒子群优化算法实例
前言 最近在准备复(bai)习(lan)智能信息处理ing--想着通过复现一些PPT上简单算法例子的方式加深自己对算法的理解,也作为大家使用粒子群这一算法的思路与代码参考hhh 算法简述 粒子群算法( ...
- 【项目实战】Python实现用PSO粒子群优化算法对KMeans聚类模型进行优化项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 粒子群优化算法(Particle Swarm optimizat ...
- 优化算法 | 基于粒子群优化算法的Bp神经网络预测21~22赛季NBA总冠军(附MATLAB代码)
文章目录 前言 一.数据准备 二.基于PSO的Bp神经网络预测 1.粒子表达方式 2.目标函数 3.粒子速度和位置的更新 三.MATLAB代码 四.预测结果 五.代码获取方式 总结 近期你可能错过了的 ...
- 2021-01-26 粒子群优化算法(PSO)以及Matlab实现
粒子群优化算法(PSO)以及Matlab实现 1.粒子群算法 粒子群算法是一种智能优化算法.关于智能,个人理解,不过是在枚举法的基础上加上了一定的寻优机制.试想一下枚举法,假设问题的解空间很小,比如一 ...
- 粒子群优化算法(2)离散粒子群算法
在上一篇博客 粒子群优化算法(1)中介绍了基本的粒子群算法,基本粒子群算法是基于连续空间(区间)进行搜索,然而在一些实际的工程应用中,我们的待求解的变量可能并不是历需的,而实一种离散型的变量.这就需要 ...
- 基于动态邻域的切换粒子群优化算法
英文: A Dynamic Neighborhood-Based Switching Particle Swarm Optimization Algorithm 摘要: 本文提出了一种基于动态邻域的切 ...
最新文章
- 无痛涨点!大白话讲解 Generalized Focal Loss
- php defer,PHP 协程:Go + Chan + Defer
- android 控件id为0,Android Studio错误:(3,0)未找到ID为“com.android.application”的插件...
- Jquery----实现抽奖效果(根据姓名抽奖)
- 节约内存:Instagram的Redis实践(转)
- AtCoder Beginner Contest 084(AB)
- 20个公司绝对不会告诉你的潜规则
- UvaOJ10369 - Arctic Network
- hls二次加密 m3u8_将视频转换为m3u8,使用AES-128的方式加密HLS真的有效吗?
- LCN分布式事务框架实战
- final、finally、finalize
- Lingo软件的基本语法
- java过滤器Filter实现敏感词汇过滤
- 魔兽世界WOW服务器端的模拟器【2010】
- 无人机/FPV穿越机航模的遥控器/接收机等配件厂商
- SQL练习题附重点函数说明--更新至21题
- 计算机链接投影蓝屏,怎么回事电脑与投影连接正常?电脑与投影连 – 手机爱问...
- python表达爱意_程序员有哪些对女友表达爱意的奇招?
- 计算距离春节还有多长时间
- android导出txt文件格式,安卓端数据导出成txt文件
热门文章
- JDK和SSH无密码配置
- 深入Python(3): and、or以及and-or
- php fckeditor,php --- fckeditor
- LeetCode-剑指 Offer 25. 合并两个排序的链表
- elasticSearch6源码分析(12)DiscoveryModule
- BigDecimal相除异常
- 短信验证码、图形验证码、邮件验证的自动化测试
- 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事 本文作者:奕欣	2017-01-14 09:46 导语:AI科技评论保证这是相对通俗易懂的一篇入门介绍了,看不懂的话欢迎关注「AI 科技
- Airbnb欺诈预测机器学习模型设计:准确率和召回率的故事 发表于2015-07-15 16:14| 3926次阅读| 来源AirBNB/Data| 1 条评论| 作者Ariana Radianto
- 谷歌大脑科学家亲解 LSTM:一个关于“遗忘”与“记忆”的故事