Одно из различий между дифференциальной эволюцией (DE) и генетическими алгоритмами (GA) заключается в том, что DE отбрасывает нового кандидата, если только он не является более подходящим, чем старый кандидат, из которого он был получен, в то время как GA позволяет «менее подходящим» кандидатам выжить с некоторой вероятностью. Первоначально подход DE звучит как хорошая идея, но я считаю, что это мешает ему решить следующую категорию проблем.
Представьте, что мы пытаемся максимизировать показатель пригодности:
A - [max(0, A - 50) * B] + [max(0, A - 75) * 2 * B]
где параметры варьируются от 0
до 100
.
- Вначале выгодно увеличивать
A
, пока не достигнет50
. - Затем полезно установить
B
равным нулю. - Далее выгодно увеличить
A
до 75. - Далее выгодно одновременно увеличивать
B
иA
.
Этот последний пункт важен: если A
или B
увеличиваются независимо друг от друга, показатель пригодности снизится.
Возвращаясь к алгоритму дифференциальной эволюции, я не понимаю, как он может решить вышеупомянутую проблему, потому что изначально мы хотим изменять только один параметр для каждого поколения, но в конечном итоге мы хотим изменить несколько параметров для каждого поколения. Если мы слишком рано изменим несколько параметров в каждом поколении, мы уменьшим вероятность выживания, что, в свою очередь, уменьшит скорость эволюции. Но если мы будем изменять один параметр за раз, мы никогда не найдем глобальный максимум.
Мой вопрос (ы) заключается в следующем:
- Это известная проблема с алгоритмом дифференциальной эволюции?
- Есть ли известные решения?
- Страдают ли общие алгоритмы от той же проблемы?
Я не прошу решения конкретной функции, упомянутой выше. Я спрашиваю, может ли дифференциальная эволюция решать проблемы, когда вы не знаете заранее, сколько параметров нужно изменить в любой момент времени, и вы хотите в конечном итоге оказаться как можно ближе к глобальному максимуму.