• Nenhum resultado encontrado

2.3 Dados e Resultados

3.1.3 Programação Dual Dinâmica Estocástica (PDDE ou SDDP em inglês)

tização das variáveis de estágio e a consideração dos múltiplos cenários das variáveis estocásticas acarreta em aumento exponencial de complexidade à medida que se acrescentam componentes nas variáveis de estado (maldição da dimensionalidade), o que impede a aplicação prática da técnica a problemas com vetores de estado de grande tamanho e muitos estágios ([58]).

Deste modo, houve a necessidade de se propor alternativas ou melhorias para solucionar a limitação do método de SDP a problemas de grande escala. Dentre os métodos propostos está

o PDDE ou Stochastic Dual Dynamic Programming (SDDP) em inglês ([58]), um algoritmo de

amostragem variante de técnicas de decomposição aninhada ([8], [9]) que utiliza um número finito de cenários. Consideraremos a aplicação do SDDP para resolver problemas risco neutros. Para

a extensão do método para resolver problemas envolvendo medidas de risco ver [65], [35], [36], [30]. O SDDP soluciona uma pequena parte dos cenários de uma árvore de cenários, construindo a política ótima com base em aproximações das funções de custo futuro, definidas através de funções afim construídas por hiperplanos de suporte conhecidos como cortes de Benders (ou, simplesmente, cortes). Os hiperplanos são obtidos pela solução dual do problema de otimização de cada estágio e são adicionados a função custo a cada iteração do algoritmo. Esta abordagem evita a necessidade de construção de aproximações da função custo com base em um conjunto de valores discretos das variáveis de estado, contornando a maldição da dimensionalidade do SDP. Para entender melhor o algoritmo, considere o problema (3.9), com 𝑀 cenários possíveis para o vetor aleatório 𝜉 e cada cenário com probabilidade {𝑝𝑖, 𝑖 = 1,...,𝑀 }, tal que ∑︀𝑀𝑖=1𝑝𝑖 = 1.

Pereira e Pinto demonstram que as funções de custo futuro Q(𝑥1)são construídas exatamente

por funções lineares afim (cortes). Assim, utilizando apenas uma sub-amostra de valores para 𝑥1, é possível construir cortes que podem ser utilizados no estágio anterior para prover valores da

função de custo esperada 𝒬(𝑥1) para qualquer valor de teste de 𝑥1. Para calcular esses cortes, o

algoritmo performa duas iterações principais, conhecidas como passo Forward e passo Backward. No passo Forward, um cenário para a variável aleatória é sorteado da árvore de cenários, e as decisões são tomadas com base neste cenário, começando do primeiro estágio. Nesta etapa, são calculados o valor final da função objetivo e as políticas escolhidas (pontos de teste para 𝑥1).

Após a definição de pontos de teste, o algoritmo prossegue para o passo Backward, onde se refina a política ótima sugerida adicionando um novo corte a cada estágio do problema, iniciando no último estágio e evoluindo para trás até o primeiro estágio.

Assim, a aproximação da função de custo futura é obtida pelo seguinte problema Q𝑗(𝑥1) =

{︂

min 𝑓

𝑓 ≥ 𝜋𝑖𝑗(𝑏2𝑗− 𝐸1𝑥1), 𝑖 = 1,...,𝑛 (3.13)

para todo 𝑗 = 1,...,𝑀, onde 𝜋𝑖𝑗 é o multiplicador simplex associado a restrição do problema

de segundo estágio do cenário 𝑗, calculado no ponto de teste ˆ𝑥1𝑖. Assim, dado o conjunto de

pontos de teste {𝑥1𝑖, 𝑖 = 1,...,𝑛}, é possível calcular os multiplicadores associados {𝜋𝑖𝑗, 𝑖 = 1,...,𝑛}

para todo 𝑗 = 1,...,𝑀, resolvendo (3.13) para todo 𝑗 com o conjunto de pontos de teste acima. Como a aproximação da função de custo futura obtida utiliza apenas parte da totalidade de hiperplanos de corte que definem a função de custo futuro de cada um dos M cenários, ela é o limite inferior da função de custo futuro de cada cenário, e o problema de primeiro estágio se torna

𝑧 = {︂

min 𝑐1𝑥1+ 𝒬(𝑥1)

𝐴1𝑥1 ≥ 𝑏1 (3.14)

Utilizando (3.13) podemos reescrever (3.14) como 𝑧 = ⎧ ⎨ ⎩ min 𝑐1𝑥1+ 𝑓 𝐴1𝑥1 ≥ 𝑏1 𝑓 − 𝜋𝑖𝑗(𝑏2𝑗 − 𝐸1𝑥1) ≥ 0, 𝑖 = 1,...,𝑛, 𝑗 = 1,...,𝑀 (3.15) onde a solução de (3.15) dá o limite inferior 𝑧 do custo ótimo verdadeiro, i.e., 𝑧 = 𝑐1𝑥1+ 𝑓.

Um limite inferior sobre o valor ótimo é assim definido como o custo esperado de primeiro estágio, que é a soma dos custo presente e custos esperados futuros aproximados. O limite su- perior ¯𝑧, por sua vez, é definido como a estimativa do custo esperado total obtido ao se avaliar a política ótima definida pelos cortes em diversos cenários. A proximidade estatística entre um limite inferior e superior observa a convergência entre os passos Backward e Forward, e é testada por algum tipo de critério de parada. Um candidato a critério de parada é a diferença entre ¯𝑧 e 𝑧 ser inferior a um farrafo. Caso o critério de parada não seja atendido após a realização de dados passos Forward e Backwards, deve ser feita nova iteração, determinando vértices adicionais para refinar a aproximação. Para a escolha dos pontos de teste, Pereira e Pinto sugerem simulações de Monte Carlo da amostra de cenários.

O método SDDP para problemas multiestágios pode ser vista em detalhe no algoritmo para 𝑇 estágios abaixo.

Passo Forward. A cada iteração 𝑘, o algoritmo aproxima 𝒬𝑡 por 𝒬𝑘𝑡(𝑥) = max1≤𝑗≤𝑘𝛼𝑗𝑡 +

⟨𝛽𝑡𝑗,𝑥⟩. No início de cada iteração é sorteado um cenário 𝜉𝑘

2,...,𝜉𝑘𝑇 a partir dos 𝑀 cenários exis-

tentes.

No passo Forward se resolve para 𝑡 = 1,...,𝑇 o problema 𝑧 = ⎧ ⎨ ⎩ min 𝑥𝑇𝑡𝑐𝑘𝑡 + 𝑓 𝑥𝑡∈ 𝑋𝑡(𝑥𝑘𝑡−1,𝜉𝑡𝑘) 𝑓 ≥ 𝛼𝑗𝑡+ < 𝛽𝑡+1𝑗 ,𝑥𝑡>, 𝑗 = 1,...,𝑘 − 1, (3.16) com (𝑥𝑘

0,𝜉1𝑘) = (𝑥0,𝜉1) dados e solução ótima 𝑥𝑘𝑡.

Como visto acima, no passo Forward, são calculados o valor final da função objetivo e as políticas escolhidas a cada estágio. O objetivo é determinar bons valores de teste com base nas políticas ótimas {𝑥𝑘

𝑡, 𝑡 = 1,...,𝑇 − 1}do problema (3.16). Esses valores seráo utilizados no passo

Backward seguinte do algoritmo, para gerar novo corte para aproximar a função de custo futura de cada estágio.

Na primeira iteração o algoritmo inicia tomando como pontos de teste qualquer política fac- tível, i.e., 𝑥1

𝑡 ∈ 𝑋𝑡(𝑥1𝑡−1,𝜉𝑡1).

Do passo Forward deve-se também computar a média ¯𝑧𝑁 e o desvio padrão 𝜎𝑁 do custo total

∑︀

𝑡=1,...,𝑇(𝑐𝑘𝑡)𝑇𝑥𝑘𝑡 dos últimos 𝑁 passos Forward.

Passo Backward. No passo Backward é calculado um novo corte para aproximação das funções de custo futuro.

Assim, para 𝑡 = 𝑇,...,2, resolve-se o problema abaixo para todos os cenários possíveis 𝑗 = 1, . . . ,𝑀, 𝑓𝑡𝑗𝑘 = ⎧ ⎨ ⎩ min 𝑐𝑇𝑡,𝑗𝑥𝑡+ 𝑓 𝑥𝑡∈ 𝑋𝑡(𝑥𝑘𝑡−1, 𝜉𝑡,𝑗), 𝑓 ≥ 𝛼ℓ𝑡+ ⟨𝛽𝑡+1ℓ , 𝑥𝑡⟩, ℓ = 1, . . . ,𝑘. (3.17) onde 𝛽 corresponde ao corte definido pela solução dual do problema acima. Denotando por 𝜋𝑘

𝑡𝑗

multiplicadores de Lagrange ótimos associados as restrições de igualdade para o problema acima, calculamos 𝛼𝑘𝑡 =∑︀𝑀 𝑗=1𝑝𝑡𝑗[𝑓 𝑗𝑘 𝑡 + ⟨𝐵𝑡𝑗𝑇𝜋𝑘𝑡𝑗, 𝑥𝑘𝑡−1⟩], 𝛽𝑡𝑘= ∑︀𝑀 𝑗=1𝑝𝑡𝑗𝐵𝑡𝑗𝑇𝜋𝑡𝑗𝑘. Para 𝑡 = 1, resolvemos

⎧ ⎨ ⎩ min 𝑐𝑇1𝑥𝑡+ 𝑓 𝑥1 ∈ 𝑋1(𝑥0, 𝜉1), 𝑓 ≥ 𝛼ℓ1+ ⟨𝛽ℓ2, 𝑥1⟩, ℓ = 1, . . . ,𝑘, (3.18) cujo valor ótimo é o novo limite inferior 𝑧inf da função objetivo.

Critério de parada. Há diversos critérios de parada possíveis. Uma sugestão é interromper o algoritmo quando 𝑧sup−𝑧inf

𝑧sup ≤ 0.05, onde 𝑧inf é o valor ótimo do primeiro estágio do problema

e 𝑧sup= ¯𝑧𝑁 + 1.65𝜎𝑁/

√ 𝑁.

3.1.4 Extensões do SDDP, Seleções de Corte e Algoritmos de decomposição

Documentos relacionados