遗传算法(Python) #4 DEAP框架入门

遗传算法(Python) #4 DEAP框架入门

1. DEAP框架简介

DEAP(Distributed Evolutionary Algorithms in Python)是一个热门的Python进化算法框架,我们可以用这个框架在Python内实现遗传算法的应用,本文将介绍DEAP中主要模块的定义与用法,而下一期我们将用DEAP框架解决OneMax问题。

2. base 模组

base模组内有Toolbox和Fitness两个类,一般我们用Toolbox来创建方程,将所有遗传算法的方程都储存于Toolbox内有利于编程的封装;Fitness类用来储存个体适应度,如果要完整使用DEAP框架,必须同时使用Toolbox和Fitness。

2.1 Toolbox

Toolbox主要用来封装方程,其用法如下

from deap import base
def get_abc(a,b,c):
     print(f"a:{a}; b:{b}; c:{c}")

tools = base.Toolbox()
tools.register("get", get_abc, 1,c=3) # register function

tools.get(2) # once registered, functions can be used directly in tools
>>> a:1; b:2; c:3

由上例可见,register的参数分别为:原函数的别名;原函数;原函数的参数(可为关键或非关键参数)。使用Toolbox可以大大减少代码量,并通过将其他函数封装进Toolbox使代码简单明了。

2.2 Fitness

Fitness主要和creator模组一起使用来初始化个体的适应度,具体内容将在下一期介绍。

3. creator 模组

我们一般使用creator.create来创建个体与种群。create方程可以拓展其他的类,并同时添加特性(attribute),示例如下:

from deap import creator
creator.create("styledText",str,size=9,style=dict)
# creator.styledText is almost equivalent to
class styledText(str):
    size = 9
    def __init__(self):
        self.style = dict()

4. tools 模组

tools模组包含一系列已定义好的方程,具体内容如下(来源:DEAP官网):
遗传算法(Python) #4 DEAP框架入门_第1张图片
其中初始化(Initialization)方程可以让我们快速构建个体与种群:

例: 用initRepeat创建长度为4的列表,每一个列表上的元素为0或1

import random
from deap import tools
random.seed(39)
def randomZeroOne():
    return(random.randint(0,1))

individual = tools.initRepeat(list,randomZeroOne,4)
print(individual)
>>> [0, 1, 1, 0]

例:用initIterate创建长度为4的列表,列表内容为0-3顺序随机的整数

import random
from deap import tools
random.seed(39)
def random4():
    return(random.sample(range(4),4))

individual = tools.initIterate(list,random4)
print(individual)
>>> [1, 3, 2, 0]

交叉(Crossover),突变(Mutate),选择(Selection)为具体的遗传算法方法,脱离了具体例子很难解释,这些方法的应用将在今后的文章中逐一介绍,若对这些概念不了解的,可以查看本系列第二期。

5. 其他模组

DEAP框架内还有algorithms模组,和用以统计每一代数据的tools.Statistics和tools.Logbook,这些内容将在以后的文章中注意介绍。

6.小结

本期文章介绍了DEAP框架内的主要模组/方程,下一期将使用DEAP框架解决OneMax问题,并进一步展示DEAP框架的应用。

你可能感兴趣的:(遗传算法,python,算法)