Диференціальна еволюція
Диференціальна еволюція (англ. differential evolution) — метод багатовимірної математичної оптимізації, що відноситься до класу стохастичних алгоритмів оптимізації (тобто працює з використанням випадкових чисел) і використовує деякі ідеї генетичних алгоритмів.
Це прямий метод оптимізації, тобто він вимагає тільки можливості обчислювати значення цільової функцій, але не її похідних. Метод диференціальної еволюції призначений для знаходження глобального мінімуму (або максимуму) недиференційованих, нелінійних, мультимодальних (що мають, можливо, велику кількість локальних екстремумів) функцій від багатьох змінних. Метод простий у реалізації та використання (містить мало керуючих параметрів, що потребують підбору), легко розпаралелюється.
Метод диференціальної еволюції був розроблений Рейнером Сторно і Кеннетом Прайсом, вперше опублікований ними в 1995 році [1] і розроблений в подальшому в їх пізніших роботах. [2] [3]
Алгоритм
У його базовому вигляді алгоритм можна описати таким чином. Спочатку генерується деяка множина векторів, так зване покоління. Під векторами розуміються точки -вимірного простору, в якому визначена цільова функція , яку потрібно мінімізувати. На кожній ітерації алгоритм генерує нове покоління векторів, випадковим чином комбінуючи вектори з попереднього покоління. Число векторів в кожному поколінні одне й те саме і є одним з параметрів методу.
Нове покоління векторів генерується в такий спосіб. Для кожного вектора зі старого покоління вибираються три різних випадкових вектори , , серед векторів старого покоління, за винятком самого вектора , і генерується так званий мутантний вектор за формулою:
де — один з параметрів методу, деяка позитивна дійсна константа в інтервалі [0, 2].
Над мутантним вектором виконується операція «схрещування» (англ. crossover), яка полягає в тому, що деякі його координати заміщаються відповідними координатами з початкового вектора (кожна координата заміщається з деякою ймовірністю, яка також є ще одним з параметрів цього методу). Отриманий після схрещування вектор називається пробним вектором(англ. trial vector). Якщо він виявляється кращим за вектор (тобто значення цільової функції стало меншим), то в новому поколінні вектор замінюється на пробний вектор, а в іншому разі — залишається .
Приклади практичних застосувань
Пошукова система Яндекс використовує метод диференціальної еволюції для поліпшення своїх алгоритмів ранжування. [4] [5]
Примітки
- Storn, Rainer and Price, Kenneth. Differential Evolution - A Simple and Efficient Adaptive Scheme for Global Optimization over Continuous Spaces, Архівовано 24 квітня 2005 у Wayback Machine. Technical Report TR-95-012 , ICSI, March 1995.
- Storn, Rainer and Price, Kenneth. 10/01 - DE-Storn-Price-1997.pdf Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces. [недоступне посилання з липня 2019] (1997)
- K. Price, R. Storn, J. Lampinen. Differential Evolution: A Practical Approach to Global Optimization. Springer, 2005.
- Інтерв'ю А. Садовського журналу «IT СПЕЦ», Липень 2007.
- / romip2009/15_yandex.pdf А. Гулин та ін. Яндекс на РОМІП'2009. Оптимізація алгоритмів ранжирування методами машинного навчання.
Посилання
- Опис і реалізації методу на сайті одного із його авторів.
- S. Luke. Essentials of Metaheuristics. Розділ 3.4.