Você está na página 1de 30

ESTUDO DIRIGIDO PESQUISA

OPERACIONAL:
MÉTODO DETERMINÍSTICOS

UNIDADE 6 – PROGRAMAÇÃO DINÂMICA

Prof. CARLA FERREIRA


Estudante: Simoni Renata Vitali Nehls
PROGRAMAÇÃO DINÂMICA
Introdução
 Com o avanço teórico proporcionado por Richard Bellman ainda na década de 50, a
programação dinâmica (PD) ganhou relevância principalmente em sistemas com forte
características de tomada de decisão e com presença de variáveis aleatórias.

 As facilidades e dificuldades da programação dinâmica são enunciadas por Bellman (1957)


já nas primeiras páginas de seus trabalhos. Há tempos autores se dedicam a trazer formas
alternativas para contornar, principalmente, a “maldição da dimensionalidade”
(crescimento exponencial da complexidade computacional).
Introdução

 A PD utiliza dois tipos básicos de variáveis: de estado e de decisão. A primeira descreve a


situação corrente de como o sistema se encontram e a segunda a ação que se toma sobre o
sistema Busca estabelecer a relação qualquer estado e a decisão ótima.
 A programação dinâmica combina duas abordagens, explorar todas as possibilidades, mas
evitando recalcular possibilidades já exploradas anteriormente.
 A forma de fazer isso é armazenar os resultados parciais para reutilizá-los depois quando
forem necessários.
Introdução

 Ao projetar o algoritmo de programação dinâmica, pode faze-lo:


 Top down;
 Bottom up;

Para que a programação dinâmica seja possível, é importante ter certeza que:
Uma solução ótima para o problema é sempre composta de soluções ótimas para os
subproblemas. Em outras palavras, se você dividir o seu problema em 2 problemas menores,
por exemplo, uma solução ótima para o problema original será a composição das soluções
ótimas desses 2 subproblemas.
PROGRAMAÇÃO DINÂMICA

 A Programação Dinâmica é um método que busca encontrar a solução de vários


subproblemas para, então, encontrar a solução do problema geral. A grande diferença dessa
metodologia é que os subresultados são armazenados em memória já que eles são
utilizados em diversos momentos dentro do cômputo da solução.

 A maior dificuldade para usar programação dinâmica não está nas construção dos
algoritmos em si, mas em discernir quando ou em que tipo de situação adotar a técnica.
Além disso, por muitas vezes a especificação da solução não é trivial.
PROGRAMAÇÃO DINÂMICA

  Sequência de Fibonacci,  tal série possui o seguinte comportamento:


PD – Metodologia: 4 Passos

1. Identificar o problema como sendo de programação dinâmica


Duas são as características principais para a primeira etapa, a saber:
 Subestrutura ótima: a solução ótima do problema provém das soluções de subproblemas
dependentes. Note que já na especificação do problema vê-se que para poder encontrar o
termo n, é necessário encontrar antes o termo n-1 e n-2, ou seja, a solução ótima depende
da melhor resultado de outros dois subproblemas
 Sobreposição de soluções: a solução ótima passa pela resolução de subproblemas que
aparecem duas ou mais vezes. Pela estrutura ilustrada abaixo, tomando como exemplo n =
4, percebe-se que o cálculo de fib(2) é requisitado por duas vezes. Assim, encontrar termos
dessa série possui sobreposição de soluções.
PD – Metodologia: 4 Passos

Chamadas recursivas para cálculo de termo da série de Fibonacci.


PD – Metodologia: 4 Passos

2. Definir o valor da solução ótima recursivamente


Para o caso da série de Fibonacci, esta etapa é relativamente simples já que na própria
especificação do problema observa-se que a própria função é demandada novamente para
descoberta dos termos n-1 e n-2. Levando isso para o python, tem-se:
PD – Metodologia: 4 Passos

3. Calcular valor da solução ótima da forma “bottom-up” ou “top-down”


A ideia da técnica é evitar cálculos repetidos na busca da solução ótima de um problema
recursivo. Para isso, cria-se uma estrutura na memória a fim de guardar tais resultados. Há duas
abordagens para alcançar tal objetivo:
 Abordagem “Top-Down” (memoization): parte-se da solução geral ótima que se deseja
encontrar e, então, analisa-se quais subproblemas são necessários resolver até que se chegue
em um subproblema com resolução trivial. Importante lembrar que ao longo dos cálculos os
resultados são armazenados para que sejam reutilizados. Dessa forma, o algoritmo observa
primeiramente na tabela se a solução ótima do subproblema já foi computado. Caso
positivo, simplesmente extrai o valor. Caso negativo, resolve e salva o resultado na tabela.
 Abordagem “Bottom-up” (tabulation): a solução ótima começa a ser calculada a partir do
subproblema mais trivial. No caso da série de Fibonacci, basta entender que para se calcular
o termo n,a resolução sempre inicia pelo fib(0), depois fib(1), fib(2) e assim sucessivamente
até chegar em fib(n). 
PD – Metodologia: 4 Passos
Abordagem top-down x bottom-up

4. Construir uma solução ótima a partir de informações calculadas

Construindo a solução, avalia-se os resultados e desempenho.


Curiosidade da PD

 Trecho traduzido artigo: STUART DREYFUS; RICHARD BELLMAN ON THE BIRTH


OF DYNAMIC PROGRAMMING; Operations Research, 2002. No trecho abaixo está o
trecho de uma entrevista com o criador da programação dinâmica, Richard Bellman.
"A década de 1950 não foi boa para a pesquisa em matemática. Tivemos um cavalheiro muito
interessante em Washington chamado Wilson. Ele foi secretário de Defesa, e realmente tinha
um medo patológico e ódio da palavra "pesquisa". Não estou usando o termo levemente; Eu
estou usando-o precisamente. Seu rosto ficava vermelho, e ele ficava violento se as pessoas
usassem o termo "pesquisa" em sua presença. Você pode imaginar como ele se sentia então,
sobre o termo 'matemática'. A RAND Corporation foi contratada pela Força Aérea e a Força
Aérea tinha Wilson como seu chefe. Daí, eu senti que tinha que fazer alguma coisa para
esconder do Wilson e da Força Aérea do fato de que eu estava realmente fazendo matemática
dentro da RAND Corporation.
Curiosidade da PD

Que título, nome, eu poderia escolher? Em primeiro lugar eu estava interessado no


planejamento, na tomada de decisão, no raciocínio. Mas "planejamento", não é uma boa
palavra para várias razões. Decidi, portanto, usar a palavra "programação". Eu queria passar a
idéia de que era dinâmica, que era em múltiplos estágios, que variava de acordo com o tempo;
eu pensei, vamos matar dois coelhos em uma cajadada só. Vamos usar uma palavra que tem
um significado absolutamente preciso: "dinâmica", no sentido clássico da física. Ele também
tem uma propriedade muito interessante como um adjetivo, isto é, é impossível usar a palavra
"dinâmica" em um sentido pejorativo. Tente pensar de alguma combinação que irá,
eventualmente, dar-lhe um sentido pejorativo. É impossível. Assim, eu pensei que
"programação dinâmica" era um bom nome. Era algo que nem mesmo um congressista poderia
opor-se. Então eu usei-o como um guarda-chuva para as minhas atividades.
Aplicações
 Um dos primeiros trabalhos a tratar a gestão dos reservatórios com programação dinâmica
estocástica (PDE) foi Little (1955), já incluindo variáveis aleatórias correlacionadas na
operação do reservatório de Grand Coulee no Rio Columbia, EUA.
 Os trabalhos de Hall e Buras (1961) e Hall, Butcher e Esogbue (1968) trouxeram novas
releituras da operação de sistemas hidro-térmicos. Os autores abordaram problemas
determinísticos de otimização de desenvolvimento e expansão de reservatórios
(dimensionamento) e otimização de sistemas hidrotérmicos com múltiplos preços
associados a produção de energia (aplicado a barragens de Shasta e Keswick no rio
Sacramento, EUA), fazendo uma combinação linear ponderada de preços.
Aplicações
 Um exemplo clássico com técnicas aproximadas é a programação dinâmica incremental, onde o
espaço de busca do problema é limitado pela política obtida na iteração anterior. Um dos
primeiros a aplicar essa técnica no problema de operação de reservatórios foi Bernholtz e Graham
(1960), em um trabalho fundamentado com critérios econômicos de otimização, e que argumenta
a limitação do espaço de busca pelo fato da técnica fazer buscas incrementais de custo, que só
valem para variações pequenas na política.
 Larson (1968) propôs novas práticas de limitação do espaço de estados, fazendo buscas em
“blocos” e usando os resultados de forma aproximada para obter informação de estados ainda não
calculados .
 Distribuição de forma mais eficiente, nas empresas, indústrias e etc., de forma mais eficiente o
esforço (o recurso) entre as atividades.
 Resolução de problemas operacionais (exemplo problema de manutenção e substituição de
equipamentos).
Aplicações

 PEREIRA; PINTO, (1985) faz o uso das decomposições de Benders e métodos de


programação linear para otimizar sistemas com múltiplos reservatórios com variáveis
aleatórias.
 Atualmente, empresas de diversos setores, auxiliando na tomada de decisões. sendo que
permite ao mesmo.
 Pelo tomador de decisões, que a cada estado escolhe, de um conjunto de ações viáveis,
aquela que lhe pareça mais conveniente. Com isto, uma sequência de retornos, que pode
ser: distâncias percorridas, tempo gasto, receitas, lucros, custos, prejuízos e etc., será
gerada.
Subsequência Comum mais Longa

  Aparece em várias áreas como Genética e Engenharia de Software.


 Dado uma string X =, , . . . , , uma subsequência de X é qualquer string ,..., onde < , ou
seja, uma sequência de caracteres, não necessariamente contínua, mas na mesma ordem
que se encontra em X.
 A sequência Z = B, C, D, G é uma subsequência de X = F, A, B, C, B, D, A, B, G. Dados
duas strings X e Y , uma subsequência comum Z é uma subsequência de X e Y ao mesmo
tempo
 Se X = A, B, C, G, B, A e Y = F, G, B, A, C, B, A, a sequência B, C, A é comum a X e Y .
A sequência B, C, A não é a subsequência comum mais longa (LCS - Longest Common
Subsequence, em inglês), pois tem tamanho 3. A subsequência B, C, B, A tem tamanho 4 a
qual é comum a X e a Y , portanto uma subsequência comum mais longa.
Subsequência Comum mais Longa

 O problema da LCS é o problema de encontrar a subsequência de tamanho máximo que


seja comum as sequências X e Y.

 Etapas:
1) Caracterização de uma Subsequência Comum mais longa (LCS);
2) Formulação Recursiva;
3) Calcular o comprimento da LCS;
4) Calcular o comprimento da solução ótima
CADEIAS DE MATRIZES

  Dada uma cadeia de matrizes, < matriz tem a dimensionalidade × , encontra


uma parentetização para o produto minimizando número escalar de
multiplicações.
 Algoritmo para multiplicação de duas matrizes:
Exemplo

Em um processo de laminação, uma barra de metal com 10 cm de espessura é passada por três
rolos, até atingir uma espessura de 4 cm. O custo de operação de um destes rolos depende da
espessura da barra na entrada do rolo, e da redução da espessura, conforme é mostrado no
quadro abaixo:

Determine o plano ótimo de produção deste processo.


Resolução

Sistema: É a BARRA (é o que se transforma...)


Resolução

 Estágio: Número de rolos pelos quais a barra ainda deverá passar.


n = {0, 1, 2, 3}
 Estado: Espessura da barra
i = {10, 9, 8, 7, 6, 5, 4}
 Ação: Redução da espessura
K = {0, 1, 2, 3} OBSERVAÇÃO: 1, 2 e 3→Tabela

 Retorno: Custo da conformação de cada rolo


 Observação: Aqui não depende de “n”
r(i, k) → Tabela
Resolução

 Função de Transição: j = i – k
 Função de Recorrência: Observação: Queremos minimizar sob todas as ações k viáveis
associadas ao estado n

 Condição de contorno (inicial). Tenho que conhecer f(0,j), 10 ≥ 𝑗 ≥ 4.


 Valores Residuais:
Resolução

 Ações Viáveis:
0≤𝑘≤3
Não posso reduzir mais que 3!

Logo, 𝐾𝑛𝑖 = {𝑘/0 ≤ 𝑘 ≤ 𝑚𝑖𝑛.{3,𝑖 − 4}.


Resolução
Exemplo: Implementação + Solver
Resolução
Resolução
Bibliografia

 HILLIER, F. S. Introdução à pesquisa operacional. Rio de Janeiro, Editora Campus, 1988


 ARENALES, M., ARMENTANO, V., MORABITO, R. e YANASSE, H., Pesquisa
Operacional. Ed. Campus, 2007.
 https://sites.google.com/site/ldsicufal/disciplinas/programacao-avancada/notas-de-aula---pr
ogramao-dinmica
 http://repositorio.unicamp.br/bitstream/REPOSIP/336154/1/Lima_RodrigoBarbosaDe_M.p
df
 https://lamfo-unb.github.io/2019/05/30/Programacao-Dinamica/
 https://131748a9-e521-8c64-55be-f2367680bd87.filesusr.com/ugd/26a617_b105b349bea8
43b081aa585ac0e66994.pdf

Você também pode gostar