Оптимізація (математика)Математичною оптимізацією (інколи, оптимізацією) або математичним програмуванням в математиці, інформатиці та дослідженні операцій називають відбір найкращого елементу (за певним критерієм) з множини доступних альтернатив.[1] У найпростішому випадку задача оптимізації полягає у знаходженні екстремуму (мінімуму або максимуму) дійсної функції шляхом систематичного вибору вхідних значень з дозволеного набору та обчислення значення функції. Подальші узагальнення теорії та методів оптимізації до інших формулювань становлять велику область прикладної математики. Взагалі, оптимізація охоплює знаходження «найкращих можливих» значень деякої цільової функції в межах області визначення, включаючи різні типи цільових функцій та різні типи областей значення. Постановка задачі оптимізаціїУ процесі проєктування ставиться, звичайно, задача визначення найкращих, у деякому значенні, структури або значення параметрів об'єктів. Така задача називається оптимізаційною. Якщо оптимізація пов'язана з розрахунком оптимальних значень параметрів при заданій структурі об'єкта, то вона називається параметричною. Задача вибору оптимальної структури є структурною оптимізацією. Стандартна математична задача оптимізації формулюється в такий спосіб. Серед елементів χ, що утворюють множину Χ, знайти такий елемент χ*, що надає мінімальне значення f(χ*) заданій функції f(χ). Для того щоб коректно поставити задачу оптимізації необхідно задати:
Тоді вирішити задачу (при пошуку максимуму буде аналогічне визначення) означає одне з:
Якщо мінімізована функція не є опуклою, то часто обмежуються пошуком локальних мінімумів і максимумів: точок таких, що всюди в деякому їхньому околі для мінімуму й для максимуму. Якщо допустима множина , то така задача називається задачею безумовної оптимізації, в іншому разі — задачею умовної оптимізації. Функцію f в різних галузях називають по різному, цільовою функцією (англ. objective function), функцією втрат (англ. loss function) чи функцією витрат (англ. cost function) (при мінімізації),[2] або функцією корисності (англ. utility function) чи функцією допасованості (англ. fitness function) (максимізація), функцією енергії (англ. energy function) або функціоналом енергії (англ. energy functional). НотаціяЗадача оптимізації часто записується у своєрідній спеціальній нотації. Ось деякі приклади: Мінімальне і максимальне значення функціїРозглянемо наступний запис: Він позначає мінімальне значення цільової функції , якщо x обирається із множини дійсних чисел . Мінімальне значення в такому випадку дорівнює , що відповідає значенню . Аналогічно, нотація запитує максимальне значення цільової функції 2x, де x може бути будь-яким дійсним числом. В даному випадку, не існує такого максимуму, оскільки цільова функція необмежена, тож відповідь буде «нескінченністю» або «невизначена». Оптимальні вхідні аргументиРозглянемо наступний приклад: або еквівалентно Такий запис представляє значення (або декілька значень) аргументу в інтервалі , що мінімізує цільову функцію (пошук фактичного значення мінімуму функції, в цій задачі не вимагається). В даному випадку, відповідь становить , оскільки не підходить, бо не належить заданому інтервалу. Аналогічно, або еквівалентно представляє пару (або пари) значень, яка максимізує (які максимізують) значення цільової функції , із заданими обмеженнями, що знаходиться в інтервалі (знову ж таки, фактичне максимальне значення для виразу не має значення). В цьому випадку, рішеннями будуть пари значень наступної форми: та , де може приймати будь-яке ціле значення. Оператори та іноді записують як та , що розуміють як аргумент для мінімуму та аргумент для максимуму. Класифікація методів оптимізаціїМетоди оптимізації класифікують відповідно до задач оптимізації:
Існуючі в цей час методи пошуку можна розбити на три великі групи:
За критерієм вимірності допустимої множини, методи оптимізації поділяють на методи одномірної оптимізації і методи багатомірної оптимізації. За видом цільової функції й допустимої множини, задачі оптимізації й методи їхнього розв'язання можна розділити на такі класи:
За вимогами до гладкості й наявності в цільової функції частинних похідних, їх також можна розділити на:
Крім того, оптимізаційні методи поділяються на такі групи:
Залежно від природи множини X задачі математичного програмування класифікуються так:
Крім того, розділами математичного програмування є параметричне програмування, динамічне програмування і стохастичне програмування. Математичне програмування використовується при розв'язанні оптимізаційних задач дослідження операцій. Спосіб знаходження екстремуму повністю обумовлюється класом задачі. Але перед тим, як отримати математичну модель, потрібно виконати 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.), М. Франк[en], Ф. Вульфа[en], Г. Марковіца та інших). У роботах Денніса (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-х похідних (вони знаходяться у матриці Гессе) число оцінок функцій буде порядку N². Метод Ньютона вимагає похідних 2-го порядку, тому для кожної ітерації кількість викликів функцій має порядок N², але для більш простого чистого градієнтного оптимізатора потрібно лише N. Однак оптимізатори градієнтів потребують зазвичай більше ітерацій, ніж алгоритм Ньютона. Яка з них буде найкращою за кількостю викликів функцій залежить від конкретної задачі.
Див. також
Примітки
Література
|