遗传算法python代码,采用二进制编码方法,利用遗传算法求函数

  遗传算法python代码,采用二进制编码方法,利用遗传算法求函数

  代码地址:https://github。com/郭俊007/binary _ SGA

  种群初始化:

  二进制_ SGA/人口_初始化/人口_初始化。巴拉圭

  #种群初始化函数

  def population_init(population,N,V,nbits):

  #自变量个数V并没有用到

  倒三角形人口[:]

  对于xrange(N)中的我:

  tempIndividual=[]

  对于n位中的j:

  tempVal=[]

  对于xrange(j)中的k:

  坦普瓦尔。追加(随机。randint(0,1))

  temp personal . append(临时值)

  population.append(临时个体)

  选择操作:(轮盘赌选择)

  二进制_ SGA/选择/选择。巴拉圭

  #!/usr/bin/env python

  #编码:UTF-8

  导入副本

  随机导入

  #轮盘赌选择法

  定义选择(人口,xbin):

  s=总和(xbin)

  温度=[k * 1.0/秒,用于系统的一些可执行文件中的k]

  temp2=[]

  s2=0

  对于k in temp:

  s2=s2 k

  temp2.append(s2)

  temp3=[]

  for _ in xrange(len(population)):

  r=random.random()

  对于xrange(len(temp2))中的我:

  如果r=temp2[i]:

  temp3.append(i)

  破裂

  temp4=[]

  temp5=[]

  对于温度3中的我:

  温度4。追加(复制。deepcopy(population[I])

  temp5.append(xbin[i])

  人口[:]=临时四

  xbin[:]=温度5

  交叉操作:(单点交叉)

  二元_ SGA/交叉/交叉。巴拉圭

  #二进制编码,单点交叉

  极好的交叉(人口、阿尔法、nbits):

  对于润智中的我(len(人口),2):

  对于润智中的j(len(nbits)):

  r=random.random()

  如果r:

  p=random.randint(1,nbits[j]-1)

  人口[i][j][p:],人口[i 1][j][p:]=人口[I 1][j][p:],人口[i][j][p:]

  变异操作:

  二进制_ SGA/突变/变异。巴拉圭

  极好的突变(人口、belta、nbits):

  对于润智中的我(len(人口)):

  对于润智中的j(len(nbits)):

  对于xrange(nbits[j])中的k:

  r=random.random()

  如果r贝尔塔:

  population[i][j][k]^=1

  二进制个体解码操作:

  binary_sga/decode /decode.py

  #种群个体解码

  def decode(population,population_real,minBinVal,maxBinVal,nbits):

  倒三角形人口_实际[:]

  def iner(valList):

  L=len(valList)

  s=0

  对于我在valList:

  s=s i*(2**(L-1))

  L=L-1

  返回s

  对于人口中的我:

  temp=[]

  对于我中的j:

  临时追加(iner(j))

  对于润智中的j(长度(温度)):

  temp[j]=temp[j]*(maxBinVal[j]-minBinVal[j])* 1.0/(2 * *(nbits[j])-1)minBinVal[j]

  人口_真实。追加(临时)

  测试函数部分:

  二进制_ SGA/函数/对象_乐趣。巴拉圭

  #对偶问题,转化为求最大值

  #二维拉斯特里金测试函数

  def object_fun(p):

  导入数学

  x=p[0]

  y=p[1]

  object _ value=20.0 x * * 2y * * 2-10.0 *(数学。cos(2 *数学。pi * x)数学。cos(2 *数学。pi * y))

  返回100.0-对象值

  #求最大值,无需转化

  #二维谢弗测试函数

  def object_fun(p):

  导入数学

  x=p[0]

  y=p[1]

  object _ value=0.5-((数学。罪恶(数学。sqrt(x * * 2y * * 2)))* * 2-0.5)/(1 0.001 *(x * * 2y * * 2))* * 2

  返回对象值

  主函数部分:

  binary_sga /sga.py

  N=200

  V=2

  nbits=(17,17)

  maxBinVal=(-5,-5)

  minBinVal=(5,5)

  人口=[]

  population_real=[]

  阿尔法=0.9

  贝尔塔=0.05

  #目标函数值列表

  xbin=[]

  定义per_run():

  人口初始化(人口N、V、nbits)

  对于xrange(200)中的我:

  decode(population,population_real,minBinVal,maxBinVal,nbits)

  eval(population_real,xbin)

  选择(群体,xbin)

  交叉(人口、阿尔法、国家比特)

  突变(人口、belta、nbits)

  decode(population,population_real,minBinVal,maxBinVal,nbits)

  eval(population_real,xbin)

  返回100.0-最大值(xbin)N为个体种群数。

  V为自变量个数。

  nbits各个自变量二进制编码的长度。

  maxBinVal各个自变量上限明宾瓦尔各个自变量下限。种群个体二进制编码列表人口。

  种群个体实数解码列表真实人口。阿尔法=0.9交叉概率。

  贝尔塔=0.05变异概率。

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

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