遗传算法:让答案像生物一样进化出来

不背公式,用一句话讲清楚遗传算法在干什么、什么时候值得用、什么时候别用。

一句话讲清楚

遗传算法就是让答案「自己进化出来」:先随机造一批方案,留下表现好的,让它们互相组合、偶尔变异,再淘汰一轮。反复几百代之后,剩下的往往就是很不错的解。

它不推导,也不证明。它只是不停地试,然后让好的活下来。

它到底在做什么

想象你在给一家餐厅排菜单,要在成本、口味、备料难度之间取平衡。可能的组合成千上万,你算不出哪个最优。

遗传算法的做法是:

  1. 先随机凑二十份菜单——大部分很烂,无所谓
  2. 打分——按成本和口味算出每份的得分
  3. 挑好的留下,差的淘汰
  4. 让留下的互相「杂交」——这份的前菜配那份的主菜
  5. 偶尔随机改一道菜(变异),免得所有方案越来越像
  6. 回到第 2 步,再来一轮

关键在第 5 步。如果只做杂交,几十轮之后所有菜单会长得一模一样,卡在一个不算好的方案上出不来。变异就是防止这件事——它逼着算法去试试没走过的路。

这个「留下好的、淘汰差的、偶尔乱来一下」的循环,就是它名字里「遗传」的来源。

什么时候值得用

算不出梯度的时候。 大部分现代 AI 靠梯度下降训练:算出「往哪个方向调一点会变好」,然后调。但很多问题根本没有这个方向可算——排班表、装箱、路线规划,改一个格子,好坏是跳变的,没有平滑的坡可下。

目标函数是个黑箱的时候。 你能给方案打分,但说不出打分的公式。遗传算法不需要知道公式,它只要能比较好坏。

要一批不同的好方案,而不是一个最优解的时候。 它天然维持着一群候选,最后能给你几个思路不同但都还行的方案,这在设计类问题里很有用。

什么时候别用

能算梯度就别用它。 训练神经网络这类问题,梯度下降又快又准,遗传算法慢几个数量级,还不保证更好。

要求最优解的时候别用。 它给的是「还不错」,不是「最好」,而且没法证明离最优有多远。真要最优解,该找运筹学的精确算法。

打分很贵的时候慎用。 它一轮要评估几十上百个方案,跑几百轮。如果每次打分都要跑一次仿真、花十分钟,这个成本会失控。

和别的方法比

它属于「启发式搜索」这一类,同族的还有模拟退火、粒子群。共同点是都不保证最优,都靠巧妙地试。

强化学习的区别常被搞混:强化学习是一个智能体在环境里反复试错、逐步学会策略;遗传算法是一群方案在互相竞争、靠淘汰筛出好的。前者在学,后者在筛。

记住这一点

遗传算法不聪明,它只是不知疲倦。当问题复杂到没法推导、只能一个个试的时候,「有组织地试」就是最实用的办法——这正是它到今天还没被淘汰的原因。

FAQ

遗传算法和机器学习是一回事吗?

不是。机器学习是从数据里找规律,遗传算法是在一堆可能的方案里挑更好的。两者可以配合——比如用遗传算法帮神经网络挑参数。

遗传算法过时了吗?

没有,但用途变窄了。在能算梯度的问题上,梯度下降又快又准;遗传算法的地盘是那些算不出梯度、只能试的问题。