ГоловнаСтаттіАлгоритми

Диференціальне Еволюційне Забезпечення: Оптимізатор Без Похідних

Візьміть два випадкових члени популяції, відніміть один від іншого, масштабуйте різницю та додайте її до третього — повторіть, і популяція сама йде вниз.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Оптимізація без градієнта

Градиентний спуск потребує диференційовної функції обчислювальної й, бажано, добре поводячоїся. Багато реальних функцій обчислень не відповідають цим вимогам — вони виходять з чорної скриньки симуляції, містять дискретні рішення або просто занадто складні для диференціювання. Еволюційний алгоритм Диффузії (DE), розроблений Рейнером Сторном та Кеном Прайсом у 1997 році, обходить цю проблему: він оцінює функцію обчислень лише в точках, ніколи не обчислює її похідну, і переміщує цілу популяцію кандидатів-рішень, використовуючи лише арифметичні операції над цією популяцією.

DE/rand/1/bin варіант

Класичний і найпоширеніший варіант, названий DE/rand/1/bin завдяки його стилю мутації та кросування, виконує три дії з кожним членом популяції на кожному поколінні:

для кожного цільового вектора x_i в популяції: вибираються r1, r2, r3 окремі, різні та не рівні i, випадковим чином з популяції мутований вектор v = x_r1 + F * (x_r2 - x_r3) // F: диференційний вагу пробуєкція u_j = v_j якщо rand() < CR (або j == випадковий індекс) = x_i_j інакше // CR: коефіцієнт кросування якщо f(u) кращий за f(x_i): x_i (наступне покоління) = u інакше: x_i (наступне покоління) = x_i // відбір Крок мутації – це названий рух: різниця між двома випадково обраними членами популяції, масштабована на F, стає збуренням, доданим до третього. Потім кросування змішує мутований вектор з початковим цільовим вектором, по одній координаті за раз, керується коефіцієнтом CR. Відбір – це жадібний: спроба замінює цільовий вектор лише якщо він строго покращує об'єктивну функцію, тому найкраща відома придатність популяції ніколи не погіршується поколіннями.

for each target vector x_i in the population:
  pick r1, r2, r3 distinct, all != i, at random from the population

  mutant  v = x_r1 + F * (x_r2 - x_r3)          // F: differential weight

  trial u_j = v_j  if rand() < CR (or j == random index)
            = x_i_j  otherwise                   // CR: crossover rate

  if f(u) is better than f(x_i):  x_i (next gen) = u
  else:                            x_i (next gen) = x_i   // selection
жива демонстрація · пов'язана симуляція● LIVE

Чому вектор різниці має правильний масштаб

Елегантність мутації в DE полягає в тому, що розмір кроку саморегулюється без додаткового обладнання: на ранніх етапах пошуку, коли популяція широко розподілена у просторі пошуку, різниці x_r2 − x_r3 великі, і мутація здійснює великі дослідницькі кроки. Коли популяція сходиться до перспективної області, ці самі різниці автоматично зменшуються, і мутація природним чином уточнює пошук за допомогою менших кроків. Не потрібен окремий графік охолодження, як у методі Simulated Annealing – власна різноманітність популяції забезпечує це.

Самоадаптивні варіанти

Класичний DE все ще залишає F і CR як фіксовані гіперпараметри, які потрібно налаштовувати для кожної задачі. Пізніші варіанти навіть цього позбавляються: SaDE (самоадаптивний DE) та JADE кодують F і CR як еволюційні ознаки, прикріплені до кожного індивіда, вибіркося з розподілу, який сам адаптується на основі того, які значення F і CR призвели до успішних тестових векторів у недавніх поколіннях. Це повністю закриває цикл — алгоритм навчає себе власний графік кроку та коефіцієнт змішування, виходячи з форми задачі, яку він зараз вирішує, на шкоду невеликій додатковій обробці даних на кожному поколінні.

Оцінка за стандартними тестовими функціями

DE регулярно оцінюється на невеликому наборі ворожих тестових функцій. Функція Розенброкка має вузьку, вигнуту долину, що веде до її мінімума – легко знайти долину, але повільно просуватися по ній. Функція Растрігіна заповнена регулярно розташованими локальними мінімумами на вершині гладкої чаші, перевіряючи, чи може оптимізатор уникнути потрапляння в них. Функція Аклі має майже плоску поверхню далеко від початку координат з гострим центральним западом, що перевіряє, чи може оптимізатор знайти сигнал на великій, майже бездоганній рівнинній ділянці. DE надійно знаходить глобальний мінімум усіх трьох функцій при достатній кількості поколінь, хоча його збіжність до функції Розенброкка особливо повільна порівняно з методом градієнтного типу, який може безпосередньо використовувати локальний схил долини – справедлива компромісна ціна за відсутність необхідності існування або обчислення цього схилу взагалі.

Frequently asked questions

Чому Диференціальна Еволюція називається derivative-free?

Оскільки вона оцінює лише значення об’єктивної функції в кандидатних точках – ніколи не обчислює чи не приближує градієнт. Це робить її придатною для функцій, які не є диференційованими, мають розриви або надто дорогі для диференціювання, таких як вихід з чорнової симуляції, хоча це й призводить до того, що зазвичай потрібно більше оцінок функції, ніж у градієнтно-орієнтованому методі на гладкій, добре поводящійся проблемі.

Що параметри F і CR контролюють?

F, диференційний вага, масштабує вектор мутації – невелике значення F призводить до малих, консервативних кроків, а велике значення F – до великих, дослідницьких. Значення близько 0,5–0,8 є типовими початковими точками. CR, ймовірність перехреста, контролює частку компонентів кожної спробної вектори, що походить від мутанта проти оригінальної цільової вектори – висока ймовірність перехреста змішує більше з мутантом і сприяє швидшому дослідженню, а низька ймовірність перехреста змінює менше вимірів на кожному кроці та може допомогти на проблемах, де змінні сильно взаємодіють.

Чому DE має труднощі з функцією Розенброка зокрема?

Функція Розенброка має довгу, вузьку, вигнуту долину, що веде до мінімуму, а вектори мутації DE – це відмінності між членами популяції, які зазвичай вказують у напрямках, в яких уже поширилася популяція. Дотримання вузької вигнутої долини потребує багатьох малих, точно вирівняних кроків, тому DE (як і більшість методів на основі популяції) повільно збігається туди, хоча зрештою знаходить мінімум, на відміну від градієнтних методів, які можуть безпосередньо слідувати локальному ухилу долини.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Differential Evolution Optimizer і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Differential Evolution Optimizer

Що ви знайшли?

Додати кроки відтворення (опційно)