在你的代码中的进化:理解和编码从头开始的遗传算法 —— 第1部分

Evolution in your code Understanding and coding genetic algorithms from scratch - Part 1

理解并从头开始创建代码

介绍-算法的灵感来源

Johannes Plenio在Unsplash上的照片

你是否曾经看着大自然,惊叹于生物如何演变、适应并在千年中生存下来?如果我告诉你,你坐在电脑前,拥有模拟类似的进化过程的能力,不是千年,而是仅仅几秒钟?当然,这是通过遗传算法实现的。

“遗传算法”(GA)的概念自20世纪60年代以来就存在,当时密歇根大学的约翰·霍兰德(John Holland)发现了它。

霍兰德的研究并不是从尝试在计算机中复制进化开始的。相反,他的目标是理解为什么和如何自然系统能够展现出这种内在的适应能力。他的研究成果最终导致了分类器系统的创建,这是一种可以随时间演化的结构化机器学习系统。

现在,你可能会问:“这不就是机器学习吗?”是的也不是。虽然分类器系统确实表现出“学习”行为,但它们与我们通常所认知的现代机器学习非常不同。分类器系统通过创建、混合和测试一组规则来工作。随着时间的推移,成功的规则(那些帮助系统表现更好的规则)得到强化,而效果不佳的规则则被修剪掉。整个过程类似于进化。

尽管最初用于解决抽象的数学问题,但人们很快意识到GA在解决复杂问题方面的有效性,使其成为解决复杂优化问题的首选算法之一。

在这个系列中,我们将使用遗传算法的原理来解决背包问题。

背包问题:旅行者的困境

背包问题是一个著名的组合优化问题,通常被用作优化的示例。

想象一下,你正在准备出国度假。航空公司有严格的行李重量限制,超出限制将很昂贵。你的行李箱可以装载各种各样的…