种群
- 居住在一个地方的一群特定种类的人或动物
- 种群是解决问题的一组潜在的方法(解)
- 从中抽取样本进行统计测量的一组个体、物体或物品(统计数据)
初始种群
种群的规模通常不会随着演化算法而改变。通常在迭代过程中始终保持一定数量。按照成员之间关系划分为合作种群和竞争种群
- 合作种群通常以固定规模开始,不会添加或者删除新成员
- 竞争种群通过不断迭代也就是产生后代方式,但还是保持种群数量不变
种群成员之间关系
种群成员之间的竞争
- 遗传算法和遗传编程
通过评估,得分高的个体参与交配繁衍下一代,处理共同繁衍下一代成员之间没有直接合作。也有可能随机选取评分高直接选择到到下一代。
种群成员之间的合作
- 粒子种群优化和蚁群优化是合作算法的两个例子
合作迭代并不是用新的一代来取代先前的种群,每次迭代结束,所有潜在的解都会进行协作并调整参数
对种群计分
也就是设计一个函数用于评估个体对环境的适应度。
从种群中选择
截断选择
def truncate_select(breeding_ratio,sorted_population):
sort(sorted_population)
# 确定繁殖种群的大小
count = len(sorted_population) * breeding_ratio
# 获得一个均匀分布的(所有数字都有相同的概率)0和计数之间的单个随机数
index = uniform_random(0,count)
return sorted_population[index]
# 为了提高效率,应该把排序移到选择功能之外,对你要执行的每一批选择进行一次排序。
复制代码
联赛选择
由于算法执行的效率以及易实现的的特点,联赛赛选择算法是遗传算法中最流行的选择策略。实际应用中的确此策略比基本的轮盘赌效果要好些。这个策略也很直观,就是我们再整个种群中抽取 n 个个体,让他们进行竞争(联赛标赛),抽取其中的最优的个体。参加锦标赛的个体个数成为 tournament size
。通常当 n= 2 便是最常使用的大小,也称作Binary Tournament Selection.
# 以指定的轮数进行锦标赛选择。高分被认为是理想的(最大化)
def tourname_select(rounds,population):
# 没有被选中的
champ = null
for x from 0 to rounds:
contender = uniform_random(population)
if champ is null:
champ = contender
# 适应评估高分胜出更新 champ
else if contender.score > champ.sorce
champ = contender
return champ
复制代码