Объясните метод дифференциальной эволюции
может кто-нибудь объяснить метод дифференциальной эволюции? В Википедии определение это исключительно техническая.
было бы оценено тупое объяснение, за которым следует простой пример:)
3 ответов
здесь упрощенный описание. DE-это метод оптимизации, который итеративно изменяет популяцию решений-кандидатов, чтобы она сходилась к оптимуму вашей функции.
сначала инициализируйте свои решения-кандидаты случайным образом. Затем на каждой итерации и для каждого решения-кандидата x вы делаете следующее:
- вы создаете пробный вектор: v = a + (b-c ) / 2, где a, b, c-три различных выбранных решения-кандидата случайным образом среди вашего населения.
- вы случайным образом меняете векторные компоненты между x и v для получения v'. По крайней мере, один компонент из v должен быть заменен.
- вы заменяете x в своей популяции на v', только если это лучший кандидат (т. е. он лучше оптимизирует вашу функцию).
(обратите внимание, что приведенный выше алгоритм очень упрощен; не кодируйте из него, найдите правильную спецификацию. в другом месте вместо)
к сожалению, статья Википедии не хватает иллюстрации. Это легче понять с графическим представлением, вы найдете некоторые в этих слайдах:http://www-personal.une.edu.au / ~jvanderw / DE_1.pdf .
Он похож на генетический алгоритм (GA), за исключением того, что решения-кандидаты не рассматриваются как двоичные строки (хромосома), но (обычно) как реальные векторы. Одним из ключевых аспектов DE является то, что размер шага мутации (см. Шаг 1 для мутации) является динамическим, то есть он адаптируется к конфигурации вашего население и будет стремиться к нулю, когда оно сойдется. Это делает DE менее уязвимым для генетического дрейфа, чем GA.
отвечая на мой собственный вопрос...
обзор
- основное различие между генетическими алгоритмами и дифференциальной эволюцией (DE) заключается в том, что генетические алгоритмы полагаются на кроссовер, а эволюционные стратегии используют мутацию в качестве основного механизма поиска.
- DE генерирует новых кандидатов, добавляя взвешенную разницу между двумя членами популяции к третьему члену (подробнее об этом ниже).
- если результирующий кандидат превосходя кандидата, с которым он сравнивался, он заменяет его; в противном случае первоначальный кандидат остается неизменным.
определения
- население состоит из
NP
кандидатов. -
Xi
= Родительский кандидат по индексуi
(диапазон индексов от0
toNP-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
эта процедура будет продолжена или до тех пор, пока количество желаемых поколений не достигнет или пока мы не получим желаемое значение. Надеюсь, это даст тебе нужна помощь.