Skip to content

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)