Я следовал решению, которое я нашел в книге под названием Deap by Example, в которой автор решил TSP с помощью GA с библиотекой Deap, поэтому мой код выглядит следующим образом:
import sys
import array
import random
import numpy as np
import matplotlib.pyplot as plt
from deap import algorithms
from deap import base
from deap import creator
from deap import tools
def fitnessTSP(ind,x,y):
diffx=np.diff(x[ind])
diffy=np.diff(y[ind])
dist=np.sum(diffx**2-diffy**2)
return dist
def main():
numCities=10
random.seed(169)
x=np.random.rand(numCities)
y=np.random.rand(numCities)
print (x)
print (y)
plt.plot(x,y)
plt.show
creator.create("fitness_func",base.Fitness,weights=(-1,0))
creator.create("Individual",array.array,typecode='i',fitness=creator.fitness_func)
toolbox=base.Toolbox()
toolbox.register("indices",random.sample,range(numCities),numCities)
toolbox.register("individual",tools.initIterate,creator.Individual,toolbox.indices)
toolbox.register("population",tools.initRepeat,list,toolbox.individual)
toolbox.register("mate",tools.cxOrdered)
toolbox.register("mutate",tools.mutShuffleIndexes,indpb=0.05)
toolbox.register("select",tools.selTournament,tournsize=3)
toolbox.register("evaluate",fitnessTSP)
pop=toolbox.population(n=300)
best=tools.HallOfFame(1)
algorithms.eaSimple(pop,toolbox,0.7,0.2,140,halloffame=best)
if __name__=="__main__":
main()
Когда я запускаю его, я получаю следующую ошибку:
fitnessTSP() missing 2 required positional arguments: 'x' and 'y'
Я пытался передать эти аргументы, но я не знаю, что делать с параметром ind, который должна получить функция. Например, я пробовал это:
toolbox.register("evaluate",fitnessTSP("individual",x,y))
Как я могу исправить этот код?
Спасибо