Оптимізація (математика)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Графік параболоїду, заданого рівнянням z = f(x, y) = −(x² + y²) + 4. Глобальний максимум в точці (x, y, z) = (0, 0, 4) позначено синьою точкою.
Пошук мінімуму функції Сіміонеску методом Нелдера–Міда[en]. Симплекс-вершини впорядковані за величиною, з найменшим (найкращим) значенням 1.

Математичною оптимізацією (інколи, оптимізацією) або математичним програмуванням в математиці, інформатиці та дослідженні операцій називають відбір найкращого елементу (за певним критерієм) з множини доступних альтернатив.[1]

У найпростішому випадку задача оптимізації полягає у знаходженні екстремуму (мінімуму або максимуму) дійсної функції шляхом систематичного вибору вхідних значень[en] з дозволеного набору та обчислення значення функції. Подальші узагальнення теорії та методів оптимізації до інших формулювань становлять велику область прикладної математики. Взагалі, оптимізація охоплює знаходження «найкращих можливих» значень деякої цільової функції в межах області визначення, включаючи різні типи цільових функцій та різні типи областей значення.

Постановка задачі оптимізації[ред. | ред. код]

У процесі проектування ставиться, звичайно, задача визначення найкращих, у деякому значенні, структури або значення параметрів об'єктів. Така задача називається оптимізаційною. Якщо оптимізація пов'язана з розрахунком оптимальних значень параметрів при заданій структурі об'єкта, то вона називається параметричною. Задача вибору оптимальної структури є структурною оптимізацією.

Стандартна математична задача оптимізації формулюється в такий спосіб. Серед елементів χ, що утворюють множину Χ, знайти такий елемент χ*, що надає мінімальне значення f(χ*) заданій функції f(χ). Для того щоб коректно поставити задачу оптимізації необхідно задати:

  1. Допустиму множину — множину (функції задають обмеження на );
  2. Цільову функцію — відображення ;
  3. Критерій пошуку (max або min).

Тоді вирішити задачу (при пошуку максимуму буде аналогічне визначення) означає одне з:

  1. Показати, що .
  2. Показати, що цільова функція не обмежена знизу.
  3. Знайти .
  4. Якщо , то знайти .

Якщо мінімізована функція не є опуклою, то часто обмежуються пошуком локальних мінімумів і максимумів: точок таких, що всюди в деякому їхньому околі для мінімуму й для максимуму.

Якщо допустима множина , то така задача називається задачею безумовної оптимізації, в іншому разі — задачею умовної оптимізації.

Функцію f в різних галузях називають по різному, цільовою функцією (англ. objective function), функцією втрат (англ. loss function) чи функцією витрат (англ. cost function) (при мінімізації),[2] або функцією корисності (англ. utility function) чи функцією пристосованості (англ. fitness function) (максимізація), функцією енергії (англ. energy function) або функціоналом енергії (англ. energy functional).

Нотація[ред. | ред. код]

Задача оптимізації часто записується у своєрідній спеціальній нотації. Ось деякі приклади:

Мінімальне і максимальне значення функції[ред. | ред. код]

Розглянемо наступний запис:

Він позначає мінімальне значення цільової функції , якщо x обирається із множини дійсних чисел . Мінімальне значення в такому випадку дорівнює , що відповідає значенню .

Аналогічно, нотація

запитує максимальне значення цільової функції 2x, де x може бути будь-яким дійсним числом. В даному випадку, не існує такого максимуму, оскільки цільова функція необмежена, тож відповідь буде «нескінченністю» або «невизначена».

Оптимальні вхідні аргументи[ред. | ред. код]

Розглянемо наступний приклад:

або еквівалентно

Такий запис представляє значення (або декілька значень) аргументу[en] в інтервалі , що мінімізує цільову функцію (пошук фактичного значення мінімуму функції, в цій задачі не вимагається). В даному випадку, відповідь становить , оскільки не підходить, бо не належить заданому інтервалу[en].

Аналогічно,

або еквівалентно

представляє пару (або пари) значень, яка максимізує (які максимізують) значення цільової функції , із заданими обмеженнями, що знаходиться в інтервалі (знову ж таки, фактичне максимальне значення для виразу не має значення). В цьому випадку, рішеннями будуть пари значень наступної форми: та , де може приймати будь-яке ціле значення.

Оператори та іноді записують як та , що розуміють як аргумент для мінімуму та аргумент для максимуму.

Класифікація методів оптимізації[ред. | ред. код]

Методи оптимізації класифікують відповідно до задач оптимізації:

  • Локальні методи: сходяться до якого-небудь локального екстремуму цільової функції. У разі унімодальної цільової функції, цей екстремум єдиний, і буде глобальним максимумом/мінімумом.
  • Глобальні методи: мають справу з багатоекстремальними цільовими функціями. При глобальному пошуку основною задачею є виявлення тенденцій глобальної поведінки цільової функції.

Існуючі в цей час методи пошуку можна розбити на три великі групи:

  1. детерміновані;
  2. випадкові (стохастичні);
  3. комбіновані.

За критерієм вимірності допустимої множини, методи оптимізації поділяють на методи одномірної оптимізації і методи багатомірної оптимізації.

За видом цільової функції й допустимої множини, задачі оптимізації й методи їхнього розв'язання можна розділити на такі класи:

За вимогами до гладкості й наявності в цільової функції частинних похідних, їх також можна розділити на:

  • прямі методи, що вимагають тільки обчислень цільової функції в точках наближень;
  • методи першого порядку: вимагають обчислення перших частинних похідних функції, тобто якобіана цільової функції;
  • методи другого порядку: вимагають обчислення других частинних похідних, тобто гессіана цільової функції.

Крім того, оптимізаційні методи поділяються на такі групи:

Залежно від природи множини X задачі математичного програмування класифікуються так:

Крім того, розділами математичного програмування є параметричне програмування, динамічне програмування і стохастичне програмування[en]. Математичне програмування використовується при розв'язанні оптимізаційних задач дослідження операцій.

Спосіб знаходження екстремуму повністю обумовлюється класом задачі. Але перед тим, як отримати математичну модель, потрібно виконати 4 етапи моделювання:

  • Визначення меж системи оптимізації
    • Відкидаємо ті зв'язки об'єкта оптимізації із зовнішнім світом, які не можуть сильно вплинути на результат оптимізації, а, точніше, ті, без яких розв'язання спрощується
  • Вибір змінних проектування (керованих змінних)
    • «Заморожуємо» значення деяких змінних (некеровані змінні). Інші залишаємо приймати будь-які значення з області допустимих рішень (керовані змінні)
  • Визначення обмежень на керовані змінні
    • … (рівності й\або нерівності)
  • Вибір числового критерію оптимізації
    • Створюємо цільову функцію

Історія[ред. | ред. код]

Задачі лінійного програмування були першими, докладно вивченими задачами пошуку екстремума функцій при наявності обмежень типу нерівностей. В 1820 р. Ж. Фур'є і потім в 1947 р. Дж. Данціг запропонував метод направленого перебору суміжних вершин у напрямку зростання цільової функції — симплекс-метод, що став основним при розв'язанні задач лінійного програмування.

Присутність у назві дисципліни терміна «програмування» пояснюється тим, що перші дослідження й перші застосування лінійних оптимізаційних задач були в сфері економіки, тому що в англійській мові слово «programming» означає планування, складання планів або програм. Цілком природно, що термінологія відображає тісний зв'язок, що існує між математичною постановкою задачі і її економічною інтерпретацією (вивчення оптимальної економічної програми). Термін «лінійне програмування» був запропонований Дж. Данцігом в 1949 г. для вивчення теоретичних і алгоритмічних задач, пов'язаних з оптимізацією лінійних функцій при лінійних обмеженнях. Тому найменування «Математичне програмування» пов'язане з тим, що метою розв'язання задач є вибір оптимальної програми дій.

Виділення класу екстремальних задач, обумовлених лінійним функціоналом на множині, що задається лінійними обмеженнями, варто віднести до 30-х років XX сторіччя. Одними з перших, що досліджували в загальній формі задачі лінійного програмування, були: Джон фон Нейман, знаменитий математик і фізик, що довів основну теорему про матричні ігри й вивчив економічну модель, що носить його ім'я; радянський академік, лауреат нобелівської премії (1975 р.) Л. В. Канторович, що сформулював ряд задач лінійного програмування й запропонував (1939 р.) метод їхнього розв'язання (метод розв'язних множників), що незначно відрізняється від симплекс-методу.

В 1931 р. угорський математик Ейген Егерварі[en] розглянув математичну постановку й вирішив задачу лінійного програмування, що має назва «проблема вибору», метод розв'язання одержав назву «угорського методу».

Л. В. Канторовичем разом із М. К. Гавуриним в 1949 р. розроблено метод потенціалів[ru], що застосовується при розв'язанні транспортних задач. У наступних роботах Л. В. Канторовича, В. С. Немчинова, В. В. Новожилова, А. Л. Лур'є, А. Брудно, А. Г. Аганбегяна[ru], Д. Б. Юдіна, Е. Г. Гольштейна й інших математиків і економістів отримали подальший розвиток як математична теорія лінійного і нелінійного програмування, так і застосування її методів до дослідження різних економічних проблем. Методам лінійного програмування присвячено багато робіт зарубіжних учених. В 1941 р. Ф. Л. Хітчкок[en] поставив транспортну задачу. Основний метод розв'язання задач лінійного програмування — симплекс-метод — був опублікований в 1949 р. Дж. Данцігом. Подальший розвиток методи лінійного і нелінійного програмування отримали в роботах Г. Куна[en], А. Таккера[en], Гасса (Gass S. I.), Чарнеса (Charnes A.), Е.М. Біла (Beale E. M.) та інших.

Одночасно з розвитком лінійного програмування велика увага приділялася задачам нелінійного програмування, у яких або цільова функція, або обмеження, або те й те нелінійні. В 1951 р. була опублікована робота Куна й Таккера, у якій наведені необхідні й достатні умови оптимальності для розв'язання задач нелінійного програмування. Ця робота послужила основою для наступних досліджень у цій галузі.

Починаючи з 1955 р., опубліковано багато робіт з квадратичного програмування (роботи Била, Е. Баранкіна (Barankin E.) і Дорфмана (Dorfman R.), Франка (Frank M.) і Вольфа (Wolfe P.), Г. Марковіца та інших). У роботах Денніса (Dennis J. B.), Розена (Rosen J. B.) і Зонтендейка (Zontendijk G.) розроблено градієнтні методи розв'язання задач нелінійного програмування.

У даний час для ефективного застосування методів математичного програмування й розв'язання задач на комп'ютерах розроблені мови алгебраїчного моделювання, представниками якими є AMPL і LANGO.

Обчислювальні методи оптимізації[ред. | ред. код]

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

Алгоритми оптимізації[ред. | ред. код]

Алгоритм оптимізації машинного навчання[ред. | ред. код]

Алгоритм оптимізації машинного навчання виконується ітераційним шляхом порівняння різних рішень до досягнення оптимального або задовільного рішення. Алгоритми оптимізації допомагають мінімізувати або максимізувати цільову функцію E(x), яка є просто математичною функцією, залежною від внутрішніх параметрів моделі, що використовуються в моделі при обчисленні цільових значень (Y) по множині предикторів (X). Існують два типи алгоритмів оптимізації, які широко використовуються, це алгоритми нульового порядку, алгоритми оптимізації першого порядку та алгоритми оптимізації другого порядку.[3]

Алгоритми нульового порядку[ред. | ред. код]

Алгоритми нульового порядку (або без похідних) використовують лише значення критерію на деяких позиціях. Це популярний метод, коли інформацію про градієнт і гессіан складно або не можливо отримати, наприклад, функції не вказано явно.[4]

Алгоритми оптимізації першого порядку[ред. | ред. код]

Ці алгоритми мінімізують або максимізують функцію втрат E(x) за домогою значення градієнта обчисленного по параметрам. Найбільш широко використовуваним алгоритмом оптимізації першого порядку є градієнтний спуск. Похідна першого порядку відображає, як зменшується чи збільшується функція в певній точці. Похідні першого порядку описують пряму, дотичну до точки на поверхні похибки.[5]

Алгоритми оптимізації другого порядку[ред. | ред. код]

Методи другого порядку використовують похідну другого порядку, яка також називається гессіаном, для мінімізації або максимізації функції втрат. Гессіан є матрицею часткових похідних другого порядку. Оскільки, обчислення других похідних є затратною дією по кількості операцій, тому такі алгоритми не мають широкого вжитку. Похідна другого порядку повідомляє нам, чи збільшується або зменшується перша похідна, що загалом вказує на кривину функції. Також гесіан задає поверхню другого порядку, дотичну до поверхні похибки та яка має таку саму кривину.[6]


Ітераційні методи[ред. | ред. код]

Ітераційні методи, що використовуються для вирішення завдань нелінійного програмування, розрізняються залежно від того, чи оцінюють вони гессіан, градієнт або тільки значення функцій. При оцінці гессіану (H) і градієнту (G) покращується швидкість збіжності, для функцій, для яких ці величини існують і змінюються досить гладко, використання цих оцінок збільшує обчислювальну складність (або обчислювальну вартість) кожної ітерації. У деяких випадках обчислювальна складність може бути занадто високою.

Одним з основних критеріїв для оптимізаторів є просто кількість необхідних оцінок функцій, оскільки це часто потребує набагато більше обчислень, ніж потрібно самому оптимізатору, який здебільшого мусить оперувати над N змінними. Похідні надають детальну інформацію для оптимізаторів, але їх і важче обчислити, наприклад, апроксимація градієнта потребує принаймні N + 1 оцінку функцій. Для наближень 2-х похідних (вони знаходяться у матриці Гессе) число оцінок функцій буде порядку . Метод Ньютона вимагає похідних 2-го порядку, тому для кожної ітерації кількість викликів функцій має порядок , але для більш простого чистого градієнтного оптимізатора потрібно лише N. Однак оптимізатори градієнтів потребують зазвичай більше ітерацій, ніж алгоритм Ньютона. Яка з них буде найкращою за кількостю викликів функцій залежить від конкретної задачі.

  • Методи, які оцінюють гессіан (або наближений гессіан через скінченні різниці):
  • Методи, які оцінюють градієнт, або апроксимують значення градієнту (або навіть субградієнту):
    • Методи координатного спуску[en]: алгоритми, які оновлюють одну координату за одну ітерацію
    • Метод спряжених градієнтів[en]: ітераційні методи для великих задач. (Теоретично ці методи закінчуються за кінцеву кількість кроків з квадратичними цільовими функціями, проте на практиці не спостерігається зупинка за кінцеву кількість кроків на комп'ютерах зі скінченною точністю.)
    • Градієнтний спуск (інколи, «крутий спуск» чи «крутий підйом»): (повільний) метод з точки зору історичного та теоретичного інтересу, який наново викликав інтерес до знаходження наближених розв'язань величезних проблем.
    • Субградієнтні методи[en] — ітераційний метод для великих локально ліпшицевих функцій з використанням узагальнених градієнтів . За Борисом Т. Поляком, субградієнтно-проекційні методи схожі з методами спряжених градієнтів.
  • Методи, які оцінюють тільки значення функцій: Якщо задача неперервно диференційовна, то градієнти можна апроксимувати за допомогою скінченних різниць, в такому випадку можна використовувати метод на основі градієнта.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. «The Nature of Mathematical Programming Архівовано 2014-03-05 у Wayback Machine.,» Mathematical Programming Glossary, INFORMS Computing Society.
  2. W. Erwin Diewert (2008). "cost functions, " The New Palgrave Dictionary of Economics, 2nd Edition Contents.
  3. Walia, A (2017). Типи алгоритмів оптимізації, що використовуються в нейронних мережах і способах оптимізації сходження градієнтів. https://towardsdatascience.com/types-of-optimization-algorithms-used-in-neural-networks-and-ways-to-optimize-gradient-95ae5d39529f
  4. E. Ruffio, D. Saury, D. Petit, M.Girault. Алгоритми оптимізації нульового порядку. http://www.sft.asso.fr/Local/sft/dir/user-3775/documents/actes/Metti5_School/Lectures&Tutorials-Texts/Text-T2-Ruffio.pdf
  5. Ye.Y. Алгоритми оптимізації нульового порядку та першого порядку І. https://web.stanford.edu/class/msande311/lecture10.pdf
  6. Manson, L.; Baxter, J.; Bartlett. P. & Fream, M. Boosting algorithms as gradient descent.

Література[ред. | ред. код]

  1. Абакаров А.Ш., Сушков Ю.А. Статистическое исследование одного алгоритма глобальной оптимизации. — Труды ФОРА, 2004.
  2. Акулич И.Л. Математическое программирование в примерах и задачах: Учеб. пособие для студентов эконом. пец. вузов. — М. : Высшая школа, 1986.
  3. Гилл Ф., Мюррей У., Райт М. Практическая оптимизация. Пер. с англ. — М. : Мир, 1985.
  4. Жиглявский А.А., Жилинкас А.Г. Методы поиска глобального экстремума. — М. : Наука, Физматлит, 1991.
  5. Карманов В.Г. Математическое программирование = Математическое программирование. — Изд-во физ.-мат. литературы, 2004.
  6. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. — М. : Наука, 1970. — С. 575-576.
  7. Коршунов Ю.М., Коршунов Ю.М. Математические основы кибернетики. — М. : Энергоатомиздат, 1972.
  8. Максимов Ю.А., Филлиповская Е.А. Алгоритмы решения задач нелинейного программирования. — М. : МИФИ, 1982.
  9. Максимов Ю.А. Алгоритмы линейного и дискретного программирования. — М. : МИФИ, 1980.
  10. Плотников А.Д. Математическое программирование = экспресс-курс. — 2006. — С. 171. — ISBN 985-475-186-4.
  11. Растригин Л.А. Статистические методы поиска. — М., 1968.
  12. Хемди А. Таха. Введение в исследование операций = Operations Research: An Introduction. — 8 изд. — М. : «Вильямс», 2007. — С. 912. — ISBN 0-13-032374-8.