DEAP 1.4.1 documention

创建类型

本教程展示了如何使用 `creator` 创建类型,并使用 `toolbox` 进行初始化。

适应度

提供的 `Fitness` 类是一个抽象类,需要 `weights` 属性才能发挥作用。最小化适应度使用负权重,而最大化适应度使用正权重。例如,以下代码在 `creator` 中创建了一个单目标最小化适应度 `FitnessMin`:

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

`create()` 函数至少需要两个参数,一个是新创建类的名称,另一个是基类。任何后续参数都将成为类的属性。`weights` 属性必须是一个元组,这样多目标和单目标的适应度可以被相同地处理。例如:

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

这段代码生成的适应度会最小化第一个目标,并最大化第二个目标。权重还可以用于调整每个目标之间的重要性。

个体

通过思考不同类型的进化算法(如GA、GP、ES、PSO、DE等),我们可以看到可能存在非常多样化的个体,这进一步支持了开发者无法提供所有可能类型的假设。这里有一个指南,介绍如何使用 `creator` 创建这些个体,并使用 `Toolbox` 初始化它们。

浮点数列表

第一个创建的个体将是一个包含浮点数的简单列表。为了生成这种个体,我们需要使用 `creator` 创建一个类,该类继承自标准列表类型并具有 `fitness` 属性。

import random

from deap import base
from deap import creator
from deap import tools

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)

IND_SIZE=10

toolbox = base.Toolbox()
toolbox.register("attr_float", random.random)
toolbox.register("individual", tools.initRepeat, creator.Individual,
                 toolbox.attr_float, n=IND_SIZE)

新引入的 `register()` 方法至少需要两个参数:一个别名和分配给该别名的函数。任何后续参数在调用时都会传递给函数。因此,上述代码在 `toolbox` 中创建了两个别名:`attr_float` 和 `individual`。第一个别名指向 `random.random()` 函数。第二个别名是 `initRepeat()` 函数的快捷方式,将其参数固定为 `creator.Individual` 类,将函数参数固定为 `toolbox.attr_float()`,将重复次数参数固定为 `IND_SIZE`。

现在,调用 `toolbox.individual()` 将调用 `initRepeat()`,并返回一个由浮点数构成的完整 `creator.Individual` 个体,该个体具有单目标最大化 `fitness` 属性。

# 生成一个浮点数列表个体
individual = toolbox.individual()

print(individual)
# [0.6321, 0.1143, 0.9382, 0.7981, 0.4325]

通过继承 `array.array` 或 `numpy.ndarray`,可以创建这种类型的不同变体。

creator.create("Individual", array.array, typecode="d", fitness=creator.FitnessMax)
creator.create("Individual", numpy.ndarray, fitness=creator.FitnessMax)

继承自 `array` 的类型在初始化时需要一个 `typecode`,就像原始类一样。

`typecode` 是在 Python 中用于定义 `array.array` 数据类型的一个字符。`array.array` 是一种数组类型,专门用于存储同一类型的元素。`typecode` 决定了数组中元素的类型,例如:

- `'b'`:有符号字节 (int, 1字节)
- `'B'`:无符号字节 (unsigned int, 1字节)
- `'h'`:有符号短整数 (int, 2字节)
- `'H'`:无符号短整数 (unsigned int, 2字节)
- `'i'`:有符号整数 (int, 4字节)
- `'I'`:无符号整数 (unsigned int, 4字节)
- `'d'`:双精度浮点数 (float, 8字节)

例如,`typecode="d"` 表示创建一个双精度浮点数数组。

排列

排列表示法的个体与一般列表个体非常相似。实际上,它们都继承自基本的列表类型。唯一的区别是,排列个体需要生成一个随机排列,并将该排列赋予个体,而不是用一系列浮点数填充列表。

import random
from deap import base, creator, tools

creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
cre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值