遗传算法:让答案像生物一样进化出来
不背公式,用一句话讲清楚遗传算法在干什么、什么时候值得用、什么时候别用。
一句话讲清楚
遗传算法就是让答案「自己进化出来」:先随机造一批方案,留下表现好的,让它们互相组合、偶尔变异,再淘汰一轮。反复几百代之后,剩下的往往就是很不错的解。
它不推导,也不证明。它只是不停地试,然后让好的活下来。
它到底在做什么
想象你在给一家餐厅排菜单,要在成本、口味、备料难度之间取平衡。可能的组合成千上万,你算不出哪个最优。
遗传算法的做法是:
- 先随机凑二十份菜单——大部分很烂,无所谓
- 打分——按成本和口味算出每份的得分
- 挑好的留下,差的淘汰
- 让留下的互相「杂交」——这份的前菜配那份的主菜
- 偶尔随机改一道菜(变异),免得所有方案越来越像
- 回到第 2 步,再来一轮
关键在第 5 步。如果只做杂交,几十轮之后所有菜单会长得一模一样,卡在一个不算好的方案上出不来。变异就是防止这件事——它逼着算法去试试没走过的路。
这个「留下好的、淘汰差的、偶尔乱来一下」的循环,就是它名字里「遗传」的来源。
什么时候值得用
算不出梯度的时候。 大部分现代 AI 靠梯度下降训练:算出「往哪个方向调一点会变好」,然后调。但很多问题根本没有这个方向可算——排班表、装箱、路线规划,改一个格子,好坏是跳变的,没有平滑的坡可下。
目标函数是个黑箱的时候。 你能给方案打分,但说不出打分的公式。遗传算法不需要知道公式,它只要能比较好坏。
要一批不同的好方案,而不是一个最优解的时候。 它天然维持着一群候选,最后能给你几个思路不同但都还行的方案,这在设计类问题里很有用。
什么时候别用
能算梯度就别用它。 训练神经网络这类问题,梯度下降又快又准,遗传算法慢几个数量级,还不保证更好。
要求最优解的时候别用。 它给的是「还不错」,不是「最好」,而且没法证明离最优有多远。真要最优解,该找运筹学的精确算法。
打分很贵的时候慎用。 它一轮要评估几十上百个方案,跑几百轮。如果每次打分都要跑一次仿真、花十分钟,这个成本会失控。
和别的方法比
它属于「启发式搜索」这一类,同族的还有模拟退火、粒子群。共同点是都不保证最优,都靠巧妙地试。
和强化学习的区别常被搞混:强化学习是一个智能体在环境里反复试错、逐步学会策略;遗传算法是一群方案在互相竞争、靠淘汰筛出好的。前者在学,后者在筛。
记住这一点
遗传算法不聪明,它只是不知疲倦。当问题复杂到没法推导、只能一个个试的时候,「有组织地试」就是最实用的办法——这正是它到今天还没被淘汰的原因。
FAQ
遗传算法和机器学习是一回事吗?
不是。机器学习是从数据里找规律,遗传算法是在一堆可能的方案里挑更好的。两者可以配合——比如用遗传算法帮神经网络挑参数。
遗传算法过时了吗?
没有,但用途变窄了。在能算梯度的问题上,梯度下降又快又准;遗传算法的地盘是那些算不出梯度、只能试的问题。