Як симплекс-метод вирішує складні проблеми оптимізації

1

Як метод симплекс вирішує складні завдання оптимізації

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

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

Чому нам потрібен систематичний підхід

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

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

Джордж Данциг вирішив цю проблему у 1947 році. Він працював математичним консультантом для ВПС США. Військові мали масштабні проблеми логістики. Їм потрібно було оптимізувати маршрути постачання та розподіл ресурсів. Данциг розробив метод симплекс, щоб відсікти зайве.

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

Як працює метод симплекс покроково

Процес систематичний. Він переходить від одного варіанта до наступного. Ось як це відбувається практично.

По-перше, передбачається, що у вас є початкова точка. Екстремальна точка. Якщо її немає, варіант, званий Етапом I, знаходить допустиму початкову точку чи визначає, що рішення немає.

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

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

Якщо цього не відбувається, ви потрапляєте у нову екстремальну точку. Це значення має, принаймні, таке ж високе значення, як і попереднє. Послідовність повторюється. Вона продовжується доти, доки не буде знайдено оптимальну точку або не буде виявлено необмеженість.

Теоретично кількість кроків може зростати експоненційно з кількістю екстремальних точок. Насправді збіжність відбувається швидко. Зазвичай потрібна лише невелика кратна кількість екстремальних точок.

Конкретний приклад: максимізація прибутку фабрики

Давайте розглянемо певний випадок. Фабрика виготовляє два продукти. Назвемо їх x1 та x2. Прибуток від другого типу вдвічі вищий, ніж від першого. Загальний прибуток представлений рівнянням:

x1 + 2×2

Це ваша цільова функція. Ви бажаєте її максимізувати.

Звичайно, ви хотіли б робити тільки x2. Він дає більше грошей за одиницю. Але є обмеження. Ви не можете робити нескінченно.

Ось реальні обмеження:

  • Сировина для x2 обмежує виробництво п’ятьма одиницями за партію (x2 ≤ 5).
  • Сировина для x1 обмежує виробництво вісьмома одиницями за партію (x1 ≤ 8).
  • Час роботи верстатів дозволяє робити максимум десять одиниць у сумі (x1 + x2 ≤ 10).
  • Ви не можете виробляти негативні кількості (x1 ≥ 0 та x2 ≥ 0).

Метод симплекс знаходить значення x1 та x2, які максимізують прибуток у межах цих кордонів. Будь-яке рішення – це пара чисел (x1, x2). Наприклад, виробництво трьох одиниць x1 та шести одиниць x2 є допустимою точкою (3, 6).

При побудові графіку ці обмеження утворюють багатокутну область. Це багато допустимих рішень. Крапки поза цією областю порушують одне або кілька обмежень.

Щоб побачити, як метод сімплекс визначає оптимальну вершину, розглянемо цільову функцію x1 + 2×2 = k. Якщо ви встановите k 4, ви отримаєте лінію на графіку. У міру збільшення k ви отримуєте паралельні лінії. Найбільше значення k, яке досі стосується області допустимих рішень, є максимально можливим прибутком.

У цьому прикладі лінія k = 15 стосується області в точці (5, 5). Якщо k вище, лінія виходить за межі допустимої множини. Оптимальне рішення полягає у виробництві рівних кількостей кожного товару.

Чому вершини важливі в лінійному програмуванні

Результат – не збіг. У лінійних завданнях оптимальне рішення досягається у вершині. В екстремальній точці.

Це фундаментальна властивість лінійного програмування. Функція лінійна. Обмеження лінійні. Форма являє собою опуклий багатокутник (або багатогранник у вищих вимірах). Пік лінійної функції над опуклим множиною завжди знаходиться в кутку.

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

Іноді оптимум не єдиний. Все ребро може давати те саме максимальне значення. Але метод симплексу все одно знайде одну з цих оптимальних точок. Він дає вам конкретну відповідь. Дійсні дані.

Для студентів та професіоналів розуміння цього механізму є ключовим. Йдеться не лише про рішення рівнянь. Йдеться про те, щоб знати, як орієнтуватися у складних системах з обмеженими ресурсами. Метод симплекс надає шлях.

Метод симплекс: як він переходить від початку координат до оптимального рішення

Метод симплекс не просто вгадує відповіді. Він рухається вздовж ребер області допустимих рішень, перевіряючи вершини, доки знайде найкращу. Спочатку він спрощує математичну постановку завдання. Ви берете ці громіздкі лінійні нерівності і перетворюєте їх на акуратні рівності. Для цього вводяться “змінні slack” (змінні відхилення).

Уявіть собі slack як потужність, що залишилася. Якщо у вас є обмеження виду $x_1 \le 8$, ви додаєте змінну $x_3$ так, щоб $x_1 + x_3 = 8$. І пам’ятайте, що $x_3$ має бути більше або дорівнює нулю. Ви робите це для кожного обмеження.

  • $x_1 + x_3 = 8$ (при $x_3 \ge 0$)
  • $x_2 + x_4 = 5$ (при $x_4 \ge 0$)
  • $x_1 + x_2 + x_5 = 10 $ (при $ x_5 \ ge 0 $)

Вам також потрібна змінна для цільової функції. Назвемо її $x_0$. Якщо ваша мета – максимізувати $x_0 = x_1 + 2x_2 $, ви переписуєте її як $x_1 + 2x_2 – x_0 = 0$.

Тепер завдання стало простіше. Знайдіть невід’ємні значення для $x_1$ через $x_5$. Зробіть $x_0$ якнайбільшим.

Початок на початку координат

З чого розпочати? Найпростіша точка – це початок координат. Обнулить усі змінні рішення. $ x_1 = 0 $. $ x_2 = 0 $.

Це припустиме рішення. Це крайня точка. Фактично це стартова вершина. Значення цільової функції $x_0$ також дорівнює нулю. Не дуже добре, але це законна дія.

Чи можна зробити краще? Так. Якщо ви збільшите одну із змінних з нуля, залишивши іншу рівною нулю, $x_0$ зросте. Питання, яка змінна дасть вам найбільшу віддачу на вкладені зусилля.

Подивіться рівняння цільової функції: $x_1 + 2x_2 – x_0 = 0$. Виразивши $x_0$, отримуємо $x_0 = x_1 + 2x_2$.

Збільшення $x_1$ додає 1 до загального значення. Збільшення $x_2$ додає 2. $x_2$ – явний переможець. Вона дає максимальне збільшення $x_0$ на одиницю зміни. Отже, ви обираєте $x_2$ і підвищуєте її.

Зіткнення з першим обмеженням

Ви не можете збільшувати $x_2$ нескінченно. Змінні мають залишатися невід’ємними. Якщо ви збільшите $x_2$ більше 5, щось піде не так. Зокрема, подивіться друге обмеження: $x_2 + x_4 = 5$.

Якщо $x_2 = 6$, $x_4$ стане рівним -1. Це заборонено. Вимога невід’ємності діє як жорстке обмеження. Межа становить 5.

Отже, ви встановлюєте $x_2=5$. Як тепер виглядає рішення?

  • $ x_2 = 5 $
  • $ x_1 = 0 $ (як і раніше дорівнює нулю)
  • $x_4 = 0$ (ця змінна досягла межі, тому тепер вона дорівнює нулю)
  • $x_3 = 8 $ (оскільки $ 0 + 8 = 8 $)
  • $
Попередня статтяЯк Фонд Дж. Пола Гетті переосмислює історію мистецтва та консервацію