Каков правильный способ пересечения при использовании GA, чтобы получить минимум одну переменную функцию, например, sin(x)^2
Я кодирую интервал [x:y] в двоичные коды, такие как 10101111, поэтому для населения это похоже [[1,0,1,1],[0,1,0,1]]
,
Я определил фитнес-функцию напрямую, используя значение функции (sin(x)^2
).
Для выбора я использую выбор турнира и для кроссовера, только простую часть обмена хромосомы как это: 1(10)0
а также 0(01)1
-> 1(01)0
а также 0(10)1
,
Для мутации используется битовая инверсия.
Алгоритм вроде работает, иногда он может генерировать глобальный минимум, а иногда и локальный. но я не вижу функции кроссовера в этой проблеме, потому что функция "х" каждый раз нарушается (я думаю), я не знаю почему, и если это даже правильный способ кодирования кроссовера или, может быть, часть кодирования.
1 ответ
Боюсь, что нет "правильного пути" кроссовера.
Существует много операторов кроссовера (например, Сравнение оператора кроссовера в двоичных кодированных генетических алгоритмах - STJEPAN PICEK, MARIN GOLUB), которые можно использовать в двоичном кодированном генетическом алгоритме, но:
- в зависимости от свойств задачи тот или иной оператор кроссовера будет иметь лучший результат.
- У каждого оператора кроссовера есть свои преимущества и недостатки, поэтому выбор одного из них, в конечном счете, представляет вопрос о чьих-то требованиях и экспериментах.
- во многих ситуациях равномерный и двухточечный кроссовер являются хорошим выбором.
Кроссовер является основным исследовательским механизмом генетического алгоритма, но движущей силой ГА является сотрудничество между отбором, кроссовером и мутацией (мутация предотвращает сближение популяции и вносит изменения).
Обычно подход, основанный только на мутациях, не обладает достаточной силой исследования, чтобы достичь минимума, и успех во многом обусловлен распределением решений в начальной популяции.
Для непрерывной оптимизации функций вы также должны проверить дифференциальную эволюцию.