(Python)遗传算法解决旅行商问题(GA-TSP)

原视频:【算法】遗传算法解决旅行商(TSP)问题_哔哩哔哩_bilibili

代码链接:ga.py · main · mirrors / zifeiyu0531 / ga-tsp · GitCode

up主的讲解很有东西,这里对代码进行汇总,对一些小白看起来可能遇到的小问题进行备注。

一、代码构成

        共有三个py文件构成:main.py主程序入口、ga.py遗传算法的流程、config.py一些基本参数的配置。

1.main.py

import turtle
import numpy as np
import my_utils.ga_tsp_config as conf
import my_utils.ga
import matplotlib.pyplot as plt

config = conf.get_config()

# 城市距离矩阵计算方法
def build_dist_mat(input_list):
    n = config.city_num
    dist_mat = np.zeros([n, n])
    for i in range(n):
        for j in range(i + 1, n):
            d = input_list[i, :] - input_list[j, :]
            # 计算点积
            dist_mat[i, j] = np.dot(d, d)
            dist_mat[j, i] = dist_mat[i, j]
    return dist_mat


# 随机生成城市坐标
city_pos_list = np.random.rand(config.city_num, config.pos_dimension)
# 城市距离矩阵
city_dist_mat = build_dist_mat(city_pos_list)

print("\n", city_pos_list)
print(city_dist_mat)

# 遗传算法运行
ga = my_utils.ga.Ga(city_dist_mat)  # 实例化一个Ga类
result_list, fitness_list = ga.train()  # result_list路线结果图  fitness_list适应度结果,对应两个图
result = result_list[-1]    # list[-1]:返回最后一个数据,这个集合中存放每一代对应的解,最终的结果为最后一代基因的路线
result_pos_list = city_pos_list[result, :]

# 绘图
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

fig = plt.figure()
plt.plot(result_pos_list[:, 0], result_pos_list[:, 1], 'o-r')
plt.title(u"路线")
# plt.legend()
plt.legend(["This is my legend"], fontsize="x-large")
fig.show()

fig = plt.figure()
plt.plot(fitness_list)
plt.title(u"适应度曲线")
# plt.legend()
# 这里为空的话,会
  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值