遗传算法是受到生物学的启发。先随机生成一组解,称为“种群”,对此进行排序,将成本最小的一部分(精英成员)直接加入“下一代种群”,这一过程称为“精英选拔”。然后另有两种方式生成新的成员加入到“下一代种群”中。
第一种是变异(mutate),做法是对一个最优解做某个方向的单一调整,在“组团出游”的问题里,既是对解中的某一个值做递增或者递减:
第二种是交叉(crossover),做法是选择两个最优解,将它们以某种方式结合,在本题中,两个解分表提供一部分值组成一个新解:
生成新的种群后(数量通常和原种群一致),下一轮“遗传”再开始,直到指定的迭代数或者直到没有更新的解出现为止。
这个系列来自《集体智慧编程》的第五章,完整golang代码在https://github.com/baixiaoustc/optimization