PSO粒子群算法可视化:

知乎视频​www.zhihu.com

代码如下(参见 github):

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.emax_iter = 100
pso = PSO(func=demo_func, n_dim=2, pop=40, max_iter=max_iter, lb=[-2, -2], ub=[2, 2])
pso.record_mode = True
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)# %% Now Plot the animation
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)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)ani.save('pso.mp4')

有(非线性)约束的粒子群算法,红色圆圈是约束

知乎视频​www.zhihu.com

代码

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 = 100
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)# %% Now Plot the animation
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)ani.save('pso2.mp4')

多目标粒子群算法_PSO粒子群算法可视化相关推荐

  1. 粒子群算法(1)----粒子群简要

    一.历史粒子群算法  从复杂适应系统衍生PSO算法(Complex Adaptive System,CAS).CAS理论于1994年正式提出,CAS中的成员称为主体.比方研究鸟群系统,每一个鸟在这个系 ...

  2. 遗传算法 差分进化算法 粒子群优化算法区别

    一 遗传算法 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精 ...

  3. 数学建模常用算法:粒子群算法(PSO)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制粒子群飞行过程】

    代码 package com.dam.heuristic.pso.test;import java.util.List; import java.util.Random;public class Ps ...

  4. 相控阵天线(四):阵列天线波束赋形(遗传算法、粒子群算法、进化差分算法、含python代码)

    目录 波束赋形简介 遗传算法波束赋形 粒子群算法波束赋形 差分进化算法波束赋形 智能算法比较 遗传算法波束赋形代码示例 波束赋形简介 根据期望的方向图辐射特性(如方向图形状.主瓣宽度.副瓣电平.方向性 ...

  5. 计算智能——粒子群算法的寻优算法

    文章目录 粒子群算法的寻优算法 1.简介 2.基本原理 3.代码实现 4.参数调试记录 4.1默认参数下的运行结果 4.2关于惯性权重w 4.2.1最大权重ws=0.9,最小权重we=0.4 4.2. ...

  6. 【智能算法】粒子群寻优算法

    1.理论基础 粒子群算法(particle swarm optimization,PSO)是计算智能领域中的一种生物启发式方法,属于群体智能优化算法的一种,常见的群体智能优化算法主要有如下几类: (1 ...

  7. matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法

    智能算法之粒子群优化算法: %% 初始化种群 f= % 函数表达式 % 求这个函数的最大值 figure(1);ezplot(f,[0,0.01,20]); N = 50; % 初始种群个数 d = ...

  8. 智能优化算法之粒子群算法(PSO)

    1. 粒子群算法思想起源 粒子群优化算法 ( P a r t i c l e S w a r m o p t i m i z a t i o n , P S O ) (Particle Swarm o ...

  9. 优化算法(粒子群算法)

    基本概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为研究.粒子群优化 ...

最新文章

  1. Java反射得到属性的值和设置属性的值
  2. android系统默认铃声,Android系统修改默认铃声
  3. 编程软件python中的if用法-Python编程工具pycharm的使用
  4. [转]ORACLE日期时间函数大全
  5. JAVA开发环境的搭建(配置JAVA开发环境)
  6. list vue 删除后页面渲染_Vue项目中v-for数组删除第n项元素产生渲染错误问题及解决方法...
  7. .Net学习(二):vb.net总结之似曾相识
  8. win10+ubuntu双系统修复ubuntu启动引导
  9. debounce函数的实现
  10. 南昌大学2021年811考研真题+答案详解
  11. python练习-word操作(word字体替换)
  12. Qt qml listview刷新
  13. linux判断三个数大小程序,几个shell程序设计小知识(shell常识部分)
  14. wan端口未连接怎么弄_路由器WAN口未连接怎么解决?
  15. mysql设置外键并一键生成数据表关系图
  16. 分布式卷积神经网络计算平台(通用神经网络数据处理卡 Kintex Ultra Scale 系列 KU115)
  17. Word中去掉各种标记符号
  18. 树莓派+摄像头实现对移动物体的检测
  19. linux 输入8个字母进行排序,Linux下使用sort进行排序
  20. java 实现穷举算法

热门文章

  1. RTT的线程同步篇——事件
  2. 贪心算法——部分背包(洛谷 P2240)
  3. C/C++排序算法(1)直接插入排序
  4. 基础知识—条件判断语句-switch语句
  5. 关于 AWR/ASH 故障分析,我有 9 个问题不知当不当问?
  6. CRS磁盘force dismount引起的RAC节点宕机故障
  7. 赠书5本包邮:数据思维实践、Cloud Native分布式架构原理与实践
  8. 9个问题,带你掌握流程控制语句中的java原理
  9. 4种语义分割数据集Cityscapes上SOTA方法总结
  10. 优化了MYSQL大量写入问题,老板奖励了1000块给我