DEAP framework - mutGaussian с использованием статистики по генам

У меня есть человек со следующими генами:

genes = [8, 2, 300, 2, 25, 10, -64, -61]

и тогда я применяю следующую гауссовскую мутацию:

toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=1)
toolbox.mutate(genes)

произвести новые гены:

[9, 4, 301, 2, 24, 9, -65, -60]

Моя проблема с этой мутацией состоит в том, что гауссовские характеристики для этого индивида, по-видимому, определяются с использованием всех генов, а не для каждого гена... в то время как мутация +/- 2 для большинства генов в порядке, значение, которое началось с 300 должен измениться более резко.

Мне странно, что в документации нет необходимости учитывать эту необходимость.

Нет ли встроенного механизма мутации индивидов с использованием статистики по каждому гену?

Я предполагаю, что распределение формируется для каждого человека в популяции, используя все его гены. Я хочу, чтобы для каждого гена было сформировано распределение, использующее всех людей в популяции.

0 ответов

Вы можете установить sigmaбыть списком, а не плавающим. Таким образом, если каждый ген взят из другого диапазона, вы можете настроить значениеsigma чтобы лучше соответствовать значениям, принимаемым каждым геном.

Если вы не знаете заранее, какие гены будут крупнее других, вы можете реализовать свою собственную функцию мутации. Например, вы можете установитьsigma гаусса зависит от значения гена:

def mutGaussian(individual, sigma, indpb):
    for i in range(len(individual)):
        if random.random() < indpb:
            individual[i] = random.gauss(individual[i], sigma*individual[i])

    return individual,
Другие вопросы по тегам