基础

The base 模块提供了构建进化算法的基本结构。它包含了 Toolbox,用于存储进化操作符,以及一个虚拟的 Fitness 类,作为任何个体适应度成员的基类。

工具箱

class deap.base.Toolbox[源代码]

一个包含进化操作符的工具箱。首先,工具箱包含一个 clone() 方法,该方法复制传递给它的任何元素,此方法默认使用 copy.deepcopy() 函数。以及一个 map() 方法,该方法将作为第一个参数传递的函数应用于作为后续参数传递的可迭代对象的每一项,此方法默认使用 map() 函数。您可以使用 register() 方法将任何其他函数填充到工具箱中。

工具箱的具体用法在 创建类型 教程中展示了初始化过程,在 运算符和算法 教程中展示了工具容器的使用。

register(alias, method[, argument[, ...]])[源代码]

在工具箱中以 alias 名称注册一个 函数。您可以提供默认参数,这些参数将在调用注册函数时自动传递。固定的参数可以在函数调用时被覆盖。

参数:
  • alias – 操作符在工具箱中将使用的名称。如果别名已经存在,它将覆盖已经存在的操作符。

  • function – 别名所引用的函数。

  • argument – 一个或多个参数(以及关键字参数),在调用时自动传递给注册的函数,可选。

以下代码块是工具箱使用方法的一个示例。:

>>> def func(a, b, c=3):
...     print a, b, c
...
>>> tools = Toolbox()
>>> tools.register("myFunc", func, 2, c=4)
>>> tools.myFunc(3)
2 3 4

注册的函数将被赋予属性 __name__ 设置为别名,并且 __doc__ 设置为原始函数的文档。如果存在,__dict__ 属性也将用原始函数的实例字典进行更新。

unregister(alias)[源代码]

从工具箱中注销 别名

参数:

alias – 要从工具箱中移除的运算符名称。

decorate(alias, decorator[, decorator[, ...]])[源代码]

使用指定的 装饰器 装饰 别名别名 必须是当前工具箱中已注册的函数。

参数:
  • alias – 要装饰的运算符的名称。

  • decorator – 一个或多个函数装饰器。如果提供了多个装饰器,它们将按顺序应用,最后一个装饰器将装饰所有其他装饰器。

备注

使用工具箱装饰函数会使其不可序列化,并在序列化时产生错误。尽管这一限制在大多数情况下不相关,但它可能会影响多处理等分布式环境。函数仍然可以在添加到工具箱之前手动装饰(使用@符号)以使其可序列化。

健身

class deap.base.Fitness([values])[源代码]

适应度是衡量解决方案质量的一个指标。如果提供了 values 作为元组,适应度将使用这些值进行初始化,否则它将是空的(或无效的)。

参数:

values – 适应度的初始值作为元组,可选。

适应度可以使用 >, <, >=, <=, ==, != 进行比较。这些运算符的比较是按字典顺序进行的。最大化与最小化通过 weights 和适应度 values 之间的乘法来处理。如果适应度在额外元素之前相等,则比较可以在不同大小的适应度之间进行,较长的适应度将被视为优于较短的适应度。

创建类型 教程中创建了不同类型的适应性。

备注

在比较被**最小化**的适应度值时,a > b 将返回 True 如果 ab 更小

dominates(other, obj=slice(None, None, None))[源代码]

如果 self 的每个目标都不比 other 的相应目标严格差,并且至少有一个目标严格更好,则返回 true。

参数:

obj – 切片指示在哪些目标上进行支配测试。默认值是 slice(None),表示所有目标。

property valid

评估一个适应度是否有效。

property values

适应度值。直接使用 individual.fitness.values = values 来设置适应度,使用 del individual.fitness.values 来清除(使无效)适应度。未加权的适应度可以通过 individual.fitness.values 直接访问。

weights = None

权重用于适应度比较。它们在同一类型的所有适应度之间共享。当子类化 Fitness 时,权重必须定义为一个元组,其中每个元素与一个目标相关联。负权重元素对应于关联目标的最小化,而正权重对应于最大化。

备注

如果在子类化过程中未定义权重,则在实例化子类适应度对象时将发生以下错误:

TypeError: 无法实例化抽象类 <class Fitness[...]> ,因为它具有抽象属性 weights。

wvalues = ()

包含适应度的加权值,通过属性 values 设置值时进行权重乘法。为了效率,在设置值时进行乘法。

通常没有必要操作 wvalues,因为它是用于比较运算符的适应度内部属性。