遗传编程(GP)是一种通过进化程序来解决特定明确问题的算法。
它是一种自动编程类型,旨在解决具有明确任务且解决方案可以以低成本轻松检查的挑战性问题,尽管可能解决方案的搜索空间巨大,并且对于解决问题的最佳方法知之甚少。
这通常包括开放性问题,例如控制器设计、电路设计,以及特征选择、分类和回归等预测建模任务。
对于初学者来说,进入这个领域可能很困难,因为有大量的文献可以追溯到几十年前。
在本教程中,您将了解关于遗传编程的顶级书籍。
通过我的新书《机器学习优化》**启动您的项目**,其中包括**分步教程**和所有示例的**Python源代码文件**。
让我们开始吧。
遗传编程书籍
照片由Luca Temporelli提供,保留部分权利。
教程概述
有许多关于遗传编程的书籍,可以按类型进行分组。
我们将探讨遗传编程的顶级书籍,它们分为三大类:
- 遗传编程(Koza)
- 教科书
- 会议论文集
遗传编程(Koza)
约翰·科扎是一位计算机科学家,师从遗传算法的发明者约翰·霍兰德。
科扎通常被认为是1980年代末和1990年代初统一新兴的遗传编程领域的功臣。
他因将遗传算法应用于电路设计而闻名,这些设计产生了新的可申请专利的发明,并描述了遗传算法能够常规地产生“人类竞争性”结果。
他撰写了一系列四本关于遗传编程的教科书,如下所示:
- 遗传编程:通过自然选择进行计算机编程, 1992.
- 遗传编程 II:可重用程序的自动发现, 1994.
- 遗传编程 III:达尔文式发明和问题解决, 1999.
- 遗传编程 IV:常规人类竞争性机器智能, 2003.
他最新的著作《遗传编程 IV》是一个很好的入门之选。
书的开头有一张表格总结了四个关键要点;它们是:
1. 遗传编程现在能常规地提供高回报的人类竞争性机器智能。
2. 遗传编程是一种自动化发明机器。
3. 遗传编程能够自动创建参数化拓扑形式的问题通用解决方案。
4. 遗传编程在计算机时间支出约有五个数量级增长的同时,取得了质上更重要的结果。
— 第1页,《遗传编程 IV:常规人类竞争性机器智能》,2003年。
这本书的目录如下:
- 第一章:引言
- 第02章:遗传编程背景
- 第03章:控制器的自动合成
- 第04章:电路的自动合成
- 第05章:电路拓扑、尺寸、布局和布线的自动合成
- 第06章:天线的自动合成
- 第07章:遗传网络的自动合成
- 第08章:代谢途径的自动合成
- 第09章:控制器参数化拓扑的自动合成
- 第10章:电路参数化拓扑的自动合成
- 第11章:带条件发育算子的电路参数化拓扑的自动合成
- 第12章:PID控制器改进调优规则的自动合成
- 第13章:改进控制器参数化拓扑的自动合成
- 第14章:负反馈的再发明
- 第15章:2000年后六项专利电路的自动再发明
- 第16章:遗传编程可能非常适合解决的问题
- 第17章:并行实现与计算机时间
- 第18章:摩尔定律和遗传编程产生质上更重要结果的进展的历史视角
- 第19章:结论
想要开始学习优化算法吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
教科书
已经出版了一些面向对该领域感兴趣的本科生和研究生的遗传编程教科书。
其中最受欢迎的书籍包括:
我推荐更新的《遗传编程基础》。
因此,《遗传编程基础》不应仅仅被视为一个为了做好GP而需要掌握的技术集合,而应被视为首次尝试描绘和探索遗传编程作为一种搜索算法背后的机制和基本原理。在撰写本书时,我们希望为整个人工智能的理论基础带来一丝光芒。
— 第IIX页,《遗传编程基础》,2002年。
这本书的目录如下:
- 第一章:引言
- 第02章:适应度景观
- 第03章:程序组件模式理论
- 第04章:悲观GP模式理论
- 第05章:精确GP模式定理
- 第06章:GP模式理论的经验教训
- 第07章:GP搜索空间
- 第08章:GP搜索空间:理论分析
- 第09章:示例一:人工蚂蚁
- 第10章:示例二:最大值问题
- 第11章:GP收敛与膨胀
- 第12章:结论
也许最受欢迎的GP书籍之一是由该领域的顶尖学者自行出版的,旨在为有兴趣将遗传编程应用于其项目的学生和开发人员提供参考。
- 遗传编程实地指南, 2008.
以下是这本书的摘要
已经有许多书籍描述了GP的各个方面。有些提供了对整个领域的通用介绍。然而,过去十年中没有新的GP入门书籍出版,任何想要学习GP的人都不得不痛苦地自行探索。本书旨在填补这一空白,为新手和老手提供一本现代GP实地指南。
— 《遗传编程实地指南》,2008年。
这本书的目录如下:
- 第一章:引言
- 第02章:基于树的遗传编程中的表示、初始化和操作
- 第03章:准备运行遗传编程
- 第04章:遗传编程运行示例
- 第05章:基于树的遗传编程中的替代初始化和操作
- 第06章:模块化、语法和发育型树形GP
- 第07章:线性遗传编程和图遗传编程
- 第08章:概率遗传编程
- 第09章:多目标遗传编程
- 第10章:快速分布式遗传编程
- 第11章:GP理论及其应用
- 第12章:应用
- 第13章:GP故障排除
- 第14章:结论
通常,将专门用于不同应用和表示的遗传编程算法版本冠以新名称,例如“线性遗传编程”、“笛卡尔遗传编程”和“语法进化”。
一些关于这些特殊类型遗传编程算法的教科书包括以下内容:
- 线性遗传编程, 2006.
- 笛卡尔遗传编程, 2011.
- 语法进化:任意语言中的进化式自动编程, 2003.
- 动态环境下的语法进化基础, 2009.
- 语法进化手册, 2018.
会议论文集
机器学习中分享发现的主要方式是通过会议,会议论文集汇集了会议上的顶级论文。
任何给定会议上提交的论文都可能涉及不同主题,如果没有该领域的基础知识,可能难以理解。然而,它们可以快速让您了解当前和流行的技术。
我建议重点关注任何会议论文集的最新期刊。无需追溯往年。
有三份会议论文集您可能需要查看;它们是:
- 遗传编程理论与实践
- 欧洲遗传编程会议
- 遗传编程进展
让我们依次仔细看看它们
遗传编程理论与实践
遗传编程理论与实践会议每年举行一次,会议论文集由Springer出版。
这可能是GP领域最重要的会议。截至本文撰写时,已出版第17期(XVII)。
最近三期如下:
- 遗传编程理论与实践 XV, 2018.
- 遗传编程理论与实践 XVI, 2019.
- 遗传编程理论与实践 XVII, 2020.
欧洲遗传编程会议
欧洲遗传编程会议,或称EuroGP,是另一个主要的遗传编程会议。
与遗传编程理论与实践一样,这个会议及其出版的论文集已经持续了几十年,截至本文撰写时,已进入第23个年头。
最近三期如下:
- 遗传编程:第21届欧洲会议,EuroGP 2018
- 遗传编程:第22届欧洲会议,EuroGP 2019
- 遗传编程:第23届欧洲会议,EuroGP 2020
遗传编程进展
《遗传编程进展》是由麻省理工学院出版社出版的一本包含论文集的合集。
它在1990年代中后期只出版过三次。然而,其内容可能有助于加深对该领域的理解。
推荐书籍
我读过上面列出的大部分书籍。
如果您正在寻找一本关于遗传编程的书,我推荐以下这本:
- 遗传编程实地指南, 2008.
它将介绍该领域并向您展示如何快速获得结果。
如果您正在寻找更全面的书籍库,我推荐以下三本:
- 遗传编程 IV:常规人类竞争性机器智能, 2003.
- 遗传编程基础, 2002.
- 遗传编程实地指南, 2008.
我的书架上有这三本书。
有了这三本书,您将拥有坚实的理论基础,了解如何在实践中应用该技术,并了解已取得的人类竞争性结果类型以及用于实现这些结果的算法。
总结
在本教程中,您了解了关于遗传编程的顶级书籍。
您读过上面列出的任何书籍吗?
您怎么看?
我有没有漏掉您最喜欢的书?
在下面的评论中告诉我。














嗨,Jason,
首先,祝贺您发表了这篇有趣的帖子。这确实是一个值得深入探讨的问题。
我想向您请教一些关于遗传编程应用于优化空间问题的想法。我指的是应用于城市环境的空间维度问题。
我的博士论文是关于进化(达尔文)原理在城市系统中的应用。您可以在此链接查看:
http://hdl.handle.net/10251/114026
现在我正在尝试寻找遗传编程在解决复杂优化问题中的应用,例如,为物流公司选择合适的地点,或者类似的问题。我知道已经存在GP应用于优化车辆路线计算的案例。但我面临的问题有点不同,因为它不是一条路线,而是一个多选位置问题,我想找到一些方法。适应度函数中需要优化的参数应该是:距离、燃油消耗、设施数量或执行任务的车辆数量(也可能有其他参数)。
在这方面,我想请教您,您是否知道哪种类型的GP最适合这种问题?
换句话说,空间问题是否有任何优先的GP类型来进行优化计算?
这是我的问题。请随意回答您有任何疑问。
再次感谢您的评论。
如果您能回复我的电子邮件,我将不胜感激。
附:我的图书馆里还有一本不同于您提到的GP参考书。它叫做《进化计算导论,第二版》(Introduction to Evolutionary Computing, Second Edition),由Springer出版社出版,作者是A.E. Eiben和J.E. Smith。
谢谢!
我预计动态/整数/二次规划可以比GP更快/更好地解决大多数大型组合优化问题。我认为GP的优势在于创造性解决方案。但这只是个人意见。
谢谢 Jason,
抱歉我的无知,但是您所说的“创造性解决方案”是什么意思?
抱歉,我指的是那些非直觉的解决方案,只有当优化算法在对预想解决方案没有偏见的情况下探索/导航搜索空间时才能找到。
这本书也非常有趣
https://www.amazon.com/Handbook-Neuroevolution-Through-Erlang-Gene/dp/1461444624
感谢分享!
嗨 Jason
我们能否有一个GP实现或配方来解决基本的预测或优化问题..那将有助于我们欣赏其美妙之处。正在寻找一种更基于Python的GP实践方法。
好建议,谢谢!
嗨,Jason,
我读过您关于巧妙算法的书。我有一个关于GA和PSO伪代码的问题。其中有一个参数叫做“问题大小”,但我不太确定这个参数指的是什么,是代数还是迭代次数,或者它到底是什么?请尽快回答,我正在为我的论文编写类似的伪代码。我大约一年前买的这本书,我真的很喜欢它。
抱歉,我不再支持那本书(或对其记得不多),也许可以从这里开始:
https://github.com/clever-algorithms/CleverAlgorithms
好的,谢谢你 Jason!你能允许我在我的论文中重复使用一些伪代码吗?这仅用于学术目的,别无其他。
是的,只要您明确注明出处即可。