粒子群算法python实现: 简单(即单元)情况

粒子群算法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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值