使用 selBest 选择从 DEAP 中为 eaSimple 算法选择的个体数
Number of selected individuals for eaSimple algorithm from DEAP with selBest selection
我正在尝试 运行 来自 DEAP module. I would like to specify the number of individuals to be selected at each generation. However, if I specify a k
parameter for the selection function 的 eaSimple
算法,但出现错误。
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
指定我自己的值?
在eaSimple
算法中,实际上没有选择。从 the documentation 开始,pseudo-code 描述了幕后情况
population = select(population, len(population))
这意味着选择初始种群大小的种群子集,即整个种群进行突变、交配和评估。
然后算法做
population = offspring
所以所有由变异和交配产生的个体都取代了所有 parents。
这也(某种程度上)回答了问题的第二部分:使用 eaSimple
无法在 selBest
方法中为 k
指定自定义值。
我正在尝试 运行 来自 DEAP module. I would like to specify the number of individuals to be selected at each generation. However, if I specify a k
parameter for the selection function 的 eaSimple
算法,但出现错误。
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
指定我自己的值?
在eaSimple
算法中,实际上没有选择。从 the documentation 开始,pseudo-code 描述了幕后情况
population = select(population, len(population))
这意味着选择初始种群大小的种群子集,即整个种群进行突变、交配和评估。
然后算法做
population = offspring
所以所有由变异和交配产生的个体都取代了所有 parents。
这也(某种程度上)回答了问题的第二部分:使用 eaSimple
无法在 selBest
方法中为 k
指定自定义值。