Programowanie stochastyczne
Programowanie stochastyczne (ang. stochastic programming) — dział programowania matematycznego, rozwijający modele i metody rozwiązywania zadań optymalizacyjnych w warunkach niepewności, gdy niektóre parametry modelu nie są dokładnie znane, lecz reprezentowane jako zmienne losowe o znanych lub oszacowanych rozkładach prawdopodobieństwa[1][2].
W odróżnieniu od zadań deterministycznych, gdzie wszystkie dane uznawane są za zadane stałe, programowanie stochastyczne ma na celu znalezienie rozwiązania (lub polityki podejmowania decyzji), które jest optymalne w pewnym sensie statystycznym. Najczęściej oznacza to minimalizację lub maksymalizację wartości oczekiwanej funkcji celu[1]. Kluczowa idea polega na znalezieniu takiej polityki podejmowania decyzji, która będzie najlepsza „średnio" po wszystkich możliwych realizacjach losowych parametrów, co jest szczególnie istotne dla zadań, w których decyzje podejmowane są wielokrotnie w podobnych warunkach (np. w zarządzaniu zapasami lub systemami energetycznymi)[3].
Matematyczne sformułowanie zadania
W ogólnej postaci zadanie programowania stochastycznego można sformułować jako: gdzie:
- — wektor zmiennych sterujących (decyzyjnych), które należy wyznaczyć.
- — zbiór dopuszczalnych rozwiązań dla , określony przez ograniczenia deterministyczne.
- — losowy wektor reprezentujący niepewne parametry zadania (np. popyt, ceny, warunki pogodowe).
- — funkcja celu, której wartość zależy zarówno od podjętej decyzji , jak i od realizacji losowego wektora .
- — operator wartości oczekiwanej, obliczany względem rozkładu prawdopodobieństwa wektora .
Najważniejszą zasadą leżącą u podstaw wieloetapowych modeli stochastycznych jest zasada nieanticypacji (ang. non-anticipativity principle). Głosi ona, że decyzje podejmowane na dowolnym etapie mogą zależeć wyłącznie od informacji dostępnych w danym momencie i nie mogą „zaglądać w przyszłość"[2].
Dwuetapowe zadanie z prawem rekursu
Najbardziej rozpowszechnionym modelem jest dwuetapowe zadanie z prawem rekursu (ang. two-stage stochastic program with recourse)[1]. Proces podejmowania decyzji podzielony jest na dwa etapy:
- Etap pierwszy: Podejmowana jest decyzja „tu i teraz" (here-and-now) — wyznaczany jest wektor . Decyzja ta musi zostać podjęta zanim znana będzie konkretna realizacja losowego wektora .
- Etap drugi: Po tym, jak zdarzenie losowe nastąpiło, podejmowana jest decyzja korygująca lub kompensacyjna (recourse decision) — wektor , ukierunkowany na minimalizację negatywnych skutków lub wykorzystanie korzystnych możliwości wynikłych z połączenia decyzji pierwszego etapu i wyniku .
Matematycznie dwuetapowe zadanie stochastycznego programowania liniowego formułuje się następująco: przy ograniczeniach pierwszego etapu: . Tutaj — funkcja rekursu (recourse function), stanowiąca optymalną wartość zadania drugiego etapu: gdzie — losowy wektor obejmujący parametry i ; natomiast i — parametry deterministyczne[2].
Kluczowe właściwości i twierdzenia
- Wypukłość: Jednym z fundamentalnych wyników teorii jest fakt, że dla dwuetapowego zadania stochastycznego programowania liniowego oczekiwana funkcja rekursu jest funkcją wypukłą. Właściwość ta ma ogromne znaczenie, gdyż gwarantuje, że ogólne zadanie pierwszego etapu jest zadaniem programowania wypukłego, dla którego istnieją efektywne metody rozwiązania, a optimum globalne pokrywa się z lokalnym[1].
- Deterministyczny ekwiwalent: Jeśli losowy wektor ma skończoną liczbę możliwych realizacji (scenariuszy) z prawdopodobieństwami , to zadanie programowania stochastycznego można przeformułować jako jedno duże deterministyczne zadanie optymalizacji. W tym przypadku wartość oczekiwana zastępowana jest ważoną sumą po wszystkich scenariuszach. Jednak rozmiar tego zadania rośnie liniowo z liczbą scenariuszy, co prowadzi do „przekleństwa wymiarowości" i sprawia, że takie podejście jest obliczeniowo niewykonalne dla dużej liczby scenariuszy[2].
Porównanie z optymalizacją robustawą
Programowanie stochastyczne jest jednym z kilku podejść do optymalizacji w warunkach niepewności. Jego kluczowa różnica w stosunku do optymalizacji robustawej polega na sposobie modelowania niepewności i kryterium optymalności[4].
| Kryterium | Optymalizacja stochastyczna | Optymalizacja robustawa |
|---|---|---|
| Reprezentacja niepewności | Parametry są zmiennymi losowymi o znanym rozkładzie prawdopodobieństwa | Parametry należą do zadanego zbioru niepewności; rozkład nie jest wymagany |
| Kryterium optymalności | Optymalizacja wartości oczekiwanej funkcji celu | Optymalizacja w najgorszym scenariuszu (minimax) |
| Charakter rozwiązania | Polityka optymalna „średnio", może być niedopuszczalna dla rzadkich scenariuszy | Rozwiązanie gwarantowanie dopuszczalne dla wszystkich realizacji; może być konserwatywne |
Przykłady
- Zadanie gazeciarza (ang. newsvendor problem): Klasyczne zadanie zarządzania zapasami, w którym sprzedawca musi zdecydować, jaką ilość towaru zakupić, nie znając dokładnego przyszłego popytu. Rozwiązanie równoważy ryzyko strat wynikających z nadwyżek z ryzykiem utraconego zysku spowodowanego niedoborem.
- Zadanie farmera: Farmer decyduje, ile akrów ziemi przeznaczyć pod różne uprawy na łącznej powierzchni, nie znając przyszłej pogody wpływającej na plony. Po tym, jak pogoda staje się znana, farmer może podjąć działania korygujące (np. sprzedać nadwyżki lub dokupić brakujące plony na rynku)[5].
Zobacz też
- Programowanie matematyczne
- Badania operacyjne
- Optymalizacja robustawa
- Programowanie dynamiczne
- Teoria sterowania
Przypisy
- ↑ 1.0 1.1 1.2 1.3 Shapiro, A., Dentcheva, D., & Ruszczyński, A. (2009). Lectures on Stochastic Programming: Modeling and Theory. Society for Industrial and Applied Mathematics (SIAM).
- ↑ 2.0 2.1 2.2 2.3 Birge, J. R., & Louveaux, F. (2011). Introduction to Stochastic Programming (2nd ed.). Springer Science+Business Media.
- ↑ "Стохастическое программирование". Википедия. [1]
- ↑ Gorissen, B. L., Yanıkoğlu, İ., & den Hertog, D. (2015). A practical guide to robust optimization. Omega, 53, 124-137.
- ↑ Bricker, D. L. SLPwR: Farmer Problem. University of Iowa. [2]