DEAP 中文导航¶
原文: Distributed Evolutionary Algorithms in Python
分类: 进化计算/遗传算法
大小: 4.5 MB
语言: Python
📚 项目简介¶
DEAP 是一个新型进化计算框架,用于快速原型设计和算法测试。它使算法显式化、数据结构透明化,完美支持 multiprocessing 和 SCOOP 等并行化机制。
GitHub: https://github.com/DEAP/deap
PyPI: https://pypi.org/project/deap/
文档: https://deap.readthedocs.io/
🔧 核心功能¶
| 功能 | 说明 | 支持表示 |
|---|---|---|
| 遗传算法 | 任意表示的 GA | List, Array, Set, Dict, Tree, Numpy |
| 遗传编程 | 前缀树 GP | 弱类型、强类型、自动定义函数 |
| 进化策略 | ES + CMA-ES | 实数优化 |
| 多目标优化 | NSGA-II/III, SPEA2, MO-CMA-ES | Pareto 前沿 |
| 协同进化 | 多种群合作/竞争 | 多群体协同 |
| 并行评估 | multiprocessing, SCOOP | 分布式计算 |
| 名人堂 | 历史最优个体追踪 | 精英保留 |
| 检查点 | 系统状态快照 | 断点续算 |
| 基准测试 | 常见测试函数集 | 50+ 测试函数 |
| 谱系追踪 | 进化历史可视化 | NetworkX 兼容 |
📁 目录结构¶
deap/
├── deap/ # 核心库
│ ├── __init__.py
│ ├── base.py # 基础类 (Toolbox, Fitness)
│ ├── creator.py # 动态创建类
│ ├── tools/ # 工具模块
│ │ ├── selection.py # 选择算子
│ │ ├── crossover.py # 交叉算子
│ │ ├── mutation.py # 变异算子
│ │ └── support.py # 辅助工具
│ ├── algorithms/ # 算法模块
│ │ ├── eaSimple.py # 简单 EA
│ │ ├── eaMuCommaLambda.py
│ │ └── eaMuPlusLambda.py
│ └── benchmarks/ # 基准函数
├── examples/ # 示例代码
│ ├── ga/ # 遗传算法示例
│ ├── gp/ # 遗传编程示例
│ └── es/ # 进化策略示例
├── notebooks/ # Jupyter 笔记
├── doc/ # 文档
├── tests/ # 单元测试
├── setup.py
└── README.md
🚀 快速开始¶
安装¶
# 稳定版安装
pip install deap
# 最新版安装
pip install git+https://github.com/DEAP/deap@master
# 依赖要求
# Python 2.7+ 或 Python 3.4+
# NumPy (用于 CMA-ES)
# matplotlib (可选,可视化)
第一个示例:OneMax 问题¶
import random
from deap import creator, base, tools, algorithms
# 1. 定义问题
# 创建 Fitness 类 (最大化)
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
# 创建 Individual 类
creator.create("Individual", list, fitness=creator.FitnessMax)
# 2. 创建工具箱
toolbox = base.Toolbox()
# 注册属性生成器 (0/1 随机整数)
toolbox.register("attr_bool", random.randint, 0, 1)
# 注册个体生成器 (100 个属性)
toolbox.register("individual", tools.initRepeat,
creator.Individual, toolbox.attr_bool, n=100)
# 注册种群生成器
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
# 3. 定义适应度函数
def evalOneMax(individual):
return sum(individual), # 返回元组
toolbox.register("evaluate", evalOneMax)
# 4. 注册遗传算子
toolbox.register("mate", tools.cxTwoPoint) # 双点交叉
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05) # 位翻转变异
toolbox.register("select", tools.selTournament, tournsize=3) # 锦标赛选择
# 5. 运行进化
population = toolbox.population(n=300)
NGEN = 40 # 进化代数
for gen in range(NGEN):
# 生成后代
offspring = algorithms.varAnd(population, toolbox, cxpb=0.5, mutpb=0.1)
# 评估后代
fits = toolbox.map(toolbox.evaluate, offspring)
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit
# 选择下一代
population = toolbox.select(offspring, k=len(population))
# 6. 输出最优解
top10 = tools.selBest(population, k=10)
print(f"最优适应度:{top10[0].fitness.values[0]}")
多目标优化示例 (NSGA-II)¶
from deap import algorithms, base, creator, tools
import numpy as np
# 定义多目标问题 (ZDT1)
def zdt1(individual):
f1 = individual[0]
g = 1 + 9 * sum(individual[1:]) / (len(individual) - 1)
h = 1 - np.sqrt(f1 / g)
f2 = g * h
return f1, f2
# 创建多目标 Fitness
creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0))
creator.create("Individual", list, fitness=creator.FitnessMin)
# 工具箱
toolbox = base.Toolbox()
toolbox.register("attr_float", random.random)
toolbox.register("individual", tools.initRepeat,
creator.Individual, toolbox.attr_float, n=30)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
toolbox.register("evaluate", zdt1)
# NSGA-II 算子
toolbox.register("mate", tools.cxSimulatedBinaryBounded, low=0.0, up=1.0, eta=20.0)
toolbox.register("mutate", tools.mutPolynomialBounded, low=0.0, up=1.0, eta=20.0, indpb=1.0/30.0)
toolbox.register("select", tools.selNSGA2)
# 运行算法
population = toolbox.population(n=100)
algorithms.eaMuPlusLambda(population, toolbox, mu=100, lambda_=100,
cxpb=0.9, mutpb=0.1, ngen=250)
# 获取 Pareto 前沿
pareto_front = tools.ParetoFront()
pareto_front.update(population)
print(f"Pareto 前沿个体数:{len(pareto_front)}")
📖 核心组件¶
1. Creator (动态类创建)¶
from deap import creator
# 创建 Fitness 类
creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0))
# 创建 Individual 类
creator.create("Individual", list, fitness=creator.FitnessMin)
# 动态创建的类自动添加到全局命名空间
2. Toolbox (工具箱模式)¶
from deap import base
toolbox = base.Toolbox()
# 注册函数
toolbox.register("attr", random.random)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr, n=10)
# 带参数的注册
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
# 调用
ind = toolbox.individual()
offspring = toolbox.mate(ind1, ind2)
3. Algorithms (算法库)¶
| 算法 | 函数 | 说明 |
|---|---|---|
| 简单 EA | eaSimple() |
标准 (μ+λ) EA |
| μ+λ EA | eaMuPlusLambda() |
精英保留 |
| μ,λ EA | eaMuCommaLambda() |
无精英保留 |
| CMA-ES | cma.evolve() |
协方差矩阵自适应 |
4. Tools (工具库)¶
| 类别 | 算子 | 说明 |
|---|---|---|
| 选择 | selTournament |
锦标赛选择 |
selRoulette |
轮盘赌选择 | |
selNSGA2 |
非支配排序 | |
| 交叉 | cxTwoPoint |
双点交叉 |
cxUniform |
均匀交叉 | |
| 变异 | mutFlipBit |
位翻转 |
mutGaussian |
高斯变异 |
💡 典型应用¶
1. 特征选择¶
# 二进制编码:1=选择特征,0=不选择
def evaluate_features(individual):
selected_features = [i for i, gene in enumerate(individual) if gene == 1]
# 训练模型并评估
accuracy = train_and_evaluate(X[:, selected_features], y)
return accuracy,
2. 神经网络架构搜索¶
# 编码网络层配置
def create_network(individual):
layers = []
for i in range(0, len(individual), 2):
layer_type = individual[i] # 0=Dense, 1=Conv, 2=Pool
units = individual[i+1] * 10 # 神经元数
# 构建网络层
return model
3. 参数优化¶
# 优化 SVM 参数
def optimize_svm(individual):
C = individual[0] * 10 # 惩罚参数
gamma = individual[1] * 0.1 # 核参数
# 交叉验证评估
return cross_val_score(model, X, y, cv=5).mean(),
🎯 并行化¶
multiprocessing¶
from multiprocessing import Pool
toolbox.register("map", Pool().map)
# 并行评估
fits = toolbox.map(toolbox.evaluate, population)
SCOOP (分布式)¶
# 使用 SCOOP 分布式
from scoop import futures
toolbox.register("map", futures.map)
# 运行
if __name__ == "__main__":
# DEAP 会自动使用分布式计算
pass
📚 引用 DEAP¶
@article{DEAP_JMLR2012,
author = "Félix-Antoine Fortin and François-Michel De Rainville and Marc-André Gardner and Marc Parizeau and Christian Gagné",
title = "{DEAP}: Evolutionary Algorithms Made Easy",
pages = "2171-2175",
volume = "13",
month = "jul",
year = "2012",
journal = "Journal of Machine Learning Research"
}
🔗 相关资源¶
🎓 学习路径¶
1. OneMax 示例 → 理解 DEAP 基础
2. 工具箱模式 → 学习组件注册
3. 遗传算法 → 掌握 GA 优化
4. 多目标优化 → NSGA-II/SPEA2
5. 遗传编程 → 符号回归
6. 并行计算 → multiprocessing/SCOOP
本地路径: /workspace/code-examples/deap/
创建时间: 2026-06-02
难度: ⭐⭐⭐ (中级)
**DEAP 中文导航 | 进化计算框架**
[返回代码索引](../../README_UPDATED.md) | [决策科学资源大全](../../docs/resources/decision-science-comprehensive-resources.md)