微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 DEAP 中将参数传递给“toolbox.population”

如何解决如何在 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 举报,一经查实,本站将立刻删除。