多平台统一管理软件接口,如何实现多平台统一管理软件接口
444
2022-09-03
标准遗传算法(二进制编码 python实现)(遗传算法的编码与解码)
代码地址:population_init(population, N, V, nbits): #自变量个数V并没有用到 del population[:] for i in xrange(N): tempIndividual=[] for j in nbits: tempVal=[] for k in xrange(j): tempVal.append(random.randint(0, 1)) tempIndividual.append(tempVal) population.append(tempIndividual)
选择操作:(轮盘赌选择)
binary_sga/selection/selection.py
#!/usr/bin/env python#encoding:UTF-8import copyimport random#轮盘赌选择法def selection(population, xbin): s=sum(xbin) temp=[k*1.0/s for k in xbin] temp2=[] s2=0 for k in temp: s2=s2+k temp2.append(s2) temp3=[] for _ in xrange(len(population)): r=random.random() for i in xrange(len(temp2)): if r<=temp2[i]: temp3.append(i) break temp4=[] temp5=[] for i in temp3: temp4.append(copy.deepcopy(population[i])) temp5.append(xbin[i]) population[:]=temp4 xbin[:]=temp5
交叉操作:(单点交叉)
binary_sga/crossover/crossover.py
#二进制编码,单点交叉def crossover(population, alfa, nbits): for i in xrange(len(population), 2): for j in xrange(len(nbits)): r=random.random() if r 变异操作: binary_sga/mutation/mutation.py def mutation(population, belta, nbits): for i in xrange(len(population)): for j in xrange(len(nbits)): for k in xrange(nbits[j]): r=random.random() if r 二进制个体解码操作: binary_sga/decode/decode.py #种群个体解码def decode(population, population_real, minBinVal, maxBinVal, nbits): del population_real[:] def iner(valList): L=len(valList) s=0 for i in valList: s=s+i*(2**(L-1)) L=L-1 return s for i in population: temp=[] for j in i: temp.append(iner(j)) for j in xrange(len(temp)): temp[j]=temp[j]*(maxBinVal[j]-minBinVal[j])*1.0/(2**(nbits[j])-1)+minBinVal[j] population_real.append(temp) 测试函数部分: binary_sga/function/object_fun.py #对偶问题, 转化为求最大值#二维 Rastrigin测试函数def object_fun(p): import math x=p[0] y=p[1] object_value=20.0+x**2+y**2-10.0*(math.cos(2*math.pi*x)+math.cos(2*math.pi*y)) return 100.0-object_value"""#求最大值,无需转化#二维 Schaffer测试函数def object_fun(p): import math x=p[0] y=p[1] object_value =0.5-((math.sin( math.sqrt(x**2+y**2) ))**2-0.5)/(1+0.001*(x**2+y**2))**2 return object_value""" 主函数部分: binary_sga/sga.py N=200V=2nbits=(17, 17)maxBinVal=(-5, -5)minBinVal=(5, 5)population=[]population_real=[]alfa=0.9belta=0.05#目标函数值列表xbin=[]def per_run(): population_init(population, N, V, nbits) for i in xrange(200): decode(population, population_real, minBinVal, maxBinVal, nbits) eval_fun(population_real, xbin) selection(population, xbin) crossover(population, alfa, nbits) mutation(population, belta, nbits) decode(population, population_real, minBinVal, maxBinVal, nbits) eval_fun(population_real, xbin) return 100.0-max(xbin) N为个体种群数。 V为自变量个数。 nbits 各个自变量二进制编码的长度。 maxBinVal 各个自变量 上限。 minBinVal 各个自变量 下限。 种群个体 二进制编码 列表 population。种群个体 实数解码 列表 population_real。 alfa=0.9 交叉概率。belta=0.05 变异概率。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~