学习python实现粒子群算法遇到的的问题
参考:https://blog.youkuaiyun.com/qq_43634001/article/details/91398204.
初学粒子群算法,按照参考文章学习,原文是一维函数寻优,自己练习写了二维的例子(代码23行左右位置),出现了一个问题。
在更新粒子位置部分中的更新全局最优,我觉得p_best(个体经历的最佳位置)和X[ i ](个体经历位置)应该是相同的(代码47行),但实际运行后若使用X[ i ]更新全局最优,会出现无法输出最优解情况,从图像看上随着迭代次数增加,群体反而不容易找到最优解位置。而使用p_best就没有这种情况。
使用p_best结果输出效果还可以:

但用X[ i ]找最优解效果很差:

最终结果很离谱

原因猜测有可能是过优化?可能是数据类型的问题?目前没有再验证原因是什么。
import numpy as np
import random
import matplotlib.pyplot as plt
# ----------------------PSO参数设置---------------------------------
class PSO():
def __init__(self, pN, dim, max_iter):
self.w = 1
self.c1 = 2
self.c2 = 2
self.r1 = 0.6
self.r2 = 0.3
self.pN = pN # 粒子数量
self.dim = dim # 搜索维度
self.max_iter = max_iter # 迭代次数
self.X = np.zeros((self.pN, self.dim))+2 # 所有粒子的位置和速度
self.V = np.zeros((self.pN, self.dim

本文通过一个二维寻优实例探讨了粒子群优化算法的实现细节。重点对比了使用个体历史最优位置(p_best)与当前位置(X[i])更新全局最优解的效果差异,并分析了可能的原因。
最低0.47元/天 解锁文章
783

被折叠的 条评论
为什么被折叠?



