如何解决如何在 DEAP 中将参数传递给“toolbox.population”
我尝试在 DEAP 中创建一个自定义的“个人”。原因是个体由几个解释变量组成。每个解释变量都有下限和上限。此外,它可能具有步进或精度。
这是我正在处理的代码:
import random
from deap import base,creator,tools
from typing import Optional,List,Any
creator.create("fitnessMin",base.fitness,weights=(-1.0,))
creator.create("Individual",list,fitness=creator.fitnessMin) # individual data-type : List
toolBox = base.ToolBox()
'''
Functions
'''
def random_pick(lower: float,upper: float,step: Optional[int] = None) -> float:
# Pick random numbers within specified bounds
if step is None:
return random.uniform(lower,upper)
else:
candidates_num = round((upper - lower) / step)
return lower + random.randint(0,candidates_num) * step
def make_individual(explanatories) -> List[Any]:
individual = []
for explanatory in explanatories:
individual.append(
random_pick(
lower=explanatories[explanatory][0],upper=explanatories[explanatory][1],step=explanatories[explanatory][2] if len(explanatories[explanatory]) == 3 else None,)
)
return creator.Individual(individual)
'''
Main
'''
pop_size = 10
explanatories={
"a": (30,100,1),# (low,high,step)
"b": (80,200,"c": (15,80,"d": (1.5,5,0.1),"e": (15,"f": (5,1699,"g": (0.5,0.5),high)
}
toolBox.register("individual",make_individual)
# Check value of individual
ind = toolBox.individual(explanatories) # list
# Population (following is the Bag type of population which is common)
toolBox.register("population",tools.initRepeat,toolBox.individual)
# Check population
pop = toolBox.population(pop_size) # ERROR
函数 random_pick
通过考虑步长随机选取上下限内所有解释的值。而函数 make_individual
负责使个人。
上面代码的问题是我尝试做人口的地方。当我运行以下行时:
pop = toolBox.population(pop_size)
我收到错误:
TypeError: make_individual() missing 1 required positional argument: 'explanatories'
我的问题是如何在进行填充时将解释作为输入参数传递给“toolBox.population”或“make_individual()”。
感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。