旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
进化算法框架加上有利的重组算子(A Comparison of Genetic Sequencing Operators[1])
[1] Starkweather T, McDaniel S, Mathias K E, et al. A Comparison of Genetic Sequencing Operators[C]//ICGA. 1991: 69-76.
下面是部分代码,完整代码太长,可在GitHub - busyxu/TSP找到
from TSP import input, init, select, fitness, crossover, mutation
if __name__ == '__main__':
# 种群大小
IndividualTotal = 200
# 进化次数
maxEvolve = 500
# 交叉概率
crossoverProbability = 0.7
# 变异概率
mutationProbability = 0.3
citys = input.input_city()
N = len(citys)
dt = init.dt_function(citys)
population = init.init_population(IndividualTotal, N)
fitness.FitnessFunction(population, N, dt)
for i in range(maxEvolve):
if i % 20 == 0:
num = []
index = []
best = select.BestIndividual(population)
print(best)
print('****************第', i, '代******************')
population = select.vs_select(IndividualTotal, population) # 竞标赛选择算子
# population = select.roulette_select(IndividualTotal, population) # 轮盘赌选择算子
population = crossover.edge_crossover(N, population, crossoverProbability) # 边重组交叉算子 ER
# population = crossover.oder_crossover(N, population, crossoverProbability) # 顺序交叉算子 OX
# population = crossover.cycle_crossover(N, population, crossoverProbability) # 循环交叉算子 CR
# population = crossover.PMX_crossover(N, population, crossoverProbability) # 部分匹配交叉算子 CR
# population = crossover.position_based_crossover(N, population, crossoverProbability) # 基于位置交叉算子 PBX
population = mutation.mutation(N, population, mutationProbability)
fitness.FitnessFunction(population, N, dt)
pass
best = select.BestIndividual(population)
print('***************最优解**************')
print(best)
[2] Yang X, Zou J, Yang S, et al. A Fuzzy Decision Variables Framework for Large-scale Multiobjective Optimization[J]. IEEE Transactions on Evolutionary Computation, 2021.
[3] Zou J, Yang X, Liu Z, et al. Multiobjective Bilevel Optimization Algorithm Based on Preference Selection to Solve Energy Hub System Planning Problems[J]. Energy, 2021: 120995.
[4] Liu J, Yang X, Liu Z, et al. Investigation and evaluation of building energy flexibility with energy storage system in hot summer and cold winter zones[J]. Journal of Energy Storage, 2022, 46: 103877.