python - многоцелевая оптимизация с несколькими переменными с использованием DEAP - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь оптимизировать два выхода программного обеспечения для моделирования (я использовал случайный лес для обучения модели для быстрого прогнозирования выходных данных).Существует семь входных переменных, три из которых являются непрерывными, а остальные дискретными.Я использовал пакет DEAP для многоцелевой оптимизации, но только одну переменную или набор связанных переменных (что-то вроде ранца).Упомянутые семь переменных:

    n_rate = [0.1:0.5]
    estim = [1000, 1500, 2000]
    max_d = [1:20]
    ft = [None, "rel"]
    min_s = [2:1000]
    min_m = [1:1000]
    lim = [0:1]

За исключением ft, для всех переменных продолжения можно определить несколько дискретных чисел.

У меня вопрос, как я могу создать разных людей для этих входов, чтобы определить население?

1 Ответ

0 голосов
/ 22 ноября 2018

способ сделать это - зарегистрировать «атрибуты», из которых может быть создан каждый человек.Вот что я использую в своем коде:

toolbox.register("attr_peak", random.uniform, 0.1,0.5)
toolbox.register("attr_hours", random.randint, 1, 15)
toolbox.register("attr_float", random.uniform, -8, 8)

toolbox.register("individual", tools.initCycle, creator.Individual,
                 (toolbox.attr_float,toolbox.attr_float,toolbox.attr_float,
                  toolbox.attr_hours,
                  toolbox.attr_float, toolbox.attr_float, toolbox.attr_float,
                  toolbox.attr_hours,toolbox.attr_peak
                  ), n=1)

В моем коде у меня есть три разных "гена" или "атрибута", поскольку я зарегистрировал их в toolbox.В моем примере у меня есть две непрерывные переменные и одна целочисленная переменная.Для вашего примера, вот как вы бы определили свои атрибуты:

toolbox.register("n_rate", random.uniform, 0.1, 0.5)
toolbox.register("estim", random.choice, [1000,1500,2000])
toolbox.register("max_d", random.randint, 1, 20)
toolbox.register("ft", random.choice, [None, 'rel'])
toolbox.register("min_m", random.randint, 1, 1000)
toolbox.register("min_s", random.randint, 2, 1000)
toolbox.register("lim", random.randint, 0, 1)

Тогда вы построите своего индивидуума так же, как я это сделал с initCycle.

toolbox.register("individual", tools.initCycle, creator.Individual, (toolbox.your_attribute, toolbox.next_attribute, ... ), n=1)
...