DEAP: создание пользовательской функции индивидуального генератора вместе с функцией фитнеса - PullRequest
1 голос
/ 10 октября 2019

Я написал свою собственную функцию для генерации индивидуума

def generate_Individual(arr1,arr2):
    np.random.shuffle(arr1)
    np.random.shuffle(arr2)
    Candidate = tuple(zip(arr1,arr2))
    return Candidate

def generate_Fitness(Individual):
    sum_some = 0
    for i in  range (0,len(Individual)):
        sum_some = sum_some + cals(Individual[i][0],Individual[i][1])
    return sum_some

Это я регистрируюсь на панели инструментов DEAP

import random
from deap import base
from deap import creator
from deap import tools
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
toolbox.register("Individual", generate_Individual,arr1,arr2)
toolbox.register("population", tools.initRepeat, list, toolbox.Individual)

Теперь скажите, что я звоню населению 4 с этим кодом

pop = toolbox.population(n=4)
pop[0]
pop[3]

Оказывается, все 4 человека в популяции одинаковы, хотя случайность, которую я встроил в функцию генератора

Почему это происходит?

1 Ответ

0 голосов
/ 06 ноября 2019

Если я использую, например,

arr1=[1, 2, 3, 4]
arr2=[5, 6, 7, 8]

, то с вашим кодом, люди в населении обычно разные.

На самом деле, если только len(arr1)<=1 или len(arr2)<=1, вы будете получать разных людей как минимум в половине случаев. Так что, если ваши люди такие же, то либо создайте более длинные списки для arr1 и arr2, либо запустите pop = toolbox.population(n=4) во второй раз.

...