DEAP库文档教程四——操作与算法

news2025/4/17 3:21:04

本节将将在初始化的基础上,进一步说明操作与算法。

1、Using the Toolbox

toolbox(base.Toolbox())是包含所有进化操作的工具箱,从目标初始化到适应度计算。它允许在每个算法中实现简单的构造。toolbox基本上由两种方法组成,register()和unregister(),这两种函数是用来添加和移除工具的。

2、Using the Tools

需要区别Toolbox和Tools,前者包含后者关系,Tools更加纯粹的指向进化工具,如Initialization、Crossover、Mutation、Selection、Migration等等,具体查看官方教程。

fitnesses = list(map(toolbox.evaluate, pop))
for ind, fit in zip(pop, fitnesses):
    ind.fitness.values = fit

toolbox.register('population', tools.initRepeat,list, toolbox.individual)
pop = toolbox.population(n = 30)
NGEN = 100 #ITERATION NUMBER
CXPB = 0.1 #CROSSOVER RATE
MUPB = 0.1 #MUTATION RATE
for i in range(NGEN):
    #selection
    offspring = toolbox.select(pop, len(pop)) #select len(pop) individuals from pop
    #clone the selected individuals
    offspring = list(map(toolbox.clone, offspring))
    
    #crossover
    for child1, child2 in zip(offspring[::2], offspring[1::2]):
        if random.random() < CXPB:
            toolbox.mate(child1, child2)
            del child1.fitness.values
            del child2.fitness.values
    
    #mutation
    for mutant in offspring:
        if random.random() < MUPB:
            toolbox.mutate(mutant)
            del mutant.fitness.values
    
    #evaluate the individuals with an invalid fitness
    invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
    fitness = toolbox.map(toolbox.evaluate, invalid_ind)
    for ind, fit in zip(invalid_ind, fitness):
        ind.fitness.values = fit
        
    #the population is entirely replaced by offspring
    pop[:] = offspring

3、Tool Decoration

工具装饰是一个很强力的特征,它可以帮助你在演化过程中去精确地对算法和操作进行控制。一个装饰是指将函数进行包装,这叫做在真实的函数被调用前后做一些初始化和终止工作。例如,在一个有限的区域内,一种应用装饰符的方法是在变异和交叉的过程中保证个体不会越界。下面的定义就是检查是否有个体越界,装饰符是通过三个函数定义的,为了接收最小值和最大值。当变异或者交叉被调用时,边界将会检查它们的运算结果。

def checkBounds(min, max):
    def decorator(func):
        def wrapper(*args, **kargs):
            offspring = func(*args, **kargs)
            for child in offspring:
                for i in xrange(len(child)):
                    if child[i] > max:
                        child[i] = max
                    elif child[i] < min:
                        child[i] = min
            return offspring
        return wrapper
    return decorator

toolbox.register("mate", tools.cxBlend, alpha=0.2)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=2)

toolbox.decorate("mate", checkBounds(MIN, MAX))
toolbox.decorate("mutate", checkBounds(MIN, MAX))

4、Variations

变化允许建立简单的算法,使用预定义好的小模块。为了使用变化,toolbox一定会建立一个包含所需运算符的集合。例如,在最近展示的完整算法案例中,交叉和变异运算在varAnd()中被重新整合。这个函数要求toolbox包含mate()和mutate()函数,这种变化可以用来简化算法,就像下面这样

from deap import algorithms

for g in range(NGEN):
    # Select and clone the next generation individuals
    offspring = map(toolbox.clone, toolbox.select(pop, len(pop)))

    # Apply crossover and mutation on the offspring
    offspring = algorithms.varAnd(offspring, toolbox, CXPB, MUPB)

    # Evaluate the individuals with an invalid fitness
    invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
    fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
    for ind, fit in zip(invalid_ind, fitnesses):
        ind.fitness.values = fit

    # The population is entirely replaced by the offspring
    pop[:] = offspring

穿插讲解Variations

Variations变体是算法的较小部分,可以单独用于构建更复杂的算法。

主要包含varAnd、varOr

algorithms.varAnd(population, toolbox, cxpb, mutpb)---函数的参数被写死了

进化算法的一部分,只应用变异部分(交叉和变异)修改后的个体的适应度无效。个体被克隆,因此返回的种群独立于输入种群。

Parameters:
  • population – A list of individuals to vary.
  • toolbox – A Toolbox that contains the evolution operators.
  • cxpb – The probability of mating two individuals.
  • mutpb – The probability of mutating an individual.
Returns:

A list of varied individuals that are independent of their parents.

 这种变异被命名为And,因为它需要在个体上同时应用交叉和突变。注意,这两种算子都不是系统应用的,产生的个体可以根据给定的概率从仅交叉、仅突变、交叉和突变以及繁殖中生成。两种概率都应在[0,1]中。

algorithms.varOr(population, toolbox, lambda_, cxpb, mutpb)

Parameters:
  • population – A list of individuals to vary.
  • toolbox – A Toolbox that contains the evolution operators.
  • lambda_ – The number of children to produce
  • cxpb – The probability of mating two individuals.
  • mutpb – The probability of mutating an individual.
Returns:

The final population.

变化如下。在每次lambda_迭代中,它从三个操作中选择一个;交叉、突变或繁殖。在交叉的情况下,从亲本群体Pp中随机选择两个个体,使用toolbox.clone()方法克隆这些个体,然后使用toolbox.mate()方法交配。只有第一个孩子被附加到后代群体Po,第二个孩子被丢弃。在突变的情况下,从Pp中随机选择一个个体,然后使用toolbox.mutate()方法对其进行克隆和突变。产生的突变体附加在Po上。在繁殖的情况下,从Pp中随机选择一个个体,克隆并附加到Po中。

这种变异被命名为Or,因为后代永远不会同时来自交叉和突变操作。两种概率之和应为[0,1],再现概率为1-cxpb-mutpb。

5、Algorithms

有许多种可以在algorithm模块中使用的算法,它们十分简单并且可以反映演化算法的基本类型。这些算法使用Toolbox作为定义好的内容。一旦toolbox被设定完成,它们将会去调用这些算法。简单的演化算法需要五个参数,种群、toolbox、交叉率、变异率和种群迭代次数。

举例如下

from deap import algorithms

algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=50)

算法库中列举的算法包含:

1、deap.algorithms.eaSimple(population, toolbox, cxpb, mutpb, ngen[, stats, halloffame, verbose])

2、deap.algorithms.eaMuPlusLambda(population, toolbox, mu, lambda_, cxpb, mutpb, ngen[, stats, halloffame, verbose])

............///具体的内容,可以参考官方文档,不做展开了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/961932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工服穿戴检测联动门禁开关算法

工服穿戴检测联动门禁开关算法通过yolov8深度学习框架模型&#xff0c;工服穿戴检测联动门禁开关算法能够准确识别和检测作业人员是否按照规定进行工服着装&#xff0c;只有当人员合规着装时&#xff0c;算法会发送开关量信号给门禁设备&#xff0c;使门禁自动打开。YOLO的结构…

msvcp71.dll丢失怎样修复和msvcr71.dll丢失的解决方法介绍

今天&#xff0c;我将为大家分享一个关于电脑msvcp71.dll丢失的问题及其解决方法。希望这些方法能够帮助到正面临同样问题的朋友们。 首先&#xff0c;让我们来了解一下msvcp71.dll丢失的原因。msvcp71.dll是Microsoft Visual C 2008 Redistributable Package的一个组件&#…

内网隧道代理技术(十九)之 CS工具自带上线不出网机器

CS工具自带上线不出网机器 如图A区域存在一台中转机器,这台机器可以出网,这种是最常见的情况。我们在渗透测试的过程中经常是拿下一台边缘机器,其有多块网卡,边缘机器可以访问内网机器,内网机器都不出网。这种情况下拿这个边缘机器做中转,就可以使用CS工具自带上线不出网…

leetcode55.跳跃游戏 【贪心】

题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

DEAP库文档教程二-----创建类型

本节将展示如何通过creator创建类型以及如何使用toolbox进行初始化。 1、Fitness 已经提供的Fitness类是一个抽象类&#xff0c;它需要weight来使得它成为一个函数。一个最小化的适应度是通过负权重构建的&#xff0c;而一个最大化适应度则需要正权重。 creator.create(&quo…

渗透测试漏洞原理之---【失效的访问控制】

文章目录 1、失效的访问控制1.1、OWASP Top 101.1.1、A5:2017-Broken Access Control1.1.2、A01:2021 – Broken Access Control 1.2、失效的访问控制类别1.2.1、水平越权1.2.2、垂直越权 1.3、攻防案例1.3.1、Pikachu靶场 Over Permision1.3.2、DVWA越权利用失效的访问控制漏洞…

QT listWidget 中实现元素的自由拖拽

QListWIdget中拖拽元素移动 setMovement(QListView::Movement::Free);setDragEnabled(true); setDragDropMode(DragDropMode::DragDrop); setDefaultDropAction(Qt::DropAction::MoveAction);

稳定性建设框架 | 京东物流技术团队

一、为什么要做稳定性建设 1、从熵增定律引出稳定性建设的必要性 物理学上&#xff0c;用“熵”来描述一个体系的混乱程度。卡尔弗里德曼提出熵增定律&#xff0c;他认为在一个封闭的系统内&#xff0c;如果没有外力的作用&#xff0c;一切物质都会从有序状态向无序状态发展。…

CSRF与XSS结合利用

文章目录 修改cms网站后台管理员密码成功登录总结 修改cms网站后台管理员密码 CSRF和XSS结合的JS代码&#xff1a; <script> xmlhttp new XMLHttpRequest(); xmlhttp.open("post","http://10.4.7.130/cms/admin/user.action.php",false); xmlhttp…

2023第二届中国绿色钢铁国际峰会 演讲嘉宾预告:Meranti Steel

2023第二届中国绿色钢铁国际峰会将于9月21日-22日在上海举办&#xff0c;本次会议线上线下同步举行&#xff0c;会场提供中英同声传译。 钢铁是当今世界上最常用的金属&#xff0c;普遍应用于世界各国基础设施建设与机械、汽车、飞机、船舶、家电等产品的生产制造中。但是&…

中级深入--day15

案例&#xff1a;使用BeautifuSoup4的爬虫 我们以腾讯社招页面来做演示&#xff1a;搜索 | 腾讯招聘 使用BeautifuSoup4解析器&#xff0c;将招聘网页上的职位名称、职位类别、招聘人数、工作地点、发布时间&#xff0c;以及每个职位详情的点击链接存储出来。 # bs4_tencent.p…

剑指 Offer 49. 丑数(C++实现)

剑指 Offer 49. 丑数https://leetcode.cn/problems/chou-shu-lcof/ 对每个丑数 分别乘2、乘3、乘5 即可得到后续丑数 其中只需要对计算出来的丑数结果进行去重即可 int nthUglyNumber(int n) {// base caseif (n < 1){return -1;}if (n 1){return 1;}vector<int> res…

【单视重建】RealFusion:单张图像到任何对象的360°重建

项目主页&#xff1a;https://lukemelas.github.io/realfusion 文章&#xff1a;RealFusion&#xff1a;360◦ Reconstruction of Any Object from a Single Image 文章目录 摘要一、前言二、相关工作1. 基于图像的 外观和几何形状的重建2. 少视图重建3. 单视图重建4.从2D 生成…

【算法训练-字符串 二】最长回文子串

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【最长回文子串】&#xff0c;使用【字符串】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为…

物奇5007crash问题dump、栈回溯的四种定位方法

概述 物奇属于RISC-V架构(chapter1_riscv.md 华中科技大学操作系统团队/pke-doc - Gitee.com)&#xff0c;在遇到crash问题时&#xff0c;系统内部会对内存进行相关的保护和检测&#xff0c;当发现异常时会主动调用 IOT_ASSERT&#xff0c;通常会产生相关的 log 文件&#xf…

EXD 设计访谈|Vol.1 从“组件容器”聊到 B 端设计师的价值自证瓶颈

主持&#xff1a;元宝&#xff5c;嘉宾&#xff1a;赫本 《EXD 设计访谈》是由 EXD&#xff08;易知微用户体验设计团队&#xff09;制作的一档设计聊天栏目&#xff0c;主要和你分享我们在易知微这家公司里&#xff0c;关于 B 端工具设计、可视化内容设计、ToB 品牌运营设计方…

综合实训-------成绩管理系统 V1.1

综合实训-------成绩管理系统 V1.1 1、一维数组数据double 2、我们用元素的位置来当学号。 1、录入数据 【5个数据】或【通过文件的方式取数据】 2、显示数据 3、添加一条记录 4、修改一条记录 5、删除一条记录 6、查找一条记录。【输入学号&#xff0c;显示成绩】 7、统计。【…

StopWatch如何快速使用?

StopWatch如何快速使用&#xff1f; import org.springframework.util.StopWatch; public class StopWatchExample {public static void main(String[] args) {//创建stopWatch对象StopWatch stopWatch new StopWatch();// 开始计时 代码片段 起名task1stopWatch.start("…

运行速度高达1.8GHz可编程采集网关

今天介绍下BL304这个设备。嵌入式ARM控制器BL304系列是一款专为工业控制领域设计的坚固型工控设备。它采用NXP公司的处理器I.MX8M Mini四核64位处理器&#xff0c;搭配四核 Cortex-A53单核Cortex-M4构架&#xff0c;运行速度高达1.8GHz&#xff0c;具有高度的稳定性和可靠性。 …

Docker环境搭建Prometheus实验环境

环境&#xff1a; OS&#xff1a;Centos7 Docker: 20.10.9 - Community Centos部署Docker 【Kubernetes】Centos中安装Docker和Minikube_云服务器安装docker和minikube_DivingKitten的博客-CSDN博客 一、拉取Prometheus镜像 ## 拉取镜像 docker pull prom/prometheus ## 启动p…