J'utilise un algorithme génétique pour résoudre un problème d'optimisation. J'utilise la mémorisation pour accélérer le calcul car l'évaluation de la condition physique prend du temps. Il est mis en œuvre de la manière suivante:Memoization Python avec dict - Performance Numéro
def memoize(f):
memo = {}
def helper(my_input):
if my_input not in memo:
if len(memo)%100000==0:
print('increased memo size:', len(memo))
memo[my_input] = f(my_input)
return memo[my_input]
return helper
@memoize
def eval_fitness(individual):
#time consuming calc
return fitness
J'ai remarqué que la taille de la note de service dict augmente rapidement dans les premières générations, puis augmente plus lentement (par exemple atteindre les clés de 14M à la génération 500). D'autre part, le temps écoulé pour chaque génération est élevé (c'est-à-dire 40s) dans les premières générations, puis diminue, car la mémoisation est payante. Néanmoins, comme le montre l'image ci-dessus, j'ai remarqué un comportement non monotone de la série de données de temps écoulé: le calcul ralentit et le temps de calcul global augmente considérablement.
J'utilise un processus unique. L'utilisation de la mémoire est en sécurité de moins de 20%.
- Des idées sur la cause sous-jacente de ce comportement?
- Comment puis-je éviter ce ralentissement?
Merci de votre réponse. J'ai édité ma question en ajoutant l'intrigue de la taille du dictionnaire à chaque génération. En fait, cela indique qu'il n'y a pas de tels moments de stabilité démographique/beaucoup de nouveaux individus; en effet, il est incohérent avec le tracé temporel écoulé. –