持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情
实验设计
本实验使用遗传算法,解决旅行商问题,模拟生物遗传进化过程来寻找TSP中的最短路径,使用公认的CTSP(Chinese TSP)标准数据库给出的31个城市坐标作为测试数据。
下面介绍实验的具体过程,主要分为编码、种群初始化、确定适应度函数、选择、交叉和变异几个步骤。
1 编码
TSP问题的解空间是遍历所有城市且每个城市都只能经过一次的路径集合,并且要求不能形成路径回路。根据该特性本实验采用序列编码来表示染色体,序列编码能够很好地满足TSP的约束要求,同时在计算个体的适应度值时无须解码,且更加容易设计变异算子。
序列编码过程中,每个染色体由按一定顺序排列的N个城市的序号组成,代表一条可能的旅行路径,染色体中的每个基因表示一个城市,染色体的长度为需要遍历的城市数N。
2 种群初始化
本实验的初始种群为多条旅行路径的集合,采用随机初始化种群的方式,随机生成城市的遍历路径并保存。
在TSP问题的求解过程中,种群规模的大小对遗传优化的结果和效率有着很大的影响,种群的规模过小会增加算法的最大进化迭代次数,种群的规模过大会增加每一次迭代时算法的计算量。所以根据TSP问题的解空间特点,本实验的初始种群规模SIZE设置为200。
3 适应度函数
由于遗传算法是解决最大值问题,个体的适应度越高被保留的概率就越大,而TSP是求取最短路径的问题,其最优适应度值应该是遍历所有城市且每个城市只遍历一次的路径最小值。因此需要对适应度函数进行有效变换。
4 选择
本实验采用的选择方法为:找出种群中适应度值的最大值和最小值,去除最小值对应的染色体,用最大值对应的染色体代替之,从而产生新的种群。
5 交叉
TSP问题要求每个城市都能被访问且不重复,即每个染色体中不能出现相同的基因,故本实验的交叉操作采用基于顺序的交叉方式。同时,顺序交叉方式还具有较好地保留相邻关系和先后关系,避免破坏父代染色体中原有优良特性的优点。
6 变异
本实验是求解31个城市的TSP问题,其解空间非常庞大,为使算法收敛于全局最优,变异概率取值应相对较大。本实验变异概率Pm设置为0.1,采用的变异策略为:首先从种群中随机选取一个染色体,再随机选取两个变异点,然后将两个变异点对应的基因互换,可生成一个与原染色体相似的新个体,完成了用变异后的新染色体替代旧染色体的更新过程。
7 终止条件
本实验采取使用一个比较大的进化迭代次数作为终止条件,迭代次数设置为200。