多目标粒子群算法_PSO粒子群算法可视化
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)----粒子群简要
一.历史粒子群算法 从复杂适应系统衍生PSO算法(Complex Adaptive System,CAS).CAS理论于1994年正式提出,CAS中的成员称为主体.比方研究鸟群系统,每一个鸟在这个系 ...
- 遗传算法 差分进化算法 粒子群优化算法区别
一 遗传算法 遗传算法(GA)作为一种经典的进化算法,自 Holland提出之后在国际上已经形成了一个比较活跃的研究领域. 人们对 GA 进行了大量的研究,提出了各种改进算法用于提高算法的收敛速度和精 ...
- 数学建模常用算法:粒子群算法(PSO)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制粒子群飞行过程】
代码 package com.dam.heuristic.pso.test;import java.util.List; import java.util.Random;public class Ps ...
- 相控阵天线(四):阵列天线波束赋形(遗传算法、粒子群算法、进化差分算法、含python代码)
目录 波束赋形简介 遗传算法波束赋形 粒子群算法波束赋形 差分进化算法波束赋形 智能算法比较 遗传算法波束赋形代码示例 波束赋形简介 根据期望的方向图辐射特性(如方向图形状.主瓣宽度.副瓣电平.方向性 ...
- 计算智能——粒子群算法的寻优算法
文章目录 粒子群算法的寻优算法 1.简介 2.基本原理 3.代码实现 4.参数调试记录 4.1默认参数下的运行结果 4.2关于惯性权重w 4.2.1最大权重ws=0.9,最小权重we=0.4 4.2. ...
- 【智能算法】粒子群寻优算法
1.理论基础 粒子群算法(particle swarm optimization,PSO)是计算智能领域中的一种生物启发式方法,属于群体智能优化算法的一种,常见的群体智能优化算法主要有如下几类: (1 ...
- matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法
智能算法之粒子群优化算法: %% 初始化种群 f= % 函数表达式 % 求这个函数的最大值 figure(1);ezplot(f,[0,0.01,20]); N = 50; % 初始种群个数 d = ...
- 智能优化算法之粒子群算法(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 ...
- 优化算法(粒子群算法)
基本概念 粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为研究.粒子群优化 ...
最新文章
- Java反射得到属性的值和设置属性的值
- android系统默认铃声,Android系统修改默认铃声
- 编程软件python中的if用法-Python编程工具pycharm的使用
- [转]ORACLE日期时间函数大全
- JAVA开发环境的搭建(配置JAVA开发环境)
- list vue 删除后页面渲染_Vue项目中v-for数组删除第n项元素产生渲染错误问题及解决方法...
- .Net学习(二):vb.net总结之似曾相识
- win10+ubuntu双系统修复ubuntu启动引导
- debounce函数的实现
- 南昌大学2021年811考研真题+答案详解
- python练习-word操作(word字体替换)
- Qt qml listview刷新
- linux判断三个数大小程序,几个shell程序设计小知识(shell常识部分)
- wan端口未连接怎么弄_路由器WAN口未连接怎么解决?
- mysql设置外键并一键生成数据表关系图
- 分布式卷积神经网络计算平台(通用神经网络数据处理卡 Kintex Ultra Scale 系列 KU115)
- Word中去掉各种标记符号
- 树莓派+摄像头实现对移动物体的检测
- linux 输入8个字母进行排序,Linux下使用sort进行排序
- java 实现穷举算法