Dynamisch programmeren
Dynamisch programmeren (DP; Engels: dynamic programming, DP) — is een methode voor het oplossen van complexe optimalisatieproblemen, gebaseerd op het opdelen van het oorspronkelijke probleem in een reeks eenvoudigere deelproblemen[1][2]. De methode wordt toegepast op meerstapsprocessen voor besluitvorming, waarbij de optimale oplossing van het gehele probleem kan worden opgebouwd uit de optimale oplossingen van de deelproblemen.
De term werd geïntroduceerd door de Amerikaanse wiskundige Richard Bellman in de jaren 1950[3]. In deze context wordt het woord "programmeren" gebruikt in de betekenis van "plannen" of "het opstellen van een optimaal actieplan", en niet het schrijven van computercode[4].
Belangrijkste eigenschappen en stellingen
De toepasbaarheid van dynamisch programmeren op een probleem wordt bepaald door de aanwezigheid van twee fundamentele eigenschappen.
Bellmans optimaliteitsprincipe
Het centrale concept van de methode is het optimaliteitsprincipe van Bellman (Engels: Bellman's principle of optimality). Dit stelt: ongeacht de begintoestand en de initiële beslissing, moeten de daaropvolgende beslissingen een optimale strategie vormen ten opzichte van de toestand die het resultaat is van de eerste beslissing[3].
Met andere woorden: elk deel van een optimaal traject is op zichzelf ook optimaal. Deze eigenschap maakt het mogelijk het algemene probleem op te splitsen in een reeks eenvoudigere deelproblemen en deze recursief op te lossen.
Overlappende deelproblemen
Een probleem heeft de eigenschap van overlappende deelproblemen (Engels: overlapping subproblems) als bij de recursieve oplossing ervan dezelfde deelproblemen meerdere keren opduiken. DP maakt het mogelijk herhaalde berekeningen te vermijden door de oplossingen van reeds tegengekomen deelproblemen op te slaan (deze techniek wordt memoïzatie of tabulatie genoemd), wat de efficiëntie aanzienlijk verhoogt ten opzichte van naïeve recursieve opsomming.
Bellmanvergelijking
Uit het optimaliteitsprincipe volgt de fundamentele recursiebetrekking van de methode — de Bellmanvergelijking[1]. Deze koppelt de "waarde" (optimale winst of kosten) van de huidige toestand aan de waarden van de daaropvolgende toestanden. In algemene vorm ziet de vergelijking er voor een deterministisch meerstapsproces met een additieve doelfunctie als volgt uit:
waar:
- — het stapnummer (van tot 1);
- — de toestand van het systeem op stap ;
- — de bestuurbare beslissing die wordt genomen op stap ;
- — de winst (of kosten) op de k-de stap;
- — de functie die de nieuwe toestand van het systeem bepaalt;
- — de optimale waarde van de doelfunctie voor het deelprobleem dat begint op stap in toestand .
De vergelijking wordt stapsgewijs opgelost, doorgaans "van achteren af", door van de laatste stap naar de eerste stap te werken.
Toepassingsvoorbeelden
- Het kortste-padprobleem in een graaf: Dit probleem heeft de eigenschap van optimale deelstructuur, omdat elk segment van het kortste pad zelf ook het kortste pad is. De algoritmen van Bellman-Ford en Floyd-Warshall zijn klassieke voorbeelden van de toepassing van DP voor het oplossen van dit probleem[5].
- Het knapzakprobleem: Het probleem van de optimale vulling van een knapzak met beperkte capaciteit met voorwerpen van verschillende waarden en gewichten. DP maakt het mogelijk dit probleem op te lossen door de voorwerpen stapsgewijs te beschouwen en bij elke stap de maximale waarde te berekenen voor alle mogelijke waarden van de resterende capaciteit.
- Het middelenverdelingsprobleem: Het verdelen van een beperkte hoeveelheid middelen (bijvoorbeeld investeringen) over meerdere projecten om het totale effect te maximaliseren.
Beperkingen
De belangrijkste beperking van de methode is de vloek van de dimensionaliteit (Engels: curse of dimensionality) — een term die door Bellman werd geïntroduceerd om de exponentiële groei van het aantal toestanden en daarmee de rekenkundige complexiteit aan te duiden, naarmate het aantal variabelen dat de toestand van het systeem beschrijft toeneemt[6][7]. Dit beperkt de praktische toepassing van exacte DP voor problemen met een zeer grote dimensionaliteit.
Verwante begrippen
- Operations research
- Theorie van optimale regeling
- Markov-beslissingsproces (stochastische veralgemening)
- Hamilton-Jacobi-Bellmanvergelijking (analogon voor continue tijd)
Noten
[1] [2] [3] [4] [5] [6] [7] </references>
- ↑ 1.0 1.1 1.2 "Динамическое программирование". Большая российская энциклопедия. [1]
- ↑ 2.0 2.1 "Динамическое программирование". Википедия. [2]
- ↑ 3.0 3.1 3.2 Решетников А. Н., Коченков А. В., Пиров Д. М., Рябоконь Д. А. (2011). Динамическое программирование. Примеры применения. Учебное пособие, ННГУ им. Лобачевского (ВМиК). [3]
- ↑ 4.0 4.1 "Dynamic programming". Wikipedia. [4]
- ↑ 5.0 5.1 Bradley S. P., Hax A. C., Magnanti T. L. (1977). Applied Mathematical Programming. Addison-Wesley. [5]
- ↑ 6.0 6.1 "Проклятие размерности". Википедия. [6]
- ↑ 7.0 7.1 Jensen P. A. (2004). Dynamic Programming – Models. Operations Research Models and Methods, Univ. of Texas. [7]