遗传算法 锦标赛,遗传算法中选择运算

  遗传算法 锦标赛,遗传算法中选择运算

  遗传算法,是最常用的解决优化问题的算法,是最早的群智能算法。遗传算法中主要包括,选择、交叉、变异算子,其中对脱氧核糖核酸个体的编码方式分为实数编码和二进制编码等。今日由于学习和工作需要对该算法进行了一些了解,对该算法中常用的竞赛选择方式做如下笔记:

  遗传算法中的竞赛选择方式是一种放回抽样,几元竞赛就是一次性在总体中取出几个个体,然后在这些个体中取出最优的个体放入保留到下一代种群的集合中。需要保存多少个体就重复此操作几次。

  以下为python2.7写的代码,已经测试过,共两个文件,可以通过修改mycmp.py中的比较函数以适应不同需求。

  锦标赛_选择。巴拉圭

  1 #!/usr/bin/env python

  2 #编码:UTF-8

  3随机导入

  四将数组作为铭牌导入

  5从mycmp导入mycmp

  6

  7

  8锦标赛方式选择,选择出个体编号

  9表示预测值{个体索引号:(值1,值2),}

  10键为索引号,从0开始价值。为元组,一般不超过两个元素。

  11

  12选择数字需要选择出的个体个数

  13 elementNum=2默认为二元竞赛选择

  14

  15 def tournament _ selection _ Dict(指示值预测,selectNum,elementNum=2):

  16 #个体索引列表

  17指示列表=范围(len(indicatevalueprediction))

  18 #选择出的个体序号列表

  19 remainIndicateList=[]

  20

  21 #构建列表[(索引号,(值1,值2)),]

  22指示值列表=指示值预测。项目()

  23

  24 #对列表排序,排序规则按个人需求定制,修改mycmp即可

  xrange(selectNum)中的我为25:

  26 tempList=random。样本(指示值列表,元素编号)

  27 tempList.sort(cmp=mycmp)

  28

  29 bestIndicate=tempList[0][0]

  30个剩下的。附加(最佳指示)

  31 ###返回选择的索引列表

  32返回剩余指示列表

  33

  34

  35 def tournament _ selection _ Matrix(指示值矩阵,selectNum,elementNum=2):

  36 #个体索引列表

  37表示列表=范围(表示值矩阵。形状[0])

  38 #选择出的个体序号列表

  39剩余指示列表=[]

  40

  xrange(selectNum)中的我为41:

  42 tempList=random。样本(指示列表,元素编号)

  43 temp matrix=指示值矩阵[tempList,]

  44

  45 tempMatrixToList=临时矩阵。要列出()

  46 tempMatrixToList=[(k[0],k[1:])for k in tempMatrixToList]

  47 tempMatrixToList.sort(mycmp)

  48

  49剩余指示列表。append(tempmatrix tolist[0][0])

  50返回剩余指示列表

  51

  52

  53 def tournament _ selection _ dict 2(表示数值预测,selectNum,elementNum=2):

  54 #个体索引列表

  55指标列表=范围(len(指标预测))

  56 #选择出的个体序号列表

  57剩余指示列表=[]

  58

  59 #构建列表[(索引号,(值1,值2)),]

  60指示值列表=指示值预测。项目()

  61

  62 #对列表排序,排序规则按个人需求定制,修改mycmp即可

  63表示值elist。排序(CMP=mycmp)

  64

  xrange(selectNum)中的我为65:

  66临时列表=[]

  67临时名单。扩展(随机。样本(指示列表,元素编号))

  68最佳指示=指示值列表[min(tempList)][0]

  69剩余指示列表。追加(最佳指示)

  70 ###返回选择的索引列表

  71返回剩余指示列表

  72

  73

  74如果__name__==__main__ :

  75 xN=20

  76 yN=3

  77选择数量=10

  78指示值预测={ 0:[1,2.1],1:[1,2.2],2:[1,2.3],3:[1,2.4],4:[1,2.5],5:[1,2.6],6:[1,2.7],7:[1,2.8],8:[1,2.9],9:[1,3.0],10:[0,2.1],11:[0,2.2],12:[0,2.3],13:[0,2.4],14:[1]

  79 random.seed(0)

  80 print tournament _ selection _ Dict(指明数值预测,selectNum)

  81打印-*50

  82 random.seed(0)

  83 print tournament _ selection _ dict 2(指明数值预测,selectNum)

  84打印-*50

  85表示价值矩阵=NP。矩阵([0,1,2.1],[1,1,2.2],[2,1,2.3],[3,1,2.4],[4,1,2.5],[5,1,2.6],[6,1,2.7],[7,1,2.8],[8,1,2.9],[9,1,3.0],[10,0,2.1],[10

  86 random.seed(0)

  87 print tournament _ selection _ Matrix(indicate value Matrix,selectNum)

  mycmp.py

  1 #!/usr/bin/env python

  2 #编码:UTF-8

  三

  4 ###列表比较运算符CMP

  5 ###第一个元素是升序,第二个元素是降序。

  6 def mycmp(左、右):

  7 #left是列表左边的元素,右边列表右边的元素

  8a=左[1]

  9 b=右[1]

  10

  11如果a[0] b[0]:

  12返回1

  13 elif a[0] b[0]:

  14返回-1

  15 elif a[1] b[1]:

  16返回1

  17 elif a[1] b[1]:

  18返回-1

  19其他:

  20返回0

  21

  22 if __name__==__main__ :

  23 data=[(0,(0,1)),(1,(1,0)),(2,(1,1))]

  24 data.sort(cmp=mycmp)

  25打印数据

  操作效果图:

  这个程序可以作为一个独立的模块来调用。具体代码地址如下:

  https://github.com/guojun007/tournament_selection

  转载请联系作者授权,否则将追究法律责任。

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

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