DEAP:创建自定义个性化生成器函数以及适应性函数

时间:2019-10-10 05:02:38

标签: python deap

我已经编写了自己的函数以生成个人

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 :(得分:0)

如果我使用实例

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

然后使用您的代码,总体中的个体通常是不同的。

实际上,除非len(arr1)<=1len(arr2)<=1,否则您将至少有一半的时间得到不同的人。因此,如果您的个人相同,则可以为arr1arr2列出更长的列表,或者第二次运行pop = toolbox.population(n=4)