Logo
Section 1 / 11

简介

让我们来学习启发式方法和种群方法。

导入

简介

让我们来学习启发式方法和种群方法。

进化论认为,今天我们所看到的各种生命形式是经过数百万年演化、突变和适应的结果。那些产生有利突变的个体得以生存下来,并将这些突变传递给下一代。正是通过这种方式,进化解释了像我们这样复杂生命形式的存在。

我们不会在这里展开关于进化论的争论,但这一思想在优化领域中得到了应用。正如查尔斯·达尔文理论中描述的那样,进化并不是一个精心设计、必然导向当前生物形态的过程。它没有保证收敛的机制,而只是一个持续数百万年的过程,最终自然产生某种结果。

在优化问题中,我们也可以采用类似的方法。有时目标函数非常复杂甚至未知,我们无法保证任何特定条件或行为,也无法确保收敛。在这种情况下,我们只能从大量候选解开始尝试,看看是否幸运地找到最优解。

这听起来似乎有些荒谬:候选解的数量可能极其庞大(甚至无限),而其中可能只有一个是最优解。逐一探索所有可能性显然不可行。但我们不会盲目地进行探索。相反,我们将模仿进化过程,让表现较好的候选解胜出,并生成下一代更优的候选解。通过这种方式,我们希望在模拟进化的某个阶段,最终找到所需的解。

...

启发式方法

到目前为止,我们讨论的都是算法。算法是一组定义明确的步骤,只要满足特定条件,就能始终给出我们期望的答案。算法可以是精确的(如“导数与梯度”章节中提到的解析方法),也可以是近似的(如前一节中设定误差容差的算法)。

精确算法总能给出准确答案——它们是舞台上的主角。但正如我们已经了解到的,有时我们无法使用或负担这类算法。它们可能有严格的前提要求,或者计算成本过高。因此,在某些情况下,我们会使用近似算法。虽然不能得到精确解,但可以获得一个可量化且可控的近似结果。所谓“可量化”的近似,是指我们可以衡量其误差范围。例如,当我们设定误差容差为 10−610^{-6} 时,意味着我们的近似解最多偏离真实解 10−610^{-6}。

到目前为止,我们能解决的问题要么有精确解,要么可以通过控制误差获得足够好的近似解。但(令人意外的是!)现实中存在大量问题,既无法用精确算法求解,也无法用近似算法保证达到任意精度。这时我们需要引入一种全新的算法类型。

启发式方法并不保证收敛。我们无法证明它们一定能给出精确解,也无法保证近似解的误差在某个特定范围内。然而,从实践经验来看,这些方法具有合理性。

...
不同优化算法版本的分类

举个例子:假设我们要去某个地方,但不知道具体位置。如果使用谷歌地图,我们会得到精确(或有时近似)的导航指引——比如“下一个路口左转,直走三个街区,再左转”,就能到达目的地。谷歌地图提供的是一个算法。

现在假设我们处于离线状态,没有地图或其他辅助工具来帮助规划路线。该怎么办?很可能向别人询问方向。对方可能会告诉我们路径,也可能说不出所以然。我们可能在途中再次迷路,不得不继续问下一个人,希望最终能抵达目的地。注意,我们无法确信任何结果:也许周围没人可以求助,或者对方对地点一无所知,甚至可能误导我们。尽管如此,我们仍然会不断询问,几乎总是能找到想要的目的地。

在这个场景中,我们实际上使用的就是一种启发式方法。有人曾说,启发式方法就像是穿上了小丑服装的算法。关键在于:这种启发式方法并不要求我们拥有地图或网络连接。我们之所以采用它,是因为别无选择。在优化问题中,我们面临的情况也类似。

有时我们无法确认问题是否满足精确算法或近似算法的前提条件;有时这些算法所需的运行时间和内存资源超出了我们的承受能力。在这种情况下,我们别无选择:必须借助启发式方法来获得解决方案。

群体方法

我们将研究一类特殊的启发式方法——群体方法。这类方法通过探索所有可能解的空间来寻找最优解。当然,这个解空间通常极为庞大;否则,就会存在一个穷举所有解的精确算法,从而直接找出最佳解。

为了应对解空间的巨大规模,群体方法采用一些技巧,这些技巧通常是通向良好解的捷径。然而,我们无法保证这些技巧一定有效,也无法预知最终解的质量如何。

我们之所以要学习群体方法,是因为它们是目前最广泛使用的启发式技术之一,并已被证明非常高效。判断一个启发式方法是否优秀,可以通过实验对比其他方法的表现。即使我们不知道问题的精确解或近似解,也可以将自己的结果与其他研究者已取得的成果进行比较。此外,还可以比较执行时间、内存消耗等关键指标,这些因素在选择求解方法时至关重要。

注意:你可能会遇到另一个术语——元启发式(metaheuristic)。启发式方法针对特定问题设计,而元启发式则与具体问题无关。我们接下来要学习的内容属于元启发式,因为这些方法可以应用于任何优化问题。不过,为了避免一开始就引入过多新术语,这里仅作简要说明,以便你在查阅其他资料时能够理解相关概念。

正如本课开头所述,群体方法通过模拟进化过程来寻找尽可能好的答案。整个过程始于一组初始解(即初始种群),然后由启发式规则控制这些解如何从一代演化到下一代。当满足某个终止条件时,过程结束。我们将深入学习两种典型的群体方法:遗传算法和粒子群优化。同时,我们也会简要介绍其他类似的群体方法。

本节以及下一节可能是本课程中最实用的部分。完成这两部分内容后,你将具备应对任何优化问题的能力。希望这能激励你保持学习的动力!

总结与结论

遗传算法