使用遗传算法(GA)解决 TSP 问题

205 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第三十二天,点击查看活动详情

总结:此文为12月更文计划第三十二天第四十七 篇。

1 遗传算法,旅行商问题

遗传算法是受自然进化理论启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为 涉及搜索,优化和学习的各种问题提供高质量的解决方案。将达尔文的进化论对应于遗传算法,遗传算法试图 找到给定问题的最佳解。达尔文进化论保留了种群的个体性状,而遗传算法则保留了针对给定问题的候选解 集合(也称为 individuals)。这些候选解经过迭代评估(evaluate),用于创建下一代解。更优的解有更大的机 会被选择,并其特征传递给下一代候选解集合。这样,随着代际更新,候选解集合可以更好地解决当前的问 题。

旅行商问题(Travelling Salesman Problem, TSP)又称旅行推销员问题,是数学领域的著名问题之一。假 设有一个旅行商人要拜访 N 个城市,每个城市只能拜访一次,而最后要回到原来的城市。旅行商问题的内容 便是如何选择拜访城市的路线,使得总的路程最小。这里城市之间的位置坐标使用 Berlin52 数据集。

2 遗传算法

2.1 遗传算法编程设计

遗传算法(GeneticAlgorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算 模型,通过模拟自然进化过程搜索最优解。遗传算法是从首先是初始化一个种群,然后根据适应性函数确定 个体的适应度,由适应度来选择个体进行交叉,以某种概率让个体进行变异,从而不断选出适应度高的个体, 进而更新种群。

算法流程图如下图所示。

  1. 创建初始种群:初始种群是随机选择的一组有效候选解(个体)。由于遗传算法使用染色体代表每个个 体,因此初始种群实际上是一组染色体。

  2. 计算适应度适应度:函数的值是针对每个个体计算的。对于初始种群,此操作将执行一次,然后在应 用选择、交叉和突变的遗传算子后,再对每个新一代进行。由于每个个体的适应度独立于其他个体,因此可以 并行计算。

  3. 选择、交叉和变异:将选择,交叉和突变的遗传算子应用到种群中,就产生了新一代,该新一代基于当 前代中较好的个体。 选择(selection)操作负责当前种群中选择有优势的个体。

交叉(crossover,或重组,recombination)操作从选定的个体创建后代。这通常是通过两个被选定的个体

互换他们染色体的一部分以创建代表后代的两个新染色体来完成的。

变异(mutation)操作可以将每个新创建个体的一个或多个染色体值(基因)随机进行变化。突变通常以

非常低的概率发生。