Overview 程序概览
官方文档:http://deap.readthedocs.io/en/master/index.html
1. Types : 选择你要解决的问题类型,确定要求解的问题个数,最大值还是最小值
2. Initialization : 初始化基因编码位数,初始值,等基本信息
3. Operators : 操作,设计evaluate函数,在工具箱中注册参数信息:交叉,变异,保留个体,评价函数
4. Algorithm : 设计main函数,确定参数并运行得到结果
Types
# Types
from deap import base, creator
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
# weights 1.0, 求最大值,-1.0 求最小值
# (1.0,-1.0,)求第一个参数的最大值,求第二个参数的最小值
creator.create("Individual", list, fitness=creator.FitnessMin)
Initialization
import random
from deap import tools
IND_SIZE = 10 # 种群数
toolbox = base.Toolbox()
toolbox.register("attribute", random.random)
# 调用randon.random为每一个基因编码编码创建 随机初始值 也就是范围[0,1]
toolbox.register("individual", tools.initRepeat, creator.Individual,
toolbox.attribute, n=IND_SIZE)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
Operators
# Operators
# difine evaluate function
# Note that a comma is a must
def evaluate(individual):
return sum(individual),
# use tools in deap to creat our application
toolbox.register("mate", tools.cxTwoPoint) # mate:交叉
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.1) # mutate : 变异
toolbox.register("select", tools.selTournament, tournsize=3) # select : 选择保留的最佳个体
toolbox.register("evaluate", evaluate) # commit our evaluate
高斯变异:
这种变异的方法就是,产生一个服从高斯分布的随机数,取代原先基因中的实数数值。这个算法产生的随机数,数学期望当为当前基因的实数数值。
一个模拟产生的算法是,产生6个服从U(0,1)的随机数,以他们的数学期望作为高斯