遗传算法,是最常用的解决优化问题的算法,是最早的群智能算法。遗传算法中主要包括,选择、交叉、变异算子,其中对DNA个体的编码方式分为实数编码和二进制编码等。今日由于学习和工作需要对该算法进行了一些了解,对该算法中常用的竞赛选择方式做如下笔记:
遗传算法中的竞赛选择方式是一种放回抽样,几元竞赛就是一次性在总体中取出几个个体,然后在这些个体中取出最优的个体放入保留到下一代种群的集合中。需要保存多少个体就重复此操作几次。
以下为python2.7写的代码,已经测试过,共两个文件,可以通过修改mycmp.py中的比较函数以适应不同需求。
tournament_selection.py
1 #!/usr/bin/env python
2 #encoding:UTF-8
3 importrandom4 importnumpy as np5 from mycmp importmycmp6
7 """
8 锦标赛方式选择, 选择出个体编号9 indicateValueDict {个体索引号:(Value1, Value2), }10 key为索引号,从0开始。value为元组,一般不超过两个元素。11
12 selectNum 需要选择出的个体个数13 elementNum=2 默认为二元竞赛选择14 """
15 def tournament_selection_Dict(indicateValueDict, selectNum, elementNum=2):16 #个体索引列表
17 indicateList=range(len(indicateValueDict))18 #选择出的个体序号 列表
19 remainIndicateList=