《进化优化》第7章 遗传规划

news2024/11/29 6:38:19

文章目录

  • 7.1 LISP: 遗传规划的语言
    • Lisp程序的交叉
  • 7.2 遗传规划的基础
    • 7.2.1 适应度的度量
    • 7.2.2 终止准则
    • 7.2.3 终止集合
    • 7.2.4 函数集合
    • 7.2.5 初始化
    • 7.2.6 遗传规划的参数
  • 7.3 最短时间控制的遗传规划
  • 7.4 遗传规划的膨胀
  • 7.5 演化实体而非计算机程序
  • 7.6 遗传规划的数学分析

遗传算法和进化算法存在局限:在表示候选解时要与假设的解的结构结合。

遗传规划试图将进化算法一般化成一个算法,这个算法不仅知道由具体结构给定的问题的最好解还能学习到最优的结构。

其他进化算法是对问题的解进行演化,而遗传规划却是针对求解问题的程序进行演化。

遗传规划的基本特征可以总结为三个基本原则:

  • 首先,对计算机程序进行演化的遗传规划能提供求解各种问题的方法.许多工程问题可以用计算机程序、决策树,或网络体系的组织结构求解.
  • 其次,遗传规划不会限制它的解,这与其他进化算法差不多;演化后的程序能自由呈现它的规模,形状以及最适合手头问题的结构.
  • 第三,遗传规划利用归纳法演化计算机程序.这既是优点也是缺点.遗传规划不像人类那样凭借演绎和逻辑的方式构建程序.然而,某些问题并不适合演绎.如果我们想基于一组训练样本来编写计算机程序,采用标准的计算机编程技巧较难达到目的.而这正是遗传规划的运行方式,其他进化算法也是如此.遗传规划以归纳的方式构建最优的计算机程序.

7.1 LISP: 遗传规划的语言

提出问题:计算机程序的进化具有挑战性,因为程序的表示方式通常不能变异和交叉,要让计算机程序进化,需要克服的主要障碍正在于此。

Lisp程序代码用圆括号,函数名并紧跟着的函数自变量写成。例如下面的代码表示x加3:

(+ x 3)

因为数学运算符在输入的前面,这是前缀表示法的一个例子。Lisp的括号中的表达式也称为s-表达式,它是符号表达式的简称。所有的s-表达式都可以被视为函数计算的返回值。计算多个值的s-表达式返回计算得到的最后那个值。(+ x 3)不仅给x加上3,而且将x+3返回给下一个更高层的函数运算。

我们再多举几个例子.下面的代码计算(x+3)的余弦:

(cos (+ x 3)).

下面的代码计算cos(x +3)和 z/14的最小值:

(min (cos (+ x 3))(/ z 14)).

下面的代码是:如果z >4,就将y的值复制给x

(if (>z 4) (setf x y)).

注意,在s-表达式中可以包含其他s-表达式,因此s-表达式有点像集合。在上面的s-表达式中,(> z 4)和(setf x y)都是更高一层(if (>z 4) (setf x y)) 中的一部分。

Lisp代码能够进化的原因在于s-表达式直接与树结构相对应,这个树结构也被称为语法树。例如,用Lisp计算xy + |z| 的一个s-表达式可以写成下面的形式:

(+ (* x y) (abs z)).

这个s-表达式可以用图7.1中的语法树来表示.我们用自底向上的方式来解释图7.1的语法树:

再看一个例子,考虑这样一个函数,当t>5时返回(x +y),否则返回(x+2+z):

这个函数用Lisp的记号写成:

(if (> t 5)(+ x y)(+ x 2 z)).

对应的语法树:

Lisp程序的交叉

考虑下面的函数:

这两个函数的语法树如图所示:

随机选择进行交换:

再看另一个例子:

7.2 遗传规划的基础

7.2.1 适应度的度量

在算法7.1中,如何度量适应度?所有进化算法都需要确定这一点.不过,对于遗传规划而言这个决策更复杂.计算机程序需要在不同的输入、不同的初始条件以及不同的环境下都管用.例如,一个程序想找到省油的卫星轨道,它应该对不同的卫星参数以及不同的轨道都管用.所以,在确定一个计算机程序的适应度时,必须用到许多不同的条件.给定一个计算机程序,每一个计算机的输入集合和操作条件会返回它的“子适应度”.如何让这些子适应度结合从而得到计算机程序的单一的适应度度量?应该用平均性能?应该尝试最大化最差情况下的性能?还是应该用这两个性能的某个组合?这些问题自然就引出了多目标优化(第20章),不过,在遗传规划中没有必要采用多目标优化.

7.2.2 终止准则

算法7.1的终止准则是什么样的?所有进化算法都需要回答这个问题(参见8.2节),但对于遗传规划,它可能特别重要.因为在遗传规划中,适应度的度量对计算的要求通常比其他进化算法更高.终止准则能决定遗传规划是否成功.与其他进化算法一样,遗传规划的终止准则可以包括像迭代次数、适应度评价次数、运行时间、最佳适应度值、在几代中最佳适应度值的变化,或整个种群的适应度值的标准差等因素.

7.2.3 终止集合

终止集合描述在语法树的叶子上可以出现的符号,终止集合是演化中的计算机程序的所有可能输入的集合,这个集合包括输入计算机程序的变量。

在终止集合中可以采用随机数,不过,通常随机数生成以后不会改变,这种类型的随机数被称为临时随机常数。

在为遗传规划的应用定义终止集合时,需要掌握一个平衡,如果所用的集合过小,遗传规划就不能有效的解决问题,但是,如果所用的终止集合过大,遗传规划很难在合理的时间内找到一个很好的解。

7.2.4 函数集合

用于计算机程序演化的函数集合是什么样的?

  • 函数集合中标准的数学运算(如,加、减、乘、除、绝对值).
  • 函数集合中可以包含对于特定的优化问题很重要的与问题相关的具体函数(指数函数、对数函数、三角函数、滤波器、积分器、微分器).
  • 在函数集合中可以包含条件测试(如,大于、小于、等于).
  • 如果要用逻辑函数求解特定的优化问题,可以把它们放在函数集合中(如,arnand, or, xor, nor,not).
  • 在函数集合中可以包含变量赋值函数.
  • 在函数集合中可以包含循环语句(如,while循环、for循环).
  • 如果我们为问题创建了一组预定义的函数,在函数集合中可以包含子程序调用.

在遗传规划中,因语法树的进化可能会没有合法的函数自变量,所以需要对某些函数做一点修正.例如,遗传规划可能会演化出s-表达式(/ x 0),它是被零除.这会导致Lisp出错,并因此使遗传规划终止.所以,在Lisp 中标准的除法运算符并不适用,为防止被零除我们可以定义另一个除法算子DIV,同时也防止在被很小的数除时出现的溢出:

7.2.5 初始化

应该如何生成计算机程序的初始种群?

  • 完全法:由完全法生成的程序,其每一个终端节点到顶层节点的节点个数为用户指定的常数Dc.Dc被称为语法树的深度.举例来说,在图7.3中,父代1的深度为3,而父代2的深度为4.图7.3中的父代1是一个完全语法树,因为从每一个终端节点到顶层的加法节点都有3个节点.但父代2不是完全语法树因为它的一些程序分支的深度为4而其他分支的深度仅为3.

  • 生长法:由生长法初始化生成的程序,其每一个终端节点到顶层节点的节点个数小于或等于Dc。.如果由随机初始化生成图7.3中的父代,则父代1可以由完全法或生长法生成,而父代2一定得由生长法生成,因为它不是一个完全语法树.生长法的实施方式可以与完全法的相同,但在生成深度小于Dc的随机节点时,可以生成函数或终端节点.如果生成的是函数节点,语法树会继续生长.与采用完全法一样,当达到最大深度Dc时就生成一个随机终端节点以完成语法树的分支.算法7.3说明采用生长法生成随机计算机程序的递归算法的思路.

  • 对半生长法:对半生长法的初始种群一半用完全法生成,另一半用生长法生成.它还对深度介于2和Dc之间的每一个值,生成相同数量的语法树,其中Dc是用户指定的可允许的最大深度.算法7.4 说明采用对半生长法初始化语法树的思路.






通过对初始化的讨论,我们看到,在进化算法的初始种群中播下某些已经知道的好个体会有益处.这些好个体可能是用户生成的,或者来自别的优化算法,或者另有其他的来源.但播种并不一定能改善进化算法的性能.如果在初始种群中只有几个好个体,而其余的个体是随机生成的较差的个体,则这几个好个体会支配选择过程,差的个体很快会灭绝.这会让进化进入死胡同并过早收敛,这种现象也被称为“庸者生存”[Koza,1992,page 104].不过,这种坏事发生的概率取决于我们所用的选择方法(参见8.7节).如果用轮盘赌选择,选择压力会较大,适应性强的几个个体可能很快在种群中占据优势.如果采用锦标赛选择,选择压力就小得多,适应性强的几个个体支配种群的概率也相应降低.

7.2.6 遗传规划的参数

哪些参数在控制遗传规划的执行?这些参数不仅包含别的进化算法要用到的参数,还包含遗传规划所需的特定参数。

  • 选择父代的方法。
  • 指定种群规模
  • 指定变异方法
  • 指定变异概率
  • 指定交叉概率
  • 决定是否使用精英
  • 指定初始种群的最大程序规模Di。
  • 指定子代程序的最大深度。
  • 决定是否允许子树在交叉时替换语法树上的终端节点。
  • 决定是否处理在种群中出现的重复个体。

7.3 最短时间控制的遗传规划

7.4 遗传规划的膨胀

7.5 演化实体而非计算机程序

7.6 遗传规划的数学分析

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

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

相关文章

使用Selenium Grid远程执行测试

我们将在同一台工作电脑上,分别启动主控(Hub)和节点(Node)2个Selenium Grid服务,IP地址均使用环回地址127.0.0.1,端口分别为4444和5555。开始以下操作前,请确认你的机器上已经安装、…

VERT2450 Antenna

VERT2450 Vertical Antenna (2.4-2.5 and 4.9-5.9 GHz) Dualband Includes one VERT2450 Dual Band 2.4 to 2.48 GHz and 4.9 to 5.9 GHz omni-directional vertical antenna, at 3dBi Gain.

GPT-4V:AI在医疗领域的应用

OpenAI最新发布的GPT-4V模型为ChatGPT增添了语音和图像功能,为用户提供了更多在日常生活中使用ChatGPT的方式。这次更新将为用户带来更加便捷、直观的交互体验,用户可以直接通过拍照上传图片,并提出相关问题。OpenAI的最终目标是构建一个安全…

数据库多数据组合 取别名,某项多项数据为null,导致整个结果为null,SQLSERVER,MYSQL

最近遇到一个通过查多项数据,并且组合拼接展示的场景, 发现所有数据单查都没问题,唯独含有一个或多个结果是null的拼接结果出了问题 简单的demo如下: 此时我们可以看到拼接的结果返回[null],我们想要的是即使是null也拼接进去获取其他展示情况我们视需求开发而定, 比如我现在…

阿里云python训练营-Python基础学习01

基础知识 a "hello" b "hello" print(a is b, a b) # True True print(a is not b, a ! b) # False False a ["hello"] b ["hello"] print(a is b, a b) # False True print(a is not b, a ! b) # True False 注意&#xff1a…

Java 设计模式——外观模式

目录 1.概述2.结构3.实现3.1.子系统类3.2.外观类3.3.测试 4.优缺点5.使用场景6.源码解析 1.概述 (1)有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯…

2023测试开发常见面试题

1. 什么是软件测试, 谈谈你对软件测试的了解 软件测试就是验证产品特性是否符合用户需求, 软件测试贯穿于软件的整个生命周期. >>> 那软件测试具体是什么呢 ? 就拿生活中的例子来说, 比如说我们去商场买衣服, 会有以下几个步骤: 第一步:…

leetcode:189. 轮转数组(python3解法)

难度:中等 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4]解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3…

Spring @Value注解读取yml配置文件中的list和map

配置文件 myConfig:userList: 张三,李四userMap: {"张三":"10","李四":"20"} 读取代码 Value("${myConfig.userList}")private List<String> userList;Value("#{${myConfig.userMap}}")private Map<S…

数据结构线性表——单链表

前言&#xff1a;小伙伴们又见面啦&#xff0c;这篇文章我们来一起学习线性表的第二模块——单链表。 单链表的学习就要开始上强度啦&#xff0c;小伙伴们一定要努力&#xff0c;坚持&#xff01; 目录 一.什么是单链表 二.单链表与顺序表的区别 三.单链表的实现 1.单链表…

如何使用Node.js快速创建HTTP服务器并实现公网访问本地Server

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

11月起,33个省份纳入数电票开票试点范围内,发票无纸化已是大势所趋!

10月底&#xff0c;北京、贵州、山东&#xff08;不含青岛市&#xff09;、湖南、宁夏5个地区相继发布开展数电票试点工作的通知&#xff0c;至此&#xff0c;全国已有33个省份纳入数电票开票试点范围内。根据上述5地区发布的相关公告&#xff0c;11月1日将正式推行“数电票”开…

Java-认识类和对象

本章重点&#xff1a; 1. 掌握类的定义方式以及对象的实例化 2. 掌握类中的成员变量和成员方法的使用 3. 掌握对象的整个初始化过程 4. 掌握封装特性 5. 掌握代码块 6. 掌握内部类 1. 面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Pro…

HarmonyOS ArkTS基础知识

概述 上一节&#xff0c;学习了TypeScript的基础语法&#xff0c;而在鸿蒙开发当中&#xff0c;有基于自己的编程语言&#xff0c;便是ArkTS。它是一种声明式UI的编程范式的语言&#xff0c;开发框架如下图所示&#xff1a; 根据框架图&#xff0c;分析&#xff0c;我将它大致…

2023_11_6 每日半小时 SQL 刷题

文章目录 1. 查询所有列题目描述SQL 语句编写 2. 查询多列题目描述SQL 语句编写 3. 查询结果去重题目描述SQL 语句编写 4. 查询结果限制返回行数题目描述SQL 语句编写 5. 将查询后的列重新命名题目描述SQL 语句编写 语法小总结 1. 查询所有列 题目链接&#xff1a;SQL1 查询所…

SAP-MM-批量扩充视图

MM50 可以通过这个程序批量维护或查看这个物料没有维护的视图&#xff0c;进行扩充。

weblogic弱口令漏洞复现

文章目录 一、漏洞特征1.可以直接获取passwd文件2.可以直接获取密文文件3.可以直接获取密钥文件4.解密密码5.登录后台 二、命令执行复现1.部署webshell2.Shell命令执行3.jsp一句话木马 一、漏洞特征 1.可以直接获取passwd文件 http://192.168.232.131:7001/hello/file.jsp?p…

找茬小游戏源码系统 无聊就来玩一玩 带完整的搭建教程

找茬小游戏是一种经典的休闲游戏&#xff0c;它以找出不同之处为核心玩法&#xff0c;锻炼玩家的观察力和反应能力。随着互联网技术的发展和普及&#xff0c;越来越多的游戏开发者开始尝试开发这种简单有趣的游戏。下面源码小编就来给大家介绍一下这款源码系统的搭建教程以及核…

哈夫曼编码与解码,基于Python实现

from itertools import count from collections import Counter from heapq import heapify, heappush, heappopdef huffman_tree(s):# 统计每个字符出现的次数s Counter(s) # 计算可迭代序列中元素的数量&#xff0c;返回字典类型数据c…

2023年09月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 有一组数据存在列表中,things[“桌子”,“椅子”,“茶几”,“沙发”,“西瓜”,“苹果”,“草莓”,“香蕉”]&#xff0…