【问题标题】:Number of selected individuals for eaSimple algorithm from DEAP with selBest selection使用 selBest 选择的 DEAP 中的 eaSimple 算法选择的个体数量
【发布时间】:2019-11-05 15:58:03
【问题描述】:

我正在尝试从DEAP module 运行eaSimple 算法。我想指定每一代要选择的个体数量。但是,如果我为selection function 指定k 参数,则会收到错误消息。

from deap import base, tools, creator, algorithms
import random
import numpy as np

def fitness(individual):
    x = individual[0]
    y = individual[1]
    return np.exp(-9*x*y) * np.sin(3*np.pi*x)**2 * np.sin(3*np.pi*y)**2,

toolbox = base.Toolbox()

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox.register("individual", tools.initRepeat, creator.Individual, random.random, n=2)

toolbox.register("population", tools.initRepeat, list, toolbox.individual)

toolbox.register('evaluate', fitness)
toolbox.register('mutate', tools.mutPolynomialBounded, eta=.6, low=[0,0], up=[1,1], indpb=0.1)
toolbox.register('mate', tools.cxUniform, indpb=0.5)
toolbox.register('select', tools.selBest, k=50)

pop = toolbox.population(n=100)

pop, logbook = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.1, ngen=100)

这个例子的最后一行引发了错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-5ee0faee2c49> in <module>
----> 1 pop, logbook = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.1, ngen=100)

/usr/local/lib64/python3.7/site-packages/deap/algorithms.py in eaSimple(population, toolbox, cxpb, mutpb, ngen, stats, halloffame, verbose)
    163     for gen in range(1, ngen + 1):
    164         # Select the next generation individuals
--> 165         offspring = toolbox.select(population, len(population))
    166 
    167         # Vary the pool of individuals

TypeError: selBest() got multiple values for argument 'k'

请注意,将行 toolbox.register('select', tools.selBest, k=50) 替换为 toolbox.register('select', tools.selBest) 可以消除错误。


这里k的默认值是多少,如何指定k自己的值?

【问题讨论】:

    标签: python-3.x deap


    【解决方案1】:

    eaSimple 算法中,实际上没有进行任何选择。来自the documentation 的伪代码描述了后台状态

    population = select(population, len(population))
    

    这意味着选择初始种群大小的种群子集(即整个种群)进行突变、交配和评估。

    然后算法会做

    population = offspring
    

    因此,变异和交配产生的所有个体都取代了所有父母。


    这也(某种程度上)回答了问题的第二部分:eaSimple 无法在 selBest 方法中为 k 指定自定义值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2015-05-22
      相关资源
      最近更新 更多