遗传算法的应用实例python实现,量子遗传算法Python
1 GEAT PY库的由来GEAT PY库是由华南农业大学、暨南大学、华南理工大学等一群精致的铃铛开发的工具箱(遗传算法工具箱),性能超高,通用性强,可以轻松应用到实际工程项目中,让用户快速使用进化算法。详情见http://geatpy.com/index.php/home/,官网。
Geatpy库的用途GEAT PY是一个高性能的实用进化算法工具箱,它提供了许多对已实现的进化算法进行各种操作的功能,如初始化种群、选择、交叉、变异、生成多目标优化参考点、非支配排序、计算GD、IGD、HV等多目标优化指标等。
3案例GEAT Py库3.1带约束的单目标优化问题
3.1.1 Python程序问题描述程序导入numpy为NP导入geat py为ea类我的问题(ea。问题):#继承问题的父类def _ _ init _ _(self):name= my problem #初始化名称(函数名,可以随意设置)M=1 #初始化M(目标维度)maxormins=[-1] #初始化目标最小和最大标记列表,1:min;-1: maxDim=3 #初始化Dim(决策变量维数)varTypes=[0] * Dim #初始化决策变量类型,0:连续;1:离散lb=[0,0,0] #决策变量下界ub=[1,1,2] #决策变量上界lbin=[1,1,0] #决策变量下界ubin=[1,1,0] #决策变量上界#调用父类构造方法完成实例化ea.problem. _ _ Maxormins,dim,vartypes,lb,ub,lbin,ubin) def aim func (self,pop): #目标函数,pop为传入人口对象Vars=pop。Phen #得到决策变量矩阵x1=Vars[:[0]] #取出第一列得到列向量x2=Vars[:[1]] #取出第二列得到列向量x3=Vars[:[2]] #取出第三列得到所有个体的列向量x3 #计算目标函数值,赋值ObjV属性pop。ObjV=4*x1 2*x2 x3 #到pop人口对象,采用可行性规则处理约束,生成人口个体违反度矩阵POP。cv=np.hstack ([2 * x1x2-1,x12 * x3-2, np.abs(x1 x2 x3 - 1)]) # 1.2.3第一个约束主程序import numpy as NP import geat py as ea from my problem import my problem ========================实例化问题对象===============Blem=my problem()# 实例化问题对象 ========================人口设置===============人口大小字段=ea.crtfld(编码,problem.vartypes,problem.ranges,problem.borders) #创建区域描述符人口=ea.population(编码,字段,NIND) #实例化人口对象(此时人口还没有真正初始化只是为了生成一个人口对象)“”====================算法参数设置=====================人口)#实例化一个算法模板对象myAlgorithm。 MAXGEN=1000 #最大遗传代数myAlgorithm.mutOper.F=0.5 #设置变异比例因子myAlgorithm.recOper.XOVR=0.5 #设置交叉概率myAlgorithm.drawing=1 # 设置绘制方法 ================调用种群进化的算法模板========================================= Var _ trace]=my algorithm . run()#执行算法模板# 输出结果best _ gen=np.argmax (obj _ trace [:1]) #记录哪代best_ObjV=obj_trace[best_gen,1]print(最优目标函数值为:%s%(best_ObjV))print(最优决策变量值为:)for I in range(var _ trace . shape[1]):print(var _ trace[best _ gen,I])print(有效进化代数:%s%(obj_trace.shape[0]))print(最优代是%的
3.2.1 Python程序问题描述程序import numpy as NP import geat py as ea class my Problem(ea . Problem):#继承问题的父类def _ _ init _ _(self):name= bnh # initialize name(函数名,可以随意设置)M=2 #初始化M(目标维度)maxormins=[1] * M #初始化maxormins Dim=2 #初始化Dim(决策变量维度)varTypes=[0] * Dim #初始化varTypes(决策变量的类型,0:实数;1: integer) lb=[0] * Dim #决策变量下界ub=[5,3] #决策变量上界lbin=[1] * Dim #决策变量下界ubin=[1] * Dim #决策变量上界#调用父类构造方法实例化ea.Problem.__init__(self Name,m,maxormins,Dim,vartypes,lb,ub,lbin,ubin) def aim func (self,pop): #目标函数Vars=pop。Phen #获取决策变量矩阵x1=Vars[:[0]] x2=Vars[:[1]]f1=4 * x1 * * 24 * x2 * * 2 F2=(x1-5)* * 2(x2-5)* * 2 #采用可行性法则处理约束pop . cv=NP . h stack([(x1-5)* * 2 x2 * * 2-25,-(x1-8)* * 2-(x2-3)* * 2 7.7))#将获得的目标函数值赋给ObjV pop。ObjV=np.hstack([f1,F2]) def calBest(self): #计算全局最优解N=10000 #得到10000个实前沿点x1=np.linspace(0,5,N)x2=x1 . copy()x2[x1=3]=3 return NP . v stack((4 * x1 * * 2 4 * x2 * * 2,(x1-5)**2 (x2-5)**2))。主程序导入工具ea #导入工具从我的问题导入我的问题# 导入自定义问题接口 ====================实例化问题对象============================== 实例化问题对象 ====================================================problem . vartypes,problem.ranges,problem.borders) #创建区域描述符population=ea . population(encoding,field,nind) #实例化人口对象(此时人口还没有真正初始化, 只是为了生成一个人口对象)“”====================算法的参数设置===========================人口)#实例化一个算法模板对象myAlgorithm。 MAXGEN=200 #最大遗传代数myAlgorithm.drawing=1 # Set ttdhk画图方法 ================调用算法模板进行种群进化==========NDSet是种群类的对象。NDSet。ObjV是最优解个体的目标函数值;NDSet。Phen是相应的决策变量值。详见Population.py中人口类的定义。
NDSet=myAlgorithm.run() #执行算法模板,得到非支配种群NDSet.save() #把结果保存到文件中# 输出打印(用时:%f秒%(myAlgorithm.passTime))打印(评价次数:%d次%(myAlgorithm.evalsNum))打印(非支配个体数:%d个%(NDSet.sizes))打印(单位时间找到ttdhk前沿点个数:%d个%(int(ndset。大小//我的算法。passtime)))#计算指标PF=problem.getBest() #获取真实前沿如果脉波频率(Pulse Frequency的缩写)不是没有人和NDSet.sizes!=0: GD=ea.indicator.GD(NDSet .ObjV,PF) #计算绿色发展指标IGD=ea.indicator.IGD(NDSet .ObjV,PF) #计算网络网关设备指标HV=ea.indicator.HV(NDSet .ObjV,PF) #计算超速(超高速)指标间距=ea。指示器。间距(NDSet .ObjV) #计算间隔指标print( GD:% f % GD)print( IGD:% f % IGD)print( HV:% f % HV)print( Spacing:% f % Spacing) ===============进化过程指标追踪分析======================== 如果脉波频率(Pulse Frequency的缩写)不为None:metricName=[ IGD ],[ HV ][NDSet _ trace,Metrics]=ea。指示器。moea _ tracking(我的算法。pop _ trace,PF,metric name,problem.maxormins) #绘制指标追踪分析图ea.trcplot(Metrics,labels=metricName,titles=metricName) 4参考本文为学习笔记,参考网站为Geatpy官网,网址如下。
首页:http://geatpy。com/index。PHP/home/
文档:http://geatpy。com/index。PHP/details/
有问题请加群:774515086
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。