• Nenhum resultado encontrado

2.7 Algoritmos de Otimização: Busca com Informação

2.7.1 Algoritmo de Programação Dinâmica: Aspectos Gerais

O estudo sistemático do algoritmo de programação dinâmica teve início em 1955 com Richard Bellman, na Universidade de Princeton (EUA). Cabe esclarecer que a

palavra "programação", assim como no caso dos conteúdos inerentes à programação linear, se refere ao uso de tabelas para a resolução dos problemas propostos. A palavra “programação” também pode se entendida como a técnica usada para resolver um modelo, ou seja, o programa.

O algoritmo de programação dinâmica é utilizado em problemas de otimização nos quais escolhas devem ser feitas com o objetivo de se alcançar uma solução ótima. Programação dinâmica é a técnica utilizada para a resolução de problemas de otimização quando nem todas as variáveis da função-custo estão simultaneamente inter- relacionadas (BALLARD e BROWN, 1982). A resolução de um problema envolvendo programação dinâmica conduz à decomposição do problema original numa seqüência de problemas isolados, mais simples e de mesma natureza ou de natureza similar, unidos por via recursiva.

2.7.1.1 O Algoritmo de Programação Dinâmica

Dado um problema P, quando nem todas as variáveis de P estão simultaneamente interrelacionadas, pode-se decompor P em uma seqüência de problemas menores e isolados P' (mais simples), de natureza igual ou semelhante a de P, unidos por via recursiva, de modo que, resolvendo a seqüência de subproblemas P', obtém-se uma solução para P. Freqüentemente, estes subproblemas não diferem entre si. Porém, algumas vezes, pode ocorrer que na decomposição de P surjam m1 problemas do tipo P'1, m2 problemas do tipo P'2,

e assim por diante. Pode-se pensar que, neste caso, seria mais interessante solucionar P em um único passo, ao invés de solucionar os mi problemas P'i. No entanto, a resolução direta de P

pode esbarrar em um alto grau de complexidade. Assim, a solução do problema corresponde essencialmente em: 1) a cada subproblema P'i solucionado (etapa), a partir das variáveis locais

envolvidas na etapa (variáveis de estado), armazena-se o resultado em tabelas; 2) após a solução dos subproblemas, determina-se uma solução ótima para P efetuando-se uma trajetória reversa pelas tabelas computando-se os valores nelas expressos (CARVALHO et al., 1999). O armazenamento em tabelas permite o acesso a cada solução particular de P'i em

qualquer momento.

Furtado (1973) especifica que, esta técnica destina-se a encontrar uma solução ótima (mínima ou máxima) e que, com pequenas alterações, tal esquema pode ser

estendido para determinar não um, mas todos os caminhos ótimos subsequentes alternativos. Pode-se então afirmar que, o algoritmo de programação dinâmica segue o princípio de otimalidade, ou seja, a melhor seqüência de decisões tem a propriedade de que, qualquer que seja a última decisão tomada, a seqüência de decisões que conduzem à última etapa deve ser também ótima (CARVALHO et al., 1999). Uma conseqüência importante do princípio de otimalidade, é que são necessárias apenas informações locais para os cálculos (CARVALHO et al., 1999).

2.7.1.2 Condições para a Obtenção de Solução por Programação Dinâmica

Esta seção visa responder: "Quando um determinado problema pode ter sua solução determinada pelo algoritmo de programação dinâmica?"

Para responder a esta pergunta, duas características fundamentais devem ser verificadas em um problema de otimização para que o algoritmo de programação dinâmica possa ser utilizado em sua resolução. Tais características são:

Subestrutura Ótima

Como foi dito, um problema passível de ser resolvido por programação dinâmica é aquele no qual nem todas as variáveis envolvidas estão simultaneamente interrelacionadas. Assim, o problema inicial pode ser decomposto em uma série de problemas menores e similares de modo que se chegue à uma solução ótima por meio de uma retrobusca (bottom-up). Assim, dizer que um problema de otimização possui a característica de

subestrutura ótima significa dizer que o problema possui em seu interior soluções ótimas para seus subproblemas integrantes (CORMEN et al., 2002). Uma vez que, a solução ótima obtida a partir de programação dinâmica é composta das soluções dos subproblemas integrantes, deve-se garantir que no intervalo de subproblemas considerados estejam aqueles que determinam a solução ótima. Normalmente nos problemas de otimização deve-se considerar não somente a busca de uma solução como também o custo computacional relacionado à esta busca. Assim, pode-se verificar que o custo computacional depende do número de subproblemas e de quantas escolhas estão presentes em cada subproblema. Dessa forma, no caso de programação dinâmica, todos os subproblemas são resolvidos para que ao final se estabeleça a solução ótima, ou seja, a resolução do problema se dá de baixo para cima

(bottom-up), percorrendo as subestruturas ótimas em caminho inverso até estabelecer uma

solução ótima. Tem-se então que o custo computacional da solução do problema é normalmente igual ao somatório dos custos da resolução de cada subproblema mais o custo da obtenção da solução ótima em si. Assim sendo, o custo total do processo é diretamente proporcional à quantidade de subproblemas (ou subestruturas ótimas), relacionados com o problema original.

Subproblemas Superpostos

A segunda característica, que um problema passível de ser resolvido por programação dinâmica deve ter, é a de envolver subproblemas superpostos. Tal característica implica no fato de que o espaço de subproblemas deve ser pequeno, ou seja, os subproblemas devem, se possível, ser de mesma natureza, ou ainda, que o número de tipos de subproblemas seja mínimo. Assim, se um algoritmo recursivo reexaminar um número mínimo de subproblemas inúmeras vezes, pode-se lançar mão dessa característica resolvendo cada subproblema uma única vez, para cada entrada de dados, e armazenar as soluções em uma tabela, de modo que os valores inerentes aos cálculos já efetuados não sejam recalculados, mas apenas acessados (ou rememorados), usando um tempo constante por pesquisa.

Documentos relacionados