一、遗传算法思路
1、染色体设计
用遗传算法解决TSP问题,一段旅程的路径是n个城市的排列。在染色体设计中应当基于路径,一条完整的路径即为一个染色体。
2、产生初始种群
在本程序中通过随机打乱城市排列顺序获得个体,再对个体进行一定程度的改良,改良方法同样是对个体内的基因进行随机交换,保留产生的最优个体。
3、选择繁殖个体
在本程序中采用杰出选择策略,按照比例保留种群中适应性强的个体,对于适应性弱的个体按照设置的存活概率保留。
4、交叉繁殖
使用部分匹配交叉方法,随机选取两个交叉点,以便确定一个匹配段,根据两个父个体中两个交叉点之间的中间段给出的映射关系生成两个子个体。
5、变异
设定变异概率,对于每个子代个体都存在一定的变异概率,随机抽取两个城市,交换他们的位置。
6、 更新种群
将父代与子代共同组成新一代的种群。
二、源代码
import numpy as np
import matplotlib.pyplot as plt
import math
import random
# 种群数
population_num = 300
# 改良次数
improve_count = 1000
# 进化次数
iter_count = 3000
# 设置强者的概率,种群前30%是强者,保留每代的强者
retain_rate = 0.3
# 设置弱者的存活概率
live_rate = 0.5
# 变异率
mutation_rate = 0.1
# 起始点
origin = 10
'''
载入数据
'''
def read_data():
city_name = []
city_position = []
with open("demo.txt", 'r') as f:
lines = f.readlines()
for line in lines:
line = line.split('\n')[0]
line = line.split('\t')
city_name.append(line[0])
city_position.append([float(line[1]), float(line[2])])
city_position = np.array(city_po