课设需要做这个题目,看了http://www.tuicool.com/articles/Fb2YjeF之后下了他在github上的代码https://github.com/zchlong/tsp,发现一些错别字这份代码里改正了。
三个文件:
1.GA.py遗传算法类
2.Life.py基因序列类
3.TSP_GA.py 旅行商算法类,届时直接运行这个代码文件即可
4.34所城市经纬度distanceMatrix.txt
格式:
城市名 经度 纬度
1.GA.py遗传算法类
# -*- coding: utf-8 -*-
import random
from Life import Life
class GA(object):
"""遗传算法类"""
def __init__(self, aCrossRate, aMutationRate, aLifeCount, aGeneLength, aMatchFun = lambda life : 1):
self.crossRate = aCrossRate #交叉概率
self.mutationRate = aMutationRate #突变概率
self.lifeCount = aLifeCount #种群数量,就是每次我们在多少个城市序列里筛选,这里初始化为100
self.geneLength = aGeneLength #其实就是城市数量
self.matchFun = aMatchFun #适配函数
self.lives = [] #种群
self.best = None #保存这一代中最好的个体
self.generation = 1 #一开始的是第一代
self.crossCount = 0 #一开始还没交叉过,所以交叉次数是0
self.mutationCount = 0 #一开始还没变异过,所以变异次数是0
self.bounds = 0.0 #适配值之和,用于选择时计算概率
self.initPopulation() #初始化种群
def initPopulation(self):
"""初始化种群"""
self.lives = []
for i in range(self.lifeCount):
#gene = [0,1,…… ,self.geneLength-1]
#事实就是0到33
gene = range(self.geneLength)