Каков правильный способ пересечения при использовании 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), которые можно использовать в двоичном кодированном генетическом алгоритме, но:

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

Кроссовер является основным исследовательским механизмом генетического алгоритма, но движущей силой ГА является сотрудничество между отбором, кроссовером и мутацией (мутация предотвращает сближение популяции и вносит изменения).

Обычно подход, основанный только на мутациях, не обладает достаточной силой исследования, чтобы достичь минимума, и успех во многом обусловлен распределением решений в начальной популяции.

Для непрерывной оптимизации функций вы также должны проверить дифференциальную эволюцию.

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