粒子群算法python实现: 简单(即单元)情况
粒子群算法
·
求解一个简单的函数
def function(x):
y=(x-1)**2+2 # y=(x-1)^2+2,显然最优解为1
return y
实现
import random
particle_num = 10 #粒子数目
position = [random.uniform(0, 5) for i in range(particle_num)] # 粒子初始位置
velocity = [random.uniform(0, 1) for i in range(particle_num)] # 粒子初始速度
particle_best = [0.0 for i in range(particle_num)] # 初始粒子最优解
global_best = 0.0 # 全局最优解
def update(position,velocity,particle_best,global_best,iter_num,W,n1,n2,max_velocity):
"""
状态更新
"""
for j in range(iter_num):
for i in range(len(position)):
# 计算每个粒子的最适应度,就是代个解看它的y是多少,如果y小于当前的最优解的值,就更新最优解为这个解
if function(position[i]) < function(particle_best[i]):
particle_best[i] = position[i]
# 更新全局最优解同理
if function(position[i]) < function(global_best):
global_best = position[i]
# 套速度更新的公式
velocity[i] = W * velocity[i] + n1 * random.random() * (particle_best[i] - position[i]) \
+ n2 * random.random() * (global_best - position[i])
# 限制速度,别让它飞了
if velocity[i] > max_velocity:
velocity[i] = max_velocity
elif velocity[i] < -max_velocity:
velocity[i] = -max_velocity
# 套位置更新的公式
position[i] = position[i] + velocity[i]
return global_best
W = 1 #惯性权重
n1 = 2 #认知学习因子
n2 = 2 #社会学习因子
max_velocity = 0.05 #速度限制
iter_num = 100 #迭代次数
result=update(position,velocity,particle_best,global_best,iter_num,W,n1,n2,max_velocity)
print(result) #返回是最优解,结果约为1

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)