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()
выше упрощенная версия того, что у меня есть с точкой зрения генетического кода алгоритма в питоне 3.5, когда я запускаю это я получаю сообщение об ошибке, которая говорит: максимальная глубина рекурсии превышена, я я пытаюсь заставить его сделать начальную функцию один раз, а затем петлю между фитнесом и спариванием для определенного количества итераций, проблема в том, что спаривание() создает новое поколение, а фитнес должен принимать это новое поколение и определять его пригодность , то он отправляет это на сопряжение, и создается новое новое поколение. вы получаете идею. Заранее благодарю за любую помощь!Python 3.5 - генетический алгоритм зацикливание
'спаривание()' называется 'фитнес (я) и' фитнес() 'называется' спаривание() "без каких-либо условных суждений. Это мертвая петля. –
И избегайте использования 'global'. Вместо этого передайте 'transfer' в' paring' – pylang
Не делайте 'из импорта pylab *', если вы пытаетесь выполнить воспроизводимую работу. Это скроет ваше пространство имен. – pylang