学习python实现粒子群算法的问题

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

学习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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值