python 的 DEAP框架学习

学习DEAP框架,找到如下资源:
1.github源码:https://github.com/deap/deap
2.deap文档:http://deap.gel.ulaval.ca/doc/dev/index.html
3.deap初学者中文介绍:https://segmentfault.com/a/1190000004368689
4.一篇介绍deap的文章:http://www.doc88.com/p-0468915579195.html

1.翻译第一个地址的内容

DEAP是一个新颖的进化计算框架,用于快速原型设计和测试。它旨在使算法清楚和数据结构透明。 它可以在并行机制之间完美协调,例如多处理和SCOOP(简单并发性面向对象程序设计)。
DEAP包括以下特征:
(1)在遗传算法中可以使用任何你能想到的表示,例如:列表List,数组Array,集合Set,字典Dictionary,树Tree,Numpy Array等等。
(2)基因编程使用前缀树:Loosely typed, Strongly typed(理解为稀疏类型和紧凑类型);自定义函数;
(3)进化策略(包括CMA-ES):Covariance Matrix Adaptation Evolutionary Strategies的缩写,中文名称是协方差矩阵自适应进化策略
(4)多目标优化:包括NSGA-II, SPEA2, MO-CMA-ES;
(5)多种群(多人口)共同进化;
(6)评估的并行化(和更多);
(7)名人堂,居住在人群中最好的人物;
(8)检查点定期拍摄系统的快照;
(9)基准模块包含最常用的测试功能;
(10)进化的家谱(与NetworkX兼容)
(11)其他算法的例子:PSO,差分演化,分布算法估计;

1.1下载

在Python社区接受PEP 438之后,我们已经将DEAP的源代码转移到了PyPI上。你可以在这个地址找到最近的发布内容:https://pypi.python.org/pypi/deap/.

1.2文档

查阅DEAP用户手册(http://deap.readthedocs.io/en/master/)找到相关文档。
为了获取提示文档,将目录更改为doc子文件夹并输入make html,文档将位于_build / html下。 您将需要Sphinx来构建文档。(这一部分内容需要下载这一页的源码,进行操作)

1.3 Notebooks(手册?)

还要检查我们的手册的例子。 使用IPython的手册功能,您可以单独导航和执行每个代码块,并告诉每一行都在做什么。或者,使用手册查看器链接在网页底部查看手册,或者下载手册,导航到您的下载目录并运行:

ipython notebook --pylab inline

1.4 安装

可以使用easy_install或者pip安装DEAP。其他的安装程序,如apt-get,yum等,通常安装的都是过时的版本。

pip install deap

最近的版本可以安装按照下面的命令:

pip install git+https://github.com/DEAP/deap@master

如果你希望可以编译源代码,可以先下载或者克隆源码,然后执行:

python setup.py install

1.5 编译状态

DEAP的构建(build)状态可以从这个地址获得: Travis-CI https://travis-ci.org/DEAP/deap

1.6 需要准备

DEAP最基本的特征是需要python2.6。为了能够连接工具箱和多线程模块,需要python2.7 支持pickle (等)部分功能。CMA-ES需要numpy,我们推荐matplotlib为了实现结果的可视化,因为这个模块可以兼容DEAP 的API。
自从DEAP 0.8 之后,开始兼容python 3。安装程序自从翻译源码到python 3。

1.7 示例

下面的代码可以快速学习使用DEAP的遗传算法实现Onemax问题优化。更多的实例在这里:http://deap.readthedocs.io/en/master/examples/index.html

import random
from deap import creator, base, tools, algorithms

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

toolbox = base.Toolbox()

toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n=100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

def evalOneMax(individual):
    return sum(individual),

toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)

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))
top10 = tools.selBest(population, k=10)

你可能感兴趣的:(python)