Объясните метод дифференциальной эволюции - PullRequest
17 голосов
/ 21 сентября 2011

Может кто-нибудь объяснить метод дифференциальной эволюции?Википедия определение чрезвычайно техническая.

Было бы полезно получить краткое объяснение, за которым следует простой пример:)

Ответы [ 3 ]

14 голосов
/ 22 сентября 2011

Вот упрощенное описание.DE - это метод оптимизации, который итеративно модифицирует совокупность возможных решений, чтобы они сходились к оптимальной функции.

Сначала вы инициализируете свои варианты решения случайным образом.Затем на каждой итерации и для каждого возможного решения x вы делаете следующее:

  1. вы создаете пробный вектор: v = a + (b - c) / 2, где a, b, c - триРазличные варианты кандидатов выбираются случайным образом среди вашего населения.
  2. вы случайным образом меняете компоненты вектора между x и v, чтобы получить v '.По крайней мере, один компонент из v должен быть заменен.
  3. вы заменяете x в вашем населении на v ', только если это лучший кандидат (т.е. он лучше оптимизирует вашу функцию).

(Обратите внимание, что приведенный выше алгоритм очень упрощен; не кодируйте его, вместо этого найдите нужную спецификацию.)

К сожалению, в статье в Википедии отсутствуют иллюстрации.Это легче понять с помощью графического представления, некоторые из которых вы найдете на следующих слайдах: http://www -personal.une.edu.au / ~ jvanderw / DE_1.pdf .

Он аналогичен генетическому алгоритму (GA) за исключением того, что решения-кандидаты рассматриваются не как двоичные строки (хромосома), а (как правило) как реальные векторы.Одним из ключевых аспектов DE является то, что размер шага мутации (см. Шаг 1 для мутации) является динамическим, то есть он адаптируется к конфигурации вашей популяции и будет стремиться к нулю, когда сходится.Это делает DE менее уязвимым для генетического дрейфа, чем GA.

9 голосов
/ 13 апреля 2015

Отвечая на мой собственный вопрос ...

Обзор

  • Принципиальное различие между Генетическими Алгоритмами и Дифференциальной Эволюцией (DE) состоит в том, что Генетические Алгоритмы полагаются на пересечение, в то время как эволюционные стратегии используют мутациюв качестве основного механизма поиска.
  • DE генерирует новых кандидатов, добавляя взвешенную разницу между двумя членами населения к третьему члену (подробнее об этом ниже).
  • Если полученный кандидат превосходиткандидат, с которым его сравнивали, заменяет его;в противном случае первоначальный кандидат остается без изменений.

Определения

  • Население состоит из NP кандидатов.
  • Xi = родителькандидат на индекс i (индексы варьируются от 0 до NP-1) от текущего поколения.Также известен как целевой вектор .
  • Каждый кандидат содержит D параметров.
  • Xi(j) = j -й параметр в кандидате Xi.
  • Xa, Xb, Xc = три случайных родительских кандидата.
  • Вектор разности = (Xb - Xa)
  • F = Весэто определяет скорость развития населения.
    • Идеальные значения: [0,5, 1,0]
  • CR = Вероятность пересечения.
    • Диапазон: [0, 1]
  • Xc` = Мутантный вектор, полученный с помощью операции дифференциальной мутации.Также известный как донорский вектор .
  • Xt = Дочерний элемент Xi и Xc`.Также известен как вектор испытаний .

Алгоритм

  1. Для каждого кандидата в популяции
    • for (int i = 0; i<NP; ++i)
  2. Выберите трех разных родителей случайным образом (они должны отличаться друг от друга и i)
do
{
  a = random.nextInt(NP);
} while (a == i)
do
{
  b = random.nextInt(NP);
} while (b == i || b == a);
do
{
  c = random.nextInt(NP);
} while (c == i || c == b || c == a);
(шаг мутации) Добавьте взвешенный вектор разности между двумя членами популяции к третьему члену
  • Xc` = Xc + F * (Xb - Xa)
(шаг кроссовера) Для каждой переменной в Xi, применить равномерный кроссовер с вероятностью CR для наследования от Xc`;в противном случае наследуется от Xi.По крайней мере одна переменная должна быть унаследована от Xc`
int R = random.nextInt(D);
for (int j=0; j < D; ++j)
{
  double probability = random.nextDouble();
  if (probability < CR || j == R)
    Xt[j] = Xc`[j]
  else
    Xt[j] = Xi[j]
}
(шаг выбора) Если Xt превосходит Xi, то Xt заменяет Xi в следующем поколении.В противном случае Xi остается неизменным.

Ресурсы

4 голосов
/ 13 января 2016

Работа алгоритма DE очень проста. Предположим, вам необходимо оптимизировать (минимизировать, например) ∑Xi ^ 2 (модель сферы) в заданном диапазоне, скажем, [- 100,100] . Мы знаем, что минимальное значение равно 0. Посмотрим, как работает DE.

DE - алгоритм, основанный на населении. И для каждого человека в популяции будет определенное количество хромосом (представьте, что это набор людей и хромосом или генов в каждой из них). Позвольте мне объяснить DE w.r.t выше функции

Нам необходимо зафиксировать размер популяции и количество хромосом или генов (названных в качестве параметров). Например, давайте рассмотрим популяцию размером 4, и у каждого человека есть 3 хромосомы (или гены или параметры). Давайте назовем людей R1, R2, R3, R4.

Шаг 1: Инициализация населения

Нам нужно случайным образом инициализировать население в диапазоне [-100, 100]

        G1    G2    G3    objective fn value
R1 -> |-90  |  2  | 1   |   =>8105
R2 -> |  7  |  9  | -50 |   =>2630
R3 -> |  4  |  2  | -9.2|   =>104.64
R4 -> | 8.5 |  7  |  9  |   =>202.25

Значение целевой функции рассчитывается с использованием заданной целевой функции. В данном случае это ∑Xi ^ 2 . Таким образом, для R1 значение obj fn будет -90 ^ 2 + 2 ^ 2 + 2 ^ 2 = 8105 . Точно так же это найдено для всех.

Шаг 2: Мутация

Зафиксируйте целевой вектор, скажем, например, для R1, а затем случайным образом выберите три других вектора (индивида), например, для R2, ​​R3, R4, и выполните мутацию. Мутация производится следующим образом:

MutantVector = R2 + F(R3-R4)

(векторы могут быть выбраны случайным образом, необязательно в любом порядке). F (коэффициент масштабирования / константа мутации) в диапазоне [0,1] является одним из немногих параметров управления, которые имеет DE. Простыми словами, он описывает, насколько различается мутированный вектор. Давайте держать F = 0,5.

|  7  |  9  | -50 |
        +

       0.5 *

|  4  |  2  | -9.2|

        +

| 8.5 |  7  |  9  |

Теперь выполнение мутации даст следующий вектор мутантов

MV = | 13.25 | 13.5 | -50.1 | =>2867.82

Шаг 3: Кроссовер

Теперь, когда у нас есть целевой вектор (R1) и мутантный вектор MV, сформированный из R2, R3 и R4, нам нужно сделать кроссовер. Рассмотрим R1 и MV как двух родителей, и нам нужен ребенок от этих двух родителей. Кроссовер делается, чтобы определить, сколько информации нужно взять от обоих родителей. Контролируется Скорость кроссовера (CR) . Каждый ген / хромосома ребенка определяется следующим образом:

генерируется случайное число между 0 и 1, если оно больше CR, то наследовать ген от мишени (R1), а от мутанта (MV).

Давайте установим CR = 0,9. Поскольку у нас есть 3 хромосомы для индивидуумов, нам нужно сгенерировать 3 случайных числа от 0 до 1. Скажем, например, что эти числа равны 0,21,0,97,0,8 соответственно. Первое и последнее меньше значения CR, поэтому эти позиции в дочернем векторе будут заполнены значениями из MV, а вторая позиция будет заполнена геном, взятым из цели (R1).

Цель-> |-90 | 2 | 1 | Мутант-> | 13.25 | 13.5 | -50.1 |

random num - 0.21, =>  `Child -> |13.25| -- | --    |`
random num - 0.97, =>  `Child -> |13.25| 2  | --    |`
random num - 0.80, =>  `Child -> |13.25| 2  | -50.1 |`

Trial vector/child vector -> | 13.25 | 2 | -50.1 | =>2689.57

Шаг 4: Выбор

Теперь у нас есть ребенок и цель. Сравните obj fn обоих, посмотрите, что меньше (проблема минимизации). Выберите этого человека из двух для следующего поколения

 R1                       -> |-90    |  2  | 1     |   =>8105
Trial vector/child vector -> | 13.25 | 2   | -50.1 |   =>2689.57

Очевидно, что ребенок лучше, поэтому замените цель (R1) на ребенка. Таким образом, новое население станет

        G1    G2    G3    objective fn value
R1 -> | 13.25 | 2   | -50.1 |   =>2689.57
R2 -> |  7    |  9  | -50   |   =>2500
R3 -> |  4    |  2  | -9.2  |   =>104.64
R4 -> | -8.5  |  7  |  9    |   =>202.25

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

...