文章目录
- 一、遗传算法
- 二、deap
- 1.deap功能
- 2.deap例子
- 一个详细的关于deap使用的讲解例子
- 总结
- 参考链接
一、遗传算法
利用自然界物种遗传的理念,设计的一种最优解搜索算法。遗传算法以一种物种中的所有个体为对象,并利用随机化技术对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。
一个容易理解的遗传算法例子,作者以背包问题讲解遗传算法。简单例子搞懂遗传算法(genetic algorithm)
算法伪代码:
BEGIN:
i = 0; //进化种群代数
Initialize P(i); //初始化种群
Fitness P(i); //计算适宜值
While(not Terminate-Condition) //不满足终止条件时,循环
{
i ++; //循环
GA-Operation P(i); //交叉、变异操作
Fitness P(i); //计算适宜值
}
END //结束算法
算法步骤描述:
初始化:种群规模P,遗传代数N,交叉概率pc,变异概率pm,计数变量i=0;
(1) 生成初始种群。
(2) 计算初始种群中每个染色体的适宜值。
(3) i=i+1;如果i<=N,则生成赌轮,转步骤4;否则,转步骤9。
(4) 根据赌轮选择策略选择染色体生成基因池,即基因池中的染色体个数即为种群规模P。
(5) 根据交叉概率pc进行交叉操作,基因池中未进行交叉操作的直接复制到下一代。
(6) 根据变异概率pm,进行变异操作。
(7) 计算子代种群中每个染色体的适宜值。
(8) 子代种群取代父代种群,转步骤3。
(9) 计算种群中每个染色体对应路由数的网络延迟、出错率以及网络费用。按适宜值排序,适宜值最小的染色体即为求得的解。
二、deap
1.deap功能
各类遗传算法
遗传规划
进化策略
多目标优化
多种群之间的协作与竞争
并行计算
计算过程中设定检查点
设置基准模块,检验算法能力
支持粒子群算法、差分进化算法等
2.deap例子
代码如下(示例):给出deap的使用实例和讲解
import random
from deap import creator, base, tools, algorithms
creator.create("FitnessMax", base.Fitness, weights=(1.0,))//优化目标
creator.create("Individual", list, fitness=creator.FitnessMax)//个体生成
toolbox = base.Toolbox()//工具箱:注册参数信息:交叉,变异,保留个体,评价函数
toolbox.register("attr_bool", random.randint, 0, 1)//个体编码方式
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n=100)//个体编码
toolbox.register("population", tools.initRepeat, list, toolbox.individual)//创建初始种群
def evalOneMax(individual):
return sum(individual),
toolbox.register("evaluate", evalOneMax)//评价设置
toolbox.register("mate", tools.cxTwoPoint)//个体交叉
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)//个体编译
toolbox.register("select", tools.selTournament, tournsize=3)//选择新一代的种群
population = toolbox.population(n=300)//初始的群体
NGEN=40//遗传搜索
for gen in range(NGEN):
offspring = algorithms.varAnd(population, toolbox, cxpb=0.5, mutpb=0.1)
fits = toolbox.map(toolbox.evaluate, offspring)
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit
population = toolbox.select(offspring, k=len(population))
top10 = tools.selBest(population, k=10)
一个详细的关于deap使用的讲解例子
基于DEAP库的Python进化算法从入门到入土–(一)进化算法的基本操作与实现
总结
本文主要是我关于如何利用deap使用遗传算法的一个学习记录,项目实践中需要用到遗传算法,所以进行学习。