我正在尝试实现一个遗传算法来解决旅行商问题(TSP)。你知道吗
我有两个班,城市和健身。你知道吗
我已经完成了初始化的代码。你知道吗
class City:
def __init__(self, x, y):
self.x = x
self.y = y
def distance(self, city):
xDis = abs(self.x - city.x)
yDis = abs(self.y - city.y)
distance = np.sqrt((xDis ** 2) + (yDis ** 2))
return distance
def __repr__(self):
return "(" + str(self.x) + "," + str(self.y) + ")"
class Fitness:
def __init__(self, route):
self.route = route
self.distance = None
self.fitness = None
def routeDistance(self):
if self.distance == None:
pathDistance = 0.0
for i in range(0, len(self.route)):
fromCity = self.route[i]
toCity = None
if i+1 < len(self.route):
toCity = self.route[i+1]
else:
toCity = self.route[0]
pathDistance += fromCity.distance(toCity)
self.distance = pathDistance
return self.distance
def routeFitness(self):
if self.fitness == None:
self.fitness = 1 / float(self.routeDistance())
return self.fitness
def selection(population, size=None):
if size== None:
size= len(population)
matingPool = []
fitnessResults = {}
for i in range(0, size):
fitnessResults[i] = Fitness(population[i]).routeFitness()
matingPool.append(random.choice(population))
return matingPool
上面的代码只是在选择方法中随机选择一个父对象。你知道吗
我的问题是:如何代码选择父母使用轮盘赌轮子?你知道吗
你可以试试这个 [1,2]:
读this
所以基本上,一个适应值越高,它被选择的机会就越大。但此时,高健身价值意味着高健身。但是在TSP中,适应度值越低越好,所以要实现这一点,我们需要实现概率与适应度值间接成正比的概念。你知道吗
下面是我用python实现的一些东西,做了一些修改
其中
S
是当前总体适应值的倒数之和(即,1/f1+1/f2+1/f3+…)以及
get\u fitness\u value(x)返回距离的倒数,就像routeFitness()函数一样
TeeHee
相关问题 更多 >
编程相关推荐