Я новичок в алгоритме Python и geneti c, и я пытаюсь решить проблему с помощью Deap, но я немного потерян.
У меня 3 цели:
Для имитации c F1 Максимизировать F2 Максимизировать F3 Фитнес будет = w1 * f1 + w1 * f2 + w3 * f3
, который стремится к максимизации
Я делаю это так: у меня есть функция fit
, которая вычисляет цели и возвращает их (я не знаю, если это так, как это должно быть сделано).
fit()
return f1, f2, f3,
Возвращенные значения должны быть умножены на веса (0.3, 0.4, 0.3)
, чтобы достичь Фитнес, но здесь возникает другое сомнение , Могу ли я определить вес таким образом?
Я видел в статье, что если вы хотите минимизировать вес, он должен быть отрицательным, а чтобы максимизировать, он должен быть положительным. Но статья, за которой я следую, чтобы решить проблему, передала мне эти веса (0.3, 0.4, 0.3)
, чтобы минимизировать и максимизировать?
От этого я был смущен. Я делаю это правильно? Если нет, что было бы правильно сделать?
creator.create("FitnessMax", base.Fitness,weights=(0.3, 0.4, 0.3,))
fitn = creator.FitnessMax
creator.create("Individual", list, typecode='b', fitness=creator.FitnessMax)
...
fit = sim['GAParams']['fitFunction']
toolbox.register("evaluate", fit, sim=sim)
Я использую алгоритм eaSimple и для выбора selNSGA2
, но тут больше неправильного.
Допустим, что цели дали следующее: F1: 0.37, F2: 1.0, F3: 1.0
. При выполнении исполнения класс Fitness работает с: values (0.37, 1.0, 1.0)
и self.wvalues (0.111, 0.4, 0.3
), то есть другие две цели игнорируются.
Как мне решить эту проблему?