问题描述
我尝试在 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 (将#修改为@)