欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 粒子群优化算法求解f(x)=x**2的最小值

粒子群优化算法求解f(x)=x**2的最小值

2024/10/23 20:25:34 来源:https://blog.csdn.net/weixin_47149785/article/details/143190491  浏览:    关键词:粒子群优化算法求解f(x)=x**2的最小值

文章目录

  • 代码

代码

import numpy as np
import matplotlib.pyplot as plt
############粒子群优化算法求解f(x)=x**2的最小值############# %% 参数设置
m = 3  # 粒子数量
D = 1  # 维度
wmax = 0.9
wmin = 0.4
c1 = 2
c2 = 2
vmax = 2
xmax = 2.5
xmin = -2.5
t = 1
tmax = 100# %% 初始化x,v,xp,xg
x_arr = [(xmax - xmin) * np.random.rand() + xmin for _ in range(m)]
v_arr = [(2 * np.random.rand() - 1) * vmax for _ in range(m)]xp_arr = x_arr.copy()  # 个体最优位置
fxp_arr = [float('inf')] * m  # 个体最优适应度值xg = 0  # 全局最优位置
fxg = float('inf')  # 全局最优适应度值# 用来记录每次迭代中的全局最优适应度值
fxg_history = []# %% 计算惯性权重
w_arr = [wmax - i * (wmax - wmin) / tmax for i in range(tmax)]# %% 生成随机数r
def r_array():return [np.random.rand() for _ in range(tmax)]r_1_arr = r_array()
r_2_arr = r_array()# %% 速度更新以及约束处理
def update_velocity(v, x, xp, xg, w, r1, r2):new_v = v * w + c1 * r1 * (xp - x) + c2 * r2 * (xg - x)# 速度约束if new_v > vmax:new_v = vmaxelif new_v < -vmax:new_v = -vmaxreturn new_v# %% 位置更新以及约束处理
def update_position(x, v):new_x = x + v# 位置约束if new_x > xmax:new_x = xmaxelif new_x < xmin:new_x = xminreturn new_x# %% 粒子群优化主循环
for t in range(tmax):for i in range(m):# 更新速度和位置v_arr[i] = update_velocity(v_arr[i], x_arr[i], xp_arr[i], xg, w_arr[t], r_1_arr[t], r_2_arr[t])x_arr[i] = update_position(x_arr[i], v_arr[i])# 计算适应度值f = x_arr[i] ** 2# 更新个体历史最优解if f < fxp_arr[i]:fxp_arr[i] = fxp_arr[i] = x_arr[i]# 更新全局最优解if f < fxg:fxg = fxg = x_arr[i]# 每次迭代后记录当前全局最优适应度值fxg_history.append(fxg)# %% 输出结果
print(f"全局最优位置: {xg}")
print(f"全局最优适应度值: {fxg}")# %% 绘制结果
plt.plot(range(tmax), fxg_history, label='Global Best Fitness')
plt.xlabel('Iteration')
plt.ylabel('Fitness Value')
plt.title('PSO Optimization of f(x) = x^2')
plt.legend()
plt.show()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com