Programação Dinâmica

From Systems analysis Wiki
Jump to navigation Jump to search

Programação dinâmica (PD; em inglês: dynamic programming, DP) é um método para resolver problemas complexos de otimização, baseado na decomposição do problema original em uma sequência de subproblemas mais simples[1][2]. O método é aplicado a processos de tomada de decisão multiestágio, onde a solução ótima para o problema inteiro pode ser construída a partir das soluções ótimas de seus subproblemas.

O termo foi introduzido pelo matemático americano Richard Bellman na década de 1950[3]. Nesse contexto, a palavra "programação" é usada no sentido de "planejamento" ou "elaboração de um plano de ação ótimo", e não na escrita de código de computador[4].

Propriedades e Teoremas Fundamentais

A aplicabilidade da programação dinâmica a um problema é determinada pela presença de duas propriedades fundamentais.

Princípio da Otimalidade de Bellman

O conceito central do método é o princípio da otimalidade de Bellman (em inglês: Bellman's principle of optimality). Ele afirma que: quaisquer que sejam o estado inicial e a decisão inicial, as decisões subsequentes devem constituir uma estratégia ótima em relação ao estado resultante da primeira decisão[3].

Em outras palavras, qualquer parte de uma trajetória ótima é, por si só, ótima. Essa propriedade permite decompor o problema geral em uma sequência de subproblemas mais simples e resolvê-los recursivamente.

Subproblemas sobrepostos

Um problema possui a propriedade de subproblemas sobrepostos (em inglês: overlapping subproblems) se, ao resolvê-lo recursivamente, os mesmos subproblemas surgem repetidamente. A PD evita cálculos repetidos, armazenando as soluções de subproblemas já encontrados (essa técnica é chamada de memoização ou tabulação), o que aumenta significativamente a eficiência em comparação com uma busca recursiva ingênua.

Equação de Bellman

Do princípio da otimalidade deriva a principal relação de recorrência do método — a equação de Bellman[1]. Ela relaciona o "valor" (ganho ou custo ótimo) do estado atual com os valores dos estados subsequentes. Em sua forma geral, para um processo determinístico multiestágio com uma função objetivo aditiva, ela tem a seguinte aparência:

Vk1(x)=maxyU(x){φk(x,y)+Vk(fk(x,y))}

onde:

  • k — número da etapa (de m a 1);
  • x — estado do sistema na etapa k1;
  • y — decisão de controle tomada na etapa k;
  • φk(x,y) — ganho (ou custo) na k-ésima etapa;
  • fk(x,y) — função que define o novo estado do sistema;
  • Vk(s) — valor ótimo da função objetivo para o subproblema que começa na etapa k no estado s.

A equação é resolvida sequencialmente, geralmente "de trás para frente", movendo-se da última etapa para a primeira.

Exemplos de Aplicação

  • Problema do caminho mais curto em um grafo: Este problema possui a propriedade de subestrutura ótima, pois qualquer segmento de um caminho mais curto é, por si só, um caminho mais curto. Os algoritmos de Bellman-Ford e Floyd-Warshall são exemplos clássicos da aplicação da PD para resolver este problema[5].
  • Problema da mochila: O problema de encher otimamente uma mochila de capacidade limitada com itens de diferentes valores e pesos. A PD permite resolver este problema considerando os itens sequencialmente e calculando, a cada etapa, o valor máximo para todos os valores possíveis de capacidade restante.
  • Problema de alocação de recursos: A alocação de um recurso limitado (por exemplo, investimentos) entre vários projetos para maximizar o efeito geral.

Limitações

A principal limitação do método é a maldição da dimensionalidade (em inglês: curse of dimensionality) — um termo introduzido por Bellman para descrever o crescimento exponencial do número de estados e, consequentemente, da complexidade computacional, com o aumento do número de variáveis que descrevem o estado do sistema[6][7]. Isso limita a aplicação prática da PD exata para problemas de dimensão muito grande.

Conceitos Relacionados

  • Pesquisa Operacional
  • Teoria do controle ótimo
  • Processo de decisão de Markov (generalização estocástica)
  • Equação de Hamilton-Jacobi-Bellman (análogo para tempo contínuo)

Notas

  1. 1.0 1.1 "Programação Dinâmica". Grande Enciclopédia Russa. [1]
  2. "Programação dinâmica". Wikipédia. [2]
  3. 3.0 3.1 Reshetnikov A. N., Kochenkov A. V., Pirov D. M., Ryabokon D. A. (2011). Programação Dinâmica. Exemplos de Aplicação. Manual de Estudo, Universidade de Lobachevsky (FCMC). [3]
  4. "Dynamic programming". Wikipedia. [4]
  5. Bradley S. P., Hax A. C., Magnanti T. L. (1977). Applied Mathematical Programming. Addison-Wesley. [5]
  6. "Maldição da dimensionalidade". Wikipédia. [6]
  7. Jensen P. A. (2004). Dynamic Programming – Models. Operations Research Models and Methods, Univ. of Texas. [7]