粒子群算法python实现: 带活化因子

  • 求解一个较复杂的函数
  • 实现

求解一个较复杂的函数

 def function(x):#2004年考研题(我这里只求极小值):x^2-6xy+10^2-2yz-z^2+18=0,求z=z(x,y)的极值点和极值#此题答案极小值3,极小值点(9,3)#因为看答案知道z+y>0,所以只试z+y>0的情况z=(18+x[0]**2-6*x[0]*x[1]+11*x[1]**2)**0.5-x[1]#化成x1,x2即y表示z的形式return z

实现

class Particle:def __init__(self, dim, max_opsition=100, max_velocity=0.05):self.position = [random.uniform(-max_opsition, max_opsition) for i in range(dim)] #粒子初始位置self.velocity = [random.uniform(-max_velocity, max_velocity) for i in range(dim)]  # 粒子初始速度self.particle_best = [0.0 for i in range(dim)]  # 初始粒子最优解def set_position(self, i, value):self.position[i] = valuedef get_position(self):return self.positiondef set_particle_best(self, value):self.particle_best = valuedef get_particle_best(self):return self.particle_bestdef set_velocity(self, i, value):self.velocity[i] = valuedef get_velocity(self):return self.velocityimport randomparticle_num = 100 #粒子数目
dim = 2
particles = [Particle(dim=2) for i in range(particle_num)] # 初始粒子
global_best = [0.0 for i in range(dim)] # 全局最优解def update(particles,global_best,iter_num,a,W,n1,n2,max_velocity,function): """状态更新"""for j in range(iter_num):for i in range(len(particles)):# 计算每个粒子的最适应度,就是代个解看它的y是多少,如果y小于当前的最优解的值,就更新最优解为这个解if function(particles[i].get_position()) < function(particles[i].get_particle_best()):particles[i].set_particle_best(particles[i].get_position())# 更新全局最优解同理if function(particles[i].get_position()) < function(global_best):global_best = particles[i].get_position()for k in range(dim):# 更新惯性权重w = W[1]-(j+1)*(W[1]-W[0])/iter_num# 套速度更新的公式particles[i].set_velocity(k, w * particles[i].get_velocity()[k] + \n1 * random.random() * (a*particles[i].get_particle_best()[k] - particles[i].get_position()[k]) \+ n2 * random.random() * (global_best[k] - particles[i].get_position()[k]))# 限制速度,别让它飞了if particles[i].get_velocity()[k] > max_velocity:particles[i].get_velocity()[k] = max_velocityelif particles[i].get_velocity()[k] < -max_velocity:particles[i].get_velocity()[k] = -max_velocity# 套位置更新的公式particles[i].set_position(k,particles[i].get_position()[k] +  particles[i].get_velocity()[k])return global_besta = 1. #活化因子
W = [0,1] #惯性权重
n1 = 1. #认知学习因子
n2 = 2. #社会学习因子
max_velocity = 0.05 #速度限制
iter_num = 2000 #迭代次数result=update(particles,global_best,iter_num,a,W,n1,n2,max_velocity,function)
print(result) #极值点,答案约为(9,3)
print(function(result)) #极小值,答案约为3

粒子群算法python实现: 带活化因子相关推荐

  1. 粒子群算法python(含例程代码与详解)

    目录 1.算法简介 2.算法流程 3.算法示例 4.算法实现 5.算法应用 1.算法简介 粒子群算法的思想源于对鸟类捕食行为的研究,模拟鸟集群飞行觅食的行为,鸟之间通过集体的协作使群体达到最优目的. ...

  2. 粒子群算法(PSO)的python实现

    文章目录 前言 一.粒子群算法的原理 二.python代码实现 总结 前言 CSDN上找了一圈粒子群算法的python代码,全是以类来写的,由于对类不感冒(其实是不咋会用),于是参照matlab版本的 ...

  3. 【超参数寻优】量子粒子群算法(QPSO) 超参数寻优的python实现

    [超参数寻优]量子粒子群算法(QPSO) 超参数寻优的python实现 一.粒子群算法的缺点     二.量子粒子群算法     三.QPSO算法的python实现     参考资料 一.粒子群算法的 ...

  4. Python编程实现粒子群算法(PSO)详解

    1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...

  5. 粒子群算法求解带约束优化问题 源码实现

    算法原理 之前求解的无约束的问题. 粒子群算法求解无约束优化问题 源码实现 算法原理如下 今天讲解下求解约束优化的问题.该问题常用的方法是罚函数法.即如果一个解x不满足约束条件,就对适应度值设置一个惩 ...

  6. 优化算法笔记|粒子群算法理解及Python实现

    粒子群算法的理解及Python实现 1.粒子群算法概述 2 基本PSO算法流程图 3 粒子群算法的Python实现 1.粒子群算法概述 粒子群算法 来源于对鸟群捕食模型的修正. 假设在一个n维空间中, ...

  7. 【超参数寻优】粒子群算法(PSO) 超参数寻优的python实现

    [超参数寻优]粒子群算法(PSO) 超参数寻优的python实现 一.算法原理 1.粒子群算法的名词解释 2.粒子更新 二.PSO算法参数寻优的python实现 参考资料 粒子群优化算法(Partic ...

  8. 【路径规划】基于粒子群算法求解带时间窗的车辆路径规划问题VRPTW模型matlab源码

    1 模型简介 将粒子群算法(PSO)应用于带时间窗车辆路径优化问题(VRPTW),构造车辆路径问题的粒子表达方法,建立了此问题的粒子群算法,并与遗传算法作了比较.实验结果表明,粒子群算法可以快速,有效 ...

  9. 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

最新文章

  1. 找到两个字符串的公共字符,并按照其中一个的排序
  2. 第三课--EFM32GG11系列--串口接收不定长度数据的几种方式
  3. CUDA遇到在VS创建的项目运行报C1041错误
  4. 如何在PowerPoint2007制造课件免费ppt模板下载
  5. 成功解决_catboost.CatBoostError: Invalid cat_features[4] = 8 value: index must be < 8.
  6. 案例代码:springboot+shiro配置同一用户多设备登录最大会话数
  7. php ftp 创建文件夹失败,phpftp上传多个文件时失败
  8. centOS目录结构详细版
  9. 日常问题解决记录一:远程桌面进程如果关闭了怎么呼出?
  10. PHP 危矣?Zend Engine 团队宣布脱离 Rogue Wave
  11. python pytorch自定义_Pytorch 实现自定义参数层的例子
  12. 寒冬已至,传统零售业如何打破僵局“逆境生长”
  13. 计算机如何连接iphone,iphone怎么连接到电脑的方法详解【图文】
  14. pythonapp自动化_基于python的App UI自动化环境搭建
  15. Java代码审计学习笔记
  16. jquery ajaxSubmit 异步提交
  17. Java等额本息实现
  18. Linux下如何拷贝隐藏文件
  19. 为何使用云原生应用架构 四 :独霸天下之四大绝技 — 终端多样性 篇
  20. 10个你必须知道的实时图片搜索引擎

热门文章

  1. 使用电脑工具--Mydesk
  2. 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...
  3. linux系统安全应急响应
  4. 【好题分享】适合C++初学者(数组的定义与初始化)
  5. 每个程序员书柜必备的编程书籍
  6. 0基础学Python有多难?
  7. 语音识别(ASR)论文优选:Icassp 2022 M2MeT方案总结
  8. k8s拉取镜像规则_【大强哥-k8s从入门到放弃13】Service详解
  9. Android开发-自定义View-AndroidStudio(二)遇到问题,附:ScrollView中文API
  10. 2.6-使用C#Winform开发Tcp/Udp网络小助手(含步骤和源码)