1. DEAP框架简介

DEAP(Distributed Evolutionary Algorithms in Python)是一个热门的Python进化算法框架,我们可以用这个框架在Python内实现遗传算法的应用,本文将介绍DEAP中主要模块的定义与用法,而下一期我们将用DEAP框架解决OneMax问题。

2. base 模组

base模组内有Toolbox和Fitness两个类,一般我们用Toolbox来创建方程,将所有遗传算法的方程都储存于Toolbox内有利于编程的封装;Fitness类用来储存个体适应度,如果要完整使用DEAP框架,必须同时使用Toolbox和Fitness。

2.1 Toolbox

Toolbox主要用来封装方程,其用法如下

from deap import basedef get_abc(a,b,c):     print(f"a:{a}; b:{b}; c:{c}")tools = base.Toolbox()tools.register("get", get_abc, 1,c=3) # register functiontools.get(2) # once registered, functions can be used directly in tools>>> a:1; b:2; c:3

由上例可见,register的参数分别为:原函数的别名;原函数;原函数的参数(可为关键或非关键参数)。使用Toolbox可以大大减少代码量,并通过将其他函数封装进Toolbox使代码简单明了。

2.2 Fitness

Fitness主要和creator模组一起使用来初始化个体的适应度,具体内容将在下一期介绍。

3. creator 模组

我们一般使用creator.create来创建个体与种群。create方程可以拓展其他的类,并同时添加特性(attribute),示例如下:

from deap import creatorcreator.create("styledText",str,size=9,style=dict)# creator.styledText is almost equivalent toclass styledText(str):    size = 9    def __init__(self):        self.style = dict()

4. tools 模组

tools模组包含一系列已定义好的方程,具体内容如下(来源:DEAP官网):

其中初始化(Initialization)方程可以让我们快速构建个体与种群:

例: 用initRepeat创建长度为4的列表,每一个列表上的元素为0或1

import randomfrom deap import toolsrandom.seed(39)def randomZeroOne():    return(random.randint(0,1))individual = tools.initRepeat(list,randomZeroOne,4)print(individual)>>> [0, 1, 1, 0]

例:用initIterate创建长度为4的列表,列表内容为0-3顺序随机的整数

import randomfrom deap import toolsrandom.seed(39)def random4():    return(random.sample(range(4),4))individual = tools.initIterate(list,random4)print(individual)>>> [1, 3, 2, 0]

交叉(Crossover),突变(Mutate),选择(Selection)为具体的遗传算法方法,脱离了具体例子很难解释,这些方法的应用将在今后的文章中逐一介绍,若对这些概念不了解的,可以查看本系列第二期:遗传算法(Python) #2 基本运算方法详解。

5. 其他模组

DEAP框架内还有algorithms模组,和用以统计每一代数据的tools.Statistics和tools.Logbook,这些内容将在以后的文章中注意介绍。

6.小结

本期文章介绍了DEAP框架内的主要模组/方程,下一期将使用DEAP框架解决OneMax问题,并进一步展示DEAP框架的应用。

python return用法_遗传算法(Python) #4 DEAP框架入门相关推荐

  1. python return用法_初学Python要了解什么 装饰器知识汇总有哪些

    初学Python要了解什么?装饰器知识汇总有哪些?在Python学习过程中,有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用,比 ...

  2. python global用法_【python测试开发栈】python基础语法大盘点

    周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...

  3. python生成器用法_理解python中生成器用法

    生成器(generator)概念 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束. 生成器语法 生成器表达式: 通列表解 ...

  4. python map用法_讲解Python map()函数和将map()与多个Iterables一起使用

    map()是Python中的内置函数,可将函数应用于给定可迭代对象中的所有元素,它使您无需使用循环即可编写简单干净的代码. Python map()函数 map()函数采用以下形式: map(func ...

  5. python return函数_理解Python函数中的return关键字

    一.说明 return 语句是Python函数返回的结果,可以是数值.字符串.列表.表达式.函数等: return 语句将Python函数的结果,返回到调用的地方,并把程序的控制权一起返回,即在函数中 ...

  6. python enumerate用法_【Python】python enumerate用法总结

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  7. python stdout用法_使用Python子进程从stdout上的C程序捕获输出...

    你不能像那样使用p.stdout;如果您要求"整个标准输出",则只有在过程终止(或管道缓冲器填充,这可能需要很长时间)时才可用. 您需要逐行读取进程的stdout. while T ...

  8. python sendkeys用法_使用python中的sendkeys上载文件将打开一个文件选择器弹出窗口...

    需要自动化的组件是antd-upload.在https://ant.design/components/upload/ --> Can be found here 上载按钮可见,但输入的&quo ...

  9. python urllib2用法_使用Python urllib2执行PUT

    我正在尝试使用urllib2来停止,下面是我在stackoverflow上找到的示例: 我不明白为什么我会犯错误. 以下是我的代码摘录:import urllib2 import json conte ...

最新文章

  1. 2018专业创业赛事服务平台
  2. Java调用net的webservice问题分享
  3. Qt5—嵌入停靠窗口QDockWidget
  4. 手机技巧:微信这个“设置”建议关闭!否则不到半年就卡爆了
  5. linux下的Apache2 + mysql5 + php5 源码完整安装详解
  6. tcpdump实战详解
  7. mysql like html_mysql - MySQL RLIKE查找,然后替换打开和关闭HTML标记之间的所有字符 - 堆栈内存溢出...
  8. 创建variant二维数组
  9. STL:STL各种容器的使用时机详解
  10. Flutter 开发环境搭建Unable to ‘pub upgrade‘ flutter tool. Retrying in five seconds...
  11. docker网络配置详解
  12. 中晋最新消息2020年_最新消息!洛阳市第一高级中学发布2020年招生简章
  13. arcgis中 shift数据重新定义投影_【更新82篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  14. 计算机二级c简介,二级C语言
  15. 浙江大学计算机学院科研团队,科研团队
  16. 统一用户认证和单点登录解决方案
  17. 关于移动通信网络与互联网的关系
  18. 通配符(一般用来查找文件)
  19. 猫抓 浏览器插件安装教程,适用Chrome浏览器和Edge浏览器
  20. LeetCode 1134.阿姆斯特朗数 每日一题

热门文章

  1. Python AttributeError: 'module' object has no attribute 'posseg'
  2. 11.Java 面试题整理(编程题)
  3. QT中让窗口屏幕居中的方法
  4. 【codevs2440】【BZOJ1066】蜥蜴,最大流
  5. 【HDU1166】敌兵布阵,线段树练习
  6. requestmapping注解访问404_开发人员都必须知道的Spring注解概览
  7. 【Openstack】实录手动部署Openstack Rocky 双节点(3)- Glance
  8. Intel超线程技术 Hyper-Threading Technology (2) - 早期实现 - 概述
  9. Java语言基本元素
  10. linux io分析工具,io性能分析工具-iostat