,,python实现人工蜂群算法

,,python实现人工蜂群算法

这篇文章主要介绍了大蟒如何实现人工蜂群算法,帮助大家更好的利用大蟒进行数据分析,感兴趣的朋友可以了解下

ABSIndividual.py

将numpy作为铭牌导入

导入目标功能

防抱死制动装置类个人:

'''

人工蜂群算法中的个体

'''

def __init__(self,vardim,bound):

'''

瓦尔迪姆:变量的维数

边界:变量的边界

'''

self.vardim=vardim

自我约束=约束

自我适应=0。

自我试验=0

定义生成(自身):

'''

为人工蜂群算法生成随机染色体

'''

len=self.vardim

rnd=np.random.random(size=len)

self.chrom=np.zeros(len)

对于xrange(0,len)中的我:

self.chrom[i]=self.bound[0,i] \

(自我约束[1,i] -自我约束[0,i]) * rnd[i]

定义计算健身(自我):

'''

计算染色体的适合度

'''

自我健康=目标功能格里芬克(

self.vardim,self.chrom,self.bound)

ABS.py

将numpy作为铭牌导入

从防抱死制动装置个人进口防抱死制动装置个人

随机导入

导入副本

将matplotlib.pyplot作为plt导入

类人工蜂群:

'''

人工蜂群算法的类

'''

def __init__(self,sizepop,vardim,bound,MAXGEN,params):

'''

人口规模

瓦尔迪姆:变量的维数

边界:变量的边界

MAXGEN:终止条件

参数:算法所需的参数,它是由[trailLimit,C]组成的列表

'''

self.sizepop=sizepop

self.vardim=vardim

自我约束=约束

self.foodSource=self.sizepop/2

自我MAXGEN=MAXGEN。

self.params=params

self.population=[]

自我。健身=NP。零((自我。尺寸pop,1))

self.trace=np.zeros((self .MAXGEN,2))

定义初始化(自身):

'''

初始化丙烯腈-丁二烯-苯乙烯的群体

'''

对于xrange(0,self.foodSource)中的我:

ind=ABSIndividual(self.vardim,self.bound)

ind.generate()

自我.人口.附加

定义评估(自我):

'''

评估人口的健康状况

'''

对于xrange(0,self.foodSource)中的我:

自我。人口[我].计算适合度()

自我健康=自我人口。健康

def employedBeePhase(自身):

'''

就业蜂阶段

'''

对于xrange(0,self.foodSource)中的我:

k=np.random.random_integers(0,self.vardim - 1)

j=np.random.random_integers(0,self.foodSource - 1)

而j==i:

j=np.random.random_integers(0,self.foodSource - 1)

VI=副本。深度复制(自我。人口[I])

#六。chrom=VI。chrom NP。随机的。统一(-1,1,self.vardim) *(

人口[j].chrom) np.random.uniform(0.0,self.params[1],self。vardim)*(自我。最好的。chrom-VI。chrom)

#对于xrange中的k(0,self.vardim):

# if vi.chrom[k] self.bound[0,k]:

#六。chrom[k]=自约束[0,k]

# if vi.chrom[k] self.bound[1,k]:

# vi.chrom[k]=自约束[1,k]

vi.chrom[

k]=np.random.uniform(low=-1,high=1.0,size=1)*(VI。chrom[k]-self。人口[j].铬[k])

if vi.chrom[k] self.bound[0,k]:

vi.chrom[k]=自约束[0,k]

如果六。chrom[k]自束缚[1,k]:

vi.chrom[k]=自束缚[1,k]

六。计算健身()

if vi.fitness self.fitness[fi]:

自我人口

自我健康

如果六。健身自我最佳健身:

自我最好=vi

六。计算健身()

if vi .健身自我健身[i]:

自我人口

自我健康

如果六。健身自我最佳健身:

自我最好=vi

否则:

自我。人口[我].试验=1

def onlookerBeePhase(self):

'''

旁观者蜜蜂阶段

'''

accu健身=NP。零((自我。食物来源,1))

maxFitness=np.max(自我健身)

对于xrange(0,self.foodSource)中的我:

accu fitness[I]=0.9 *自我。健身[I]/最大健身0.1

对于xrange(0,self.foodSource)中的我:

对于xrange(0,self.foodSource)中的fi:

r=random.random()

如果r accuFitness[i]:

k=np.random.random_integers(0,self.vardim - 1)

j=np.random.random_integers(0,self.foodSource - 1)

而j==fi:

j=np.random.random_integers(0,self.foodSource - 1)

vi=copy.deepcopy(自我群体[菲])

#六。chrom=VI。chrom NP。随机的。统一(-1,1,self.vardim) *(

人口[j].chrom) np.random.uniform(0.0,self.params[1],self。vardim)*(自我。最好的。chrom-VI。chrom)

#对于xrange中的k(0,self.vardim):

# if vi.chrom[k] self.bound[0,k]:

#六。chrom[k]=自约束[0,k]

# if vi.chrom[k] self.bound[1,k]:

# vi.chrom[k]=自约束[1,k]

vi.chrom[

k]=np.random.uniform(low=-1,high=1.0,size=1)*(VI。chrom[k]-self。人口[j].铬[k])

if vi.chrom[k] self.bound[0,k]:

vi.chrom[k]=自约束[0,k]

如果六。chrom[k]自束缚[1,k]:

vi.chrom[k]=自束缚[1,k]

六。计算健身()

if vi.fitness self.fitness[fi]:

自我人口

自我健康

如果六。健身自我最佳健身:

自我最好=vi

否则:

自我。人口[菲].试验=1

破裂

定义侦察阶段(自我):

'''

侦察蜂阶段

'''

对于xrange(0,self.foodSource)中的我:

if self.population[i].trials self.params[0]:

自我。人口[我].生成()

自我。人口[我].试验次数=0

自我。人口[我].计算适合度()

自我健康=自我人口。健康

定义求解(自身):

'''

丙烯腈-丁二烯-苯乙烯算法的进化过程

'''

self.t=0

self.initialize()

自我评估()

best=np.max(自我健身)

bestIndex=np.argmax(自我健身)

自我。最佳=复制。深度复制(自我。人口[最佳指数])

self.avefitness=np.mean(自我健康)

self.trace[self.t,0]=1-self。最好的。健身)/自我。最好的。健康

self.trace[self.t,1]=(1-self。ave健身)/自我。ave健身

打印('第%d代:最佳函数值是:% f;平均函数值是% f"%(

self.t,self.trace[self.t,0],self.trace[self.t,1])

而自我.MAXGEN - 1:

self.t=1

self.employedBeePhase()

self.onlookerBeePhase()

self.scoutBeePhase()

best=np.max(自我健身)

bestIndex=np.argmax(自我健身)

如果最好的自己。最好的。健身:

自我。最佳=复制。深度复制(自我。人口[最佳指数])

self.avefitness=np.mean(自我健康)

self.trace[self.t,0]=1-self。最好的。健身)/自我。最好的。健康

self.trace[self.t,1]=(1-self。ave健身)/自我。ave健身

打印('第%d代:最佳函数值是:% f;平均函数值是% f"%(

self.t,self.trace[self.t,0],self.trace[self.t,1])

打印('最佳函数值是:% f;'% self.trace[self.t,0])

打印"最佳解决方案是:"

打印自我最佳chrom

self.printResult()

定义打印结果(自身):

'''

绘制丙烯腈-丁二烯-苯乙烯算法的结果

'''

x=np.arange(0,self .MAXGEN)

y1=self.trace[:0]

y2=self.trace[:1]

plt.plot(x,y1,' r ',label='最佳值)

plt.plot(x,y2,' g ',label='平均值)

plt.xlabel('迭代)

plt.ylabel('函数值)

plt.title("用于函数优化的人工蜂群算法")

plt。图例()

plt.show()

运行程序:

if __name__=='__main__ ':

bound=np.tile([[-600],[600]],25)

abs=ABS(60,25,bound,1000,[100,0.5])

abs.solve()

目标函数见简单遗传算法-蟒蛇实现。

以上是python实现人工蜂群算法的详细内容。更多关于python的人工蜂群算法,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: