文章目录
TSP问题
之前用遗传算法解决了:多项式求极大值的问题。这个问题实在是太简单了,现在我们来处理一下更困难的问题——TSP旅行商问题
问题描述
TSP旅行商问题,traveling Salesman problem
-
如果旅行商从A地到B地的花费与B地到A地的花费相等,我们称之为对称旅行商问题(Symmetric Travelinig Salesman Problem(STSP))
反之就是非对称旅行商问题ATSP
TSP问题的一个特殊性在于它必然存在可以找到的最优解(通过穷举法一定能在时间内找到该最优解),但是在计算复杂度方面它是一个经典的NP-hard问题。因而快速有效寻找TSP的最优解仍然是个有吸引力的问题。
在实际应用方面,它可以被视为物流调度,交通规划,芯片布线优化等等问题的抽象简化。
代码精讲
def genCity(n,LB=100,Ub=999):
np.random.seed(42)
return np.random.randint(low = Lb,high = Ub,size(n,2))
运行结果:
def cityDistance(cities):
return distance.cdist(cities,cities,'euclidean')
运行结果:
def completeRoute(individual):
return individual + [individual[0]]
这个completeRoute函数是用来表示:最后旅行商还要回到出发,也就是第一个城市的。
要记住给出来的这个方法,不是最优解,针对TSP问题,有很多很多种方法,之后我会专门写一个博文来讲解TSP问题
觉得博文有用的话,点个赞呗
整体代码(方便复制)
## 环境设置
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
from scipy.spatial import distance
from deap import creator, base, tools, algorithms
import random
params = {
'font.family': 'serif',
'figure.figsize': [4.0, 3.0],
'figure.dpi': 300,
'savefig.dpi': 300,
'font.size': 12,
'legend.fontsize': 'small'
}
plt.rcParams.update(params)
#--------------------------------
## 定义TSP中的基本元素
# 用[n,2]的np.array存储城市坐标;每行存储一个城市
def genCity(n, Lb = 100 ,Ub = 999):
# 生成城市坐标
# 输入:n -- 需要生