Python 有约束的粒子群算法(PSO)的可视化动画

阅读: 评论:0

Python 有约束的粒子群算法(PSO)的可视化动画

Python 有约束的粒子群算法(PSO)的可视化动画

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

有约束的PSO(粒子群算法)

代码如下(参见 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.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)
d_mode = True
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)
# %%
pso.check_constraint(pso.gbest_x)# %%
demo_func([0.5, -0.5])
# %% Now Plot the animation
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimationrecord_value = d_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(粒子群算法)可视化动画

 

 

 

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])
d_mode = True
pso.run()
print('best_x is ', pso.gbest_x, 'best_y is', pso.gbest_y)
# %%
pso.check_constraint(pso.gbest_x)# %%
demo_func([0.5, -0.5])
# %% Now Plot the animation
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimationrecord_value = d_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')

 

本文发布于:2024-02-01 16:30:58,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677625837958.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:粒子   算法   动画   Python   PSO
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23