from pylab import *
import numpy as np
import sys
def initial():
generation = [0,0,1,1,1,1,1,1,1,0,0,0,0,0]
generation = generation
return generation
def fitness(flag):
global transfer
transfer = []
newgeneration1 = pairing()
scores = [1,2,3,7,6,5,3]
if flag < 1:
generation = initial()
else:
generation = newgeneration1
transfer.append(generation)
transfer.append(scores)
print(transfer)
return transfer
def pairing():
transfer = fitness(i)
scores = transfer[1]
generation1 = transfer[0]
newgeneration = [1,0,1,0,0,0,0,0,1,0,1,1,1,1]
return newgeneration
initial()
for i in range(3):
fitness(i)
pairing()
if i == 3:
scores = fitness(i)
print("The following is the final generation: ")
print(pairing(i-1))
print("Here are the scores: ")
print(scores)
sys.exit()
Au-dessus est une version simplifiée de ce que j'ai en termes d'un code de l'algorithme génétique en Python 3.5, quand je lance ce que je reçois une erreur qui dit: profondeur de récursivité maximale dépassée, je J'essaie de l'obtenir pour faire la fonction initiale une fois, puis boucle entre la remise en forme et l'appariement pour un certain nombre d'itérations, le problème est, appariement() crée une nouvelle génération, et fitness doit prendre cette nouvelle génération et déterminer son aptitude , puis il envoie cela à l'appariement, et une autre nouvelle génération est créée ... etc. vous avez eu l'idée. Merci d'avance pour votre aide!Python 3.5 - algorithme génétique en boucle
'appariement()' a appelé 'condition physique (i)' et 'condition physique()' appelé 'appariement() 'retour sans jugement conditionnel. C'est une boucle morte. –
Et évitez d'utiliser 'global'. Au lieu de cela, passez 'transfer' dans' paring' – pylang
Ne faites pas 'de pylab import *' si vous essayez de faire un travail reproductible. Cela va taper votre espace de noms. – pylang