Объясните метод дифференциальной эволюции

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

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

3 ответов


здесь упрощенный описание. 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.


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

обзор

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

определения

  • население состоит из NP кандидатов.
  • Xi = Родительский кандидат по индексу i (диапазон индексов от 0 to NP-1) от нынешнего поколения. Также известный как целевой вектор.
  • каждый кандидат содержит D параметры.
  • Xi(j) = на jth параметр в кандидате Xi.
  • Xa, Xb, Xc = три случайных родительских кандидата.
  • разность векторов = (Xb - Xa)
  • F = вес, определяющий скорость эволюции популяции.
    • идеальных значений: [0.5, 1.0]
  • CR = вероятность пересечения происходит.

    работа алгоритма DE очень проста. Считаю, что вам нужно оптимизировать(минимизировать,например) Xi 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 Xi^2. Поэтому для R1 значение obj fn будет -90^2+2^2+2^2 = 8105. Точно так же он находится для всех.

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

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

    MutantVector = R2 + F(R3-R4)
    

    (векторы можно выбрать случайно, не нужно быть в любом порядке).F (коэффициент масштабирования / постоянная мутации) в диапазоне [0,1] один из немногих параметров управления DE имеет.Простыми словами, он описывает, насколько отличается мутированный вектор. Пусть Ф =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, то наследует ген от target (R1) else от мутант(МВ).

    давайте установим CR = 0.9. Поскольку у нас есть 3 хромосомы для индивидуумов, нам нужно генерировать 3 случайных числа от 0 до 1. Скажем, например, эти числа составляют 0.21,0.97, 0.8 соответственно. Первый и последний меньше значения CR, поэтому эти позиции в векторе ребенка будут заполнены значениями из MV, а вторая позиция будет заполнена геном, взятым из target(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
    

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