我的GA个体是int
的随机序列(例如:[4, 5, 10, 11, 8, 12, 9, 13, 2, 6, 3, 7, 0, 14, 15, 1]
)遵循某个顺序约束,该约束在另一个自定义函数中处理。
如何在DEAP个人初始化中合并我的订单约束功能?
我以https://groups.google.com/forum/#!msg/deap-users/KZYYHCGrFyY/x1nXcXpCyscJ的灵感来实现这种方式:
class MyContainer(list):
def __init__(self, attributes):
# Some initialisation with received values
# self.attr1 = attributes[0]
pass
def generate_individual(ind_class, size):
# ind_class will receive a class inheriting from MyContainer
# individual = ind_class(random.random() for _ in range(size))
individual = ind_class(random.sample(range(IND_SIZE), k=size))
individual = make_individual_valid(individual, other_parameters)
# make_individual_valid is the self-defined order constraint function
return individual
creator.create('FitnessMin', base.Fitness, weights=(-1.0,))
creator.create('Individual', MyContainer, fitness=creator.FitnessMin)
toolbox = base.Toolbox()
toolbox.register('individual', generate_individual, creator.Individual, size=IND_SIZE)
toolbox.register('population', tools.initRepeat, list, toolbox.individual)
但是我得到了以下错误:
AttributeError: 'list' object has no attribute 'fitness'
答案 0 :(得分:0)
我有同样的错误。我意识到你的 generate_individual 函数会返回一个list []。因此,当创建新个体时,它将存储在列表中,从而在列表[[]]中为列表提供结果。如果您尝试打印一个人,为了获得所需的列表,您必须使用...
访问它individual[0]
...拥有您创建的列表。
目前我不知道如何解决这个问题(因为我是DEAP新手)。
修改强> 我找到了另一个解决这个问题的StackOverflow问题。我认为如果你检查它会很好。看看用户如何创建他的个人:
答案 1 :(得分:0)
一个旧线程,但是我想做类似的事情时遇到了它。
我正在做以下似乎很有效的工作。
pop = toolbox.population(n=POPSIZE)
pop[0] = creator.Individual((1.0 for _ in range(INDSIZE))) # add default individual
也许有人可以指出这是否有问题?
答案 2 :(得分:0)
您需要定义一个自定义属性函数并使用 DEAP 注册它。工具箱
答案 3 :(得分:0)
例如,下面的代码创建了具有 2 个独立属性的个体。
# Structure initializers
toolbox.register("attr_r", random.uniform, R_MIN, R_MAX)
toolbox.register("attr_l", random.uniform, L_MIN, L_MAX)
toolbox.register("individual", tools.initCycle, creator.Individual,(toolbox.attr_l,
toolbox.attr_r,toolbox.attr_l,toolbox.attr_l,toolbox.attr_r,toolbox.attr_l,toolbox.attr_l,toolbox.attr_r,toolbox.attr_l), n=N_CYCLES)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)