Я реализовал дифференциальный алгоритм эволюции для стороннего проекта, который я делал. Поскольку шаг кроссовера, казалось, включал множество вариантов параметров (например, вероятности перекрестных помех), я решил пропустить его и просто использовать мутацию. Метод, похоже, работает нормально, но я не уверен, что я получу лучшую производительность, если бы ввел кроссовер.Когда и почему кроссовер полезен в дифференциальной эволюции?
Главный вопрос: Какова мотивация внедрения кроссовера в дифференциальную эволюцию? Можете ли вы представить пример игрушки, в котором ввод кроссовера будет выполняться с чистой мутацией?
Моя интуиция заключается в том, что кроссовер будет производить что-то вроде следующего в двух измерениях. Скажем , у нас есть два родительских вектора (красный). Однородный кроссовер мог бы создать новый пробный вектор в одной из синих точек.
Я не знаю, почему этот вид исследования можно было бы ожидать, чтобы быть полезным. На самом деле, похоже, что это может ухудшить производительность, если решения с высокой степенью пригодности следуют некоторым линейным тенденциям. На рисунке ниже давайте скажем, что красные точки являются текущим населением, а оптимальное решение - в нижнем правом углу. Население перемещается вниз по долине, так что верхний правый и нижний левые углы создают плохие решения. Верхний левый угол дает «хорошо», но субоптимальные решения. Обратите внимание, что однородный кроссовер производит испытания (в синем), которые являются ортогональным в направлении улучшения. Я использовал вероятность перекрестного перехода 1 и пренебречь мутацией, чтобы проиллюстрировать мою точку (см. Код). Я полагаю, что эта ситуация может возникать довольно часто в задачах оптимизации, но может быть что-то недопонимать.
Примечание: В приведенном выше примере, я неявно предполагая, что популяция случайным образом инициализируется (равномерно) по этому пространству, и начал сходиться к правильному решению вниз центральной долине (вверху слева направо).
Этот пример игрушки выпуклый, и поэтому дифференциальная эволюция не будет даже подходящей техникой. Однако, если этот мотив был встроен в мультимодальный фитнес-ландшафт, кажется, что кроссовер может быть вредным. В то время как кроссовер поддерживает разведку, что может быть полезно, я не уверен, почему вы решили исследовать в этом конкретном направлении.
код R для приведенного выше примера:
N = 50
x1 <- rnorm(N,mean=2,sd=0.5)
x2 <- -x1+4+rnorm(N,mean=0,sd=0.1)
plot(x1,x2,pch=21,col='red',bg='red',ylim=c(0,4),xlim=c(0,4))
x1_cx = list(rep(0, 50))
x2_cx = list(rep(0, 50))
for (i in 0:N) {
x1_cx[i] <- x1[i]
x2_cx[i] <- x2[sample(1:N,1)]
}
points(x1_cx,x2_cx,pch=4,col='blue',lwd=4)
Последующие меры Вопрос: Если кроссовер является полезным в некоторых ситуациях, есть разумный подход к), если необходимо определить конкретные проблемы выиграют от кроссовера , и б) как настроить параметры кроссовера для оптимизации алгоритма?
Смежный вопрос StackOverflow (я ищу что-то более конкретное, с примером игрушки, например): what is the importance of crossing over in Differential Evolution Algorithm?
Аналогичным вопрос, но не относится к дифференциальной эволюция: Efficiency of crossover in genetic algorithms
Если они следуют линейному тренду, может быть проще решение, чем эволюционный алгоритм. Что делать, если в верхнем правом/нижнем левом углу была гораздо более глубокая боковая долина? – Bergi
@Bergi - Спасибо за комментарий. Является ли ваш аргумент, что без кроссовера алгоритм слишком жадный и недостаточно изучает? Почему этого недостаточно? Не хватает ли там параметров для игры? Я пытаюсь сохранить свою рутину с максимально возможными свободными параметрами. –
Это может быть не прямо применимо к вашей ситуации, но как общая интуиция для кроссовера, эффект Хилла-Робертсона (https://en.wikipedia.org/wiki/Hill%E2%80%93Robertson_effect) имеет большой смысл – JoeRocc