当前位置:   article > 正文

粒子群算法的python代码实现_粒子生长树代码

粒子生长树代码

该代码所要解决的问题是求解函数z=3cos(xy)+x+y^2的最小值。代码如下所示:

import numpy as np
import math
import random
import matplotlib.pyplot as plt
class Particles:
    def __init__(self,num,d,iterMax,l1,l2,wMax,wMin,xMax,xMin,vMax,vMin,x,v):
        self.num=num  #粒子个数
        self.d=d      #粒子维数
        self.iterMax=iterMax    #最大迭代次数
        self.l1=l1     #学习因子
        self.l2=l2    #学习因子
        self.wMax=wMax    #惯性权重最大值
        self.wMin=wMin    #惯性权重最小值
        self.xMax=xMax    #位置最大值
        self.xMin=xMin    #位置最小值
        self.vMax=vMax    #速度最大值
        self.vMin=vMin    #速度最小值
        self.x=x    #位置
        self.v=v    #速度
    def init(self):
        self.x=np.random.rand(self.num,self.d)*(self.xMax-self.xMin)+self.xMin   #初始化位置
        self.v=np.random.rand(self.num,self.d)*(self.vMax-self.vMin)+self.vMin   #初始化速度

particles=Particles(100,2,1000,1.5,1.5,0.8,0.4,4,-4,1,-1,0,0)     #对象实例化
particles.init()
p=np.zeros((particles.num,particles.d))
p=particles.x
pbest=np.ones((particles.num,1))
pPosition=np.ones((particles.num,particles.d))
for i in range(particles.num):
    pbest[i]=3*math.cos(particles.x[i][0]*particles.x[i][1])+particles.x[i][0]+pow(particles.x[i][1],2)
    pPosition[i]=p[i]
gPosition=np.ones((1,particles.d))
gbest=float('inf')
for i in range(particles.num):
    if pbest[i]<gbest:
        gPosition=p[i]
        gbest=pbest[i]
gb=np.ones((1,particles.iterMax))
for i in range(particles.iterMax):
    for j in range(particles.num):
        w=particles.wMax-(particles.wMax-particles.wMin)*pow(i,2)/pow(particles.iterMax,2)
        particles.v[j]=w*particles.v[j]+random.random()*particles.l1*(pPosition[j]-particles.x[j])+random.random()*particles.l2*(gPosition-particles.x[j])
        particles.x[j]=particles.x[j]+particles.v[j]
        for ii in range(particles.d):
            if particles.v[j][ii]>particles.vMax or particles.v[j][ii]<particles.vMin:
                particles.v[j][ii]=random.random()*(particles.vMax-particles.vMin)+particles.vMin
            if particles.x[j][ii]>particles.xMax or particles.x[j][ii]<particles.xMin:
                particles.x[j][ii]=random.random()*(particles.xMax-particles.xMin)+particles.xMin
        value=3*math.cos(particles.x[j][0]*particles.x[j][1])+particles.x[j][0]+pow(particles.x[j][1],2)
        if value<pbest[j]:
            p[j]=particles.x[j]
            pbest[j]=value
            pPosition[j]=p[j]
        if pbest[j]<gbest:
            gPosition=p[j]
            gbest=pbest[j]
    gb[0][i]=gbest
print("函数最优值:"+(str)(gbest[len(gbest)-1]))
c=np.arange(0,particles.iterMax,1).tolist()
gbList=gb.tolist()
plt.plot(c,gbList[0])
plt.title("Fitness evolution curve")
plt.show()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

适应度进化曲线如下所示:
在这里插入图片描述
函数最小值如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/783579
推荐阅读
相关标签
  

闽ICP备14008679号