DEAP库文档教程二-----创建类型

本节将展示如何通过creator创建类型以及如何使用toolbox进行初始化。

1、Fitness

已经提供的Fitness类是一个抽象类,它需要weight来使得它成为一个函数。一个最小化的适应度是通过负权重构建的,而一个最大化适应度则需要正权重。

creator.create("FitnessMin",base.Fitness,weights=(-1.0,))

creat()函数至少需要两个元素,一个是别名,另一个是它基于的类(在上例中为“FitnessMin”和“base.Fitness”)。任何序列元素都会对类的属性产生影响。在具体的Fitness文档中,weights属性一定是一个元组,这样才可以使得多目标和单目标适应度可以保持一致。

2、Individual

主要说明如何使用creator创建一些个体并且使用Toolbox对它们进行初始化

2.1、 List of Floats

我们要创建的第一个个体将是一个简单的包含float的list。为了去产生这种个体,我们需要创建一个Individual class,使用creator将会与标准list类型建立联系,并且将会与fitness建立联系(每个individual对应其fitness)。

下面介绍一个新的register对象,它用于将deap包中所带方法与要编写的演化算法进行“固定”(包括初始化、操作方法以及适应度函数的计算)。register存在于base.Toolbox中。因此在使用时首先要调用base.Toolbox(),然后再对register进行调用。

DEAP库文档教程二-----创建类型_第1张图片

register()至少需要两个参数,一个alias和一个分配到alias的函数。任何的序列参数会被叫做functools.partial()进行传递到函数当中。在toolbox中创造了两个alias,第一个重定向到random.random()函数,第二个是一个initRepeat()函数,将它容器中的元素填充到creator.Individual class中,它对toolbox.attr_float()函数的func参数根据IND_SIZE(这里的n)进行重复。

        穿插介绍initRepeat()         重复调用函数func n次,并在容器类型的容器中返回结果

deap.tools.initRepeat(container, func, n)

Parameters:
  • container – The type to put in the data from func.
  • func – The function that will be called n times to fill the container.
  • n – The number of times to repeat func.
Returns:

An instance of the container filled with data from func.

   穿插介绍initIterate()  调用函数容器,将可迭代项作为其唯一参数。迭代必须由方法或对象生成器返回。

Parameters:
  • container – The type to put in the data from func.
  • generator – A function returning an iterable (list, tuple, …), the content of this iterable will fill the container.
Returns:

An instance of the container filled with data from the generator.

DEAP库文档教程二-----创建类型_第2张图片

2.2、Permutation(排列)

排列表示的个体几乎类似于一般列表个体。事实上,它们都继承自基本列表类型。唯一的区别是,我们需要生成一个随机排列,并将该排列提供给个体,而不是用一系列浮点来填充列表。

DEAP库文档教程二-----创建类型_第3张图片

解释说明:random.sample随机采样函数,距离,random.sample([1,2,4,6,7],1)就是从列表中随机采1个样本出来。那这里的列表本身为【0,1,2...IND_SIZE】共计IND_SIZE个数,这里需要一次性随机采样取出IND_SIZE个,意味着是列表中的所有元素需要全部取出,故而形成随机打乱的一个排序。

注解:register的individual其中,individual为别名,tools.initIterate为分配到individual的函数,其中tools.initIterate为种群初始化函数,已在上述介绍,这个函数同样可以有2个参数,一个为容器container,一个为生成器generator。刚好对应上。

DEAP库文档教程二-----创建类型_第4张图片

以下的类型还有很多,大家可以自行学习。

你可能感兴趣的:(官方文档翻译,deap,教程)