遗传算法 锦标赛,遗传算法中选择运算
遗传算法,是最常用的解决优化问题的算法,是最早的群智能算法。遗传算法中主要包括,选择、交叉、变异算子,其中对脱氧核糖核酸个体的编码方式分为实数编码和二进制编码等。今日由于学习和工作需要对该算法进行了一些了解,对该算法中常用的竞赛选择方式做如下笔记:
遗传算法中的竞赛选择方式是一种放回抽样,几元竞赛就是一次性在总体中取出几个个体,然后在这些个体中取出最优的个体放入保留到下一代种群的集合中。需要保存多少个体就重复此操作几次。
以下为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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。