【问题标题】:How can I create a list with random numbers in different ranges for deap package in pythonpython - 如何为python中的deap包创建一个包含不同范围内随机数的列表
【发布时间】:2017-08-08 02:15:31
【问题描述】:

我正在使用 Python 中的 DEAP 包编写一个程序,用于优化进化算法,特别是遗传算法。

我需要在 python 中使用列表类型来创建染色体。这条染色体应该有五个不同范围的浮动基因(等位基因)。

我的主要问题是创建这样的染色体。但是,如果我可以为此使用 deap 包的 tools.initRepeat 功能会更好。

对于所有基因都在同一范围内的情况,我们可以使用以下代码:

import random

from deap import base
from deap import creator
from deap import tools

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)

IND_SIZE=10

toolbox = base.Toolbox()
toolbox.register("attr_float", random.random)
toolbox.register("individual", tools.initRepeat, creator.Individual,
                 toolbox.attr_float, n=IND_SIZE)

我从here得到的。

【问题讨论】:

    标签: python genetic-algorithm evolutionary-algorithm deap


    【解决方案1】:

    我找到了一个很好的推荐here

    def genFunkyInd(icls, more_params):
        genome = list()
        param_1 = random.uniform(...)
        genome.append(param_1)
        param_2 = random.randint(...)
        genome.append(param_2)
        # etc...
    
        return icls(genome)
    

    icls(代表单个类)参数应该接收创建者创建的类型,而配置范围的所有其他参数可以像 more_params 参数一样传递,或者在脚本中定义常量。这是它在工具箱中的注册方式。

    toolbox.register('individual', genFunkyInd, creator.Individual, more_params)
    

    它手动为染色体创建一个类。我不知道这是否是最好的选择,但它可以用来解决我的问题。

    【讨论】:

      【解决方案2】:

      要创建在五个不同范围内具有五个浮动基因的个体,您可以执行以下操作

      low = [1, 0, 0, -10, 3] #lower bound for each of the ranges
      high = [1234, 1024, 1, 0, 42] #upper bound for each of the ranges
      
      functions = []
      for i in range(5):
          def fun(_idx=i):
              return random.uniform(low[_idx], high[_idx])
          functions.append(fun)
      
      toolbox.register("individual", tools.initCycle, creator.Individual,
                       functions,
                       n=1)
      
      toolbox.individual()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-26
        • 2022-10-14
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多