python编写PSO算法

来源:互联网 发布:mac版foxmail邮箱设置 编辑:程序博客网 时间:2024/06/05 18:19

关键在于赋值的关系:
浅赋值:对原来的引用
深度赋值:才是对值影响

#! /user/bin/env python#encoding=utf-8__author__ = 'chw'import timeimport numpy as npimport copyimport matplotlib.pyplot as pltstart=time.time()c1=2c2=2PopMax=100Vmax=PopMax/10SizePop=20D=2Maxgen=200Wmax=0.9Wmin=0.4pop=np.random.rand(SizePop,D)*2*PopMax-PopMaxv=np.random.rand(SizePop,D)*Vmax*2-Vmaxdef fun(x1,x2):    return x1**2+x2**2fitness=np.zeros((SizePop,1),dtype=float)for i in xrange(SizePop):    fitness[i]=fun(pop[i,0],pop[i,1])bestfitness=max(fitness)for i in xrange(SizePop):    if fitness[i]==bestfitness:        zbest=pop[i,:]        breakgbest=popfitnessgbest=fitnessfitnesszbest=bestfitness# yy=np.zeros((Maxgen,1),dtype=float)yy=np.random.rand(Maxgen,1)x=np.arange(Maxgen)for i in xrange(Maxgen):    if i==0:        w=Wmax    else:        w=Wmax-i*0.5/Maxgen    for j in xrange(SizePop):        v[j,:]=w*v[j,:]+c1*np.random.rand()*(gbest[j,:]-pop[j,:])+c2*np.random.rand()*(zbest-pop[j,:])        pop[j,:]=pop[j,:]+v[j,:]        for t in xrange(D):            if pop[j,t]>PopMax:                pop[j,t]=PopMax            if pop[j,t]<-PopMax:                pop[j,t]=-PopMax            if v[j,t]>Vmax:                v[j,t]=Vmax            if v[j,t]<-Vmax:                v[j,t]=-Vmax        fitness[j]=fun(pop[j,0],pop[j,1])    for j in xrange(SizePop):        if fitness[j]<fitnessgbest[j]:            gbest[j,:]=copy.deepcopy(pop[j,:])            fitnessgbest[j]=copy.deepcopy(fitness[j])    for j in xrange(SizePop):        if fitnessgbest[j]<fitnesszbest:            zbest=copy.deepcopy(gbest[j,:])            fitnesszbest=copy.deepcopy(fitnessgbest[j])    yy[i]=copy.deepcopy(fitnesszbest)print zbestprint fitnesszbestplt.figure()plt.plot(x,yy)plt.show()print time.time()-start# s1=[0,1,2]# s2=[2,3,4]# plt.figure()# plt.plot(s1,s2)# plt.show()

这里写图片描述
参考:http://blog.csdn.net/just_do_it_123/article/details/50927348
http://www.jb51.net/article/61902.htm

0 0
原创粉丝点击