简易粒子群算法求解目标函数最小值附python代码

我是小白

 

本程序结束条件设定为迭代次数

vscode代码如下:小白写的比较繁琐QAQ

#粒子群算法
import random
#粒子群
N=3#种群数量
step=5#迭代次数

#step1 初始化
fout=[]#目标函数输出值
xout=[]#储存坐标值
pbest=[]
v=[]
gbest=[]


for i in range(N):
    v1=random.randint(-10,10)
    v2=random.randint(-10,10)
    x1=random.randint(-10,10)
    x2=random.randint(-10,10)
    f=x1**2+x2**2
    fout.append(f)
    pbest.append([x1,x2])
    xout.append([x1,x2])
    v.append([v1,v2])
index=(fout.index(min(fout)))
gbest.append(pbest[index])
print(f'初始化后的gbest为{gbest}')

#根据自身的历史最优位置和全局的最优位置,更新每个粒子的速度和位置
w=0.5#权重
c=2#学习系数
r=random.randint(0,1)
count=0#迭代计数
while count < step:
    count=count+1

    #更新所有变量
    for i in range(N):
        v[i][0]=w*v[i][0]+c*r*(pbest[i][0]-xout[i][0])+c*r*(gbest[0][0]-xout[i][0])
        v[i][1]=w*v[i][1]+c*r*(pbest[i][1]-xout[i][1])+c*r*(gbest[0][1]-xout[i][1])
        xout[i][0]=xout[i][0]+v[i][0]
        xout[i][1]=xout[i][1]+v[i][1]
    print(f'第{count}次迭代时候的v为{v},xout为{xout}')
    #评估粒子的适应度函数值
    for i in range(N):
        if xout[i][0]**2+xout[i][1]**2<fout[i]:
            fout[i]=xout[i][0]**2+xout[i][1]**2
            pbest[i][0]=xout[i][0]
            pbest[i][1]=xout[i][1]
        else:
            fout[i]=fout[i]
            pbest[i][0]=pbest[i][0]
            pbest[i][1]=pbest[i][1]
    index=(fout.index(min(fout)))
    gbest.clear()
    gbest.append(pbest[index])
    print(f'第{count}次的迭代的gbest值为{gbest},此时最优值为{min(fout)}')








    
    

运行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值