遗传算法解决TSP问题 python实现

遗传算法解决TSP问题

核心部分伪代码

population_cur = init_population()
# 计算当前种群的适应值
fitness = get_fitness(population_cur)
while 不满足终止条件:
	# 保留一部分父代精英
	population_next = select_sorted_population(fitness, population_cur, elite_size)
	# 杂交
    for i in range(population_size):
    	# 这里可以自己加入杂交概率
        p1, p2 = selection(fitness, 2)  # 使用轮盘赌选择算子 随机选两个作为父母
        child1, child2 = crossover(population_cur[p1], population_cur[p2])

        # 对孩子进行变异
        if random.random() < p_mutation:
            child1 = mutations.select_best_mutaion(child1, distmat)
        if random.random() < p_mutation:
            child2 = mutations.select_best_mutaion(child2, distmat)
		
        population_next.append(child1)
        population_next.append(child2)
        # 这时一共有种群大小*四分之五个个体,从中选出下一代的种群
        population_next = select_sorted_population(get_fitness(population_next), population_next, population_size)
	 	# 换代
        population_cur = population_next

采用一种效果较好的变异方法

对一个待变异的个体A,分别进行滑动变异翻转变异irgibnnm变异,取三种变异结果最好的那种1

滑动变异

随机生成两个下标a,b (a<b); 将s[a]挪到s[b]后面

演示动图:
滑动变异动图

翻转变异

随机生成两个下标a,b ; 将s[a]到s[b]之间的序列倒过来

翻转变异也叫2变换法,演示动图:
翻转变异动图

irgibnnm变异

先对序列进行一次翻转变异;随机挑选一个城市,把他交换到地图距离与他最近的城市附近去,文献中的附近是±5

这种变异方法的实验结果好像不如文献中展示的结果那么好,可能是我实现错了?演示动图:
ir变异动图

运行与结果

运行gsp_ga.py文件即可

数据集用的是78个点2,在我的电脑上大概跑10s左右,印象中最优距离是5400m左右
运行结果

遗传算法完整代码

github完整代码

参考


  1. Improving TSP Solutions Using GA with a New Hybrid Mutation Based on Knowledge and Randomness ↩︎

  2. github大佬模拟退火解决tsp问题 ↩︎

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值