这篇文章主要介绍了大蟒如何实现人工蜂群算法,帮助大家更好的利用大蟒进行数据分析,感兴趣的朋友可以了解下
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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。