Execução de Estudos - SPARHTACUS/SPTcpp GitHub Wiki

Execução de Estudos

Com os dados de entrada no formato do SPTcpp, a execução de um estudo é feita de maneira simples.

Como sugestão, o usuário pode adicionar um diretório contendo o executável do SPTcpp como um path nas variáveis de ambiente para facilitar na hora de chamá-lo.

O procedimento de execução de um estudo é realizado no Windows, mas os passos são análogos no Linux.

1. O diretório com os dados do estudo é DadosEntradaNick.

dadosMP

2. A partir do diretório raíz, chamar o MPIEXEC apontando para o executável do SPTcpp e passar os seguintes argumentos:

  mpiexec.exe -n X SPTWIN_app.exe -nick NICK

O valor X que acompanha o argumento -n é o número de processos paralelos na resolução do problema. No caso de um problema determinístico, qualquer valor acima de 1 não surtirá efeito na resolução do problema.

O valor NICK que acompanha o argumento -nick é o apelido do estudo.


Otimização e Simulação

Em relação ao tipo de execução, o SPTcpp possibilita ao usuário escolher entre:

  • Apenas otimização (otimizacao)
  • Otimização e simulação (otimizacao_e_simulacao)
  • Apenas simulação (simulacao)

A escolha é feita se alterando o atributo tipo_estudo do arquivo DADOS_AttComumOperacional.csv, devendo ser passado o dado indicado acima entre parênteses.

Na verdade, muitas parametrizações do estudo são feitas alterando-se atributos do arquivo DADOS_AttComumOperacional.csv.

No caso de simulação o usuário deve informar o diretório dos cortes no atributo diretorio_importacao_cortes de DADOS_AttComumOperacional.csv. O usuário também pode importar cortes na otimização do problema, muito útil em caso de retomada do programa após um desligamento não programado, por exemplo.

Em uma execução em cadeia das etapas de planejamento, o usuário pode fazer o acoplamento entre elas apontando o diretório de cortes gerados pela etapa seguinte no atributo diretorio_importacao_pos_estudo de DADOS_AttComumOperacional.csv. O modelo SPTcpp comporta o acoplamento estático (resolução uma por vez) e dinâmico (resolução simultânea) das etapas do planejamento eletroenergético.


Parametrizações do Estudo

O usuário tem liberdade para alterar vários atributos relacionados à otimização/simulação do problema, todas elas no arquivo DADOS_AttComumOperacional.csv. Alguns atributos que o usuário pode escolher são:

  • A escolha do solver, feita no atributo tipo_solver (gurobi ou clp). Bem como suas tolerâncias de otimalidade e viabilidade (tolerancia_otimalidade e tolerancia_viabilidade);
  • Número máximo de iterações, feita no atributo numero_maximo_iteracoes;
  • Diversas flags, como imprimir os problemas de otimização de cada iteração e estágio (imprimir_solver), imprimir os cortes de cada iteração (imprimir_corte_por_iteracao), remover cortes dominados (remover_cortes_dominados), entre outros.

Para maximizar a performance computacional no caso da PDDE, o programa determina automaticamente os cenários a serem visitados nas etapas forward do algoritmo com base no número total de cenários (atributo numero_cenarios), número máximo de iterações (atributo numero_maximo_iteracoes) e número de processadores a serem utilizados na paralelização. Ex.: Para numero_cenarios = 9000 cenários distintos a serem visitados pelo algoritmo, 45 iterações e 10 processadores, o programa visitará 200 dos 9000 cenários a cada etapa forward (e backward). Caso se utilizem 6 processadores, o programa visitará 198 cenários nas etapas forwards das 44 iterações iniciais e 288 cenários na iteração final.

Caso o atributo visitar_todos_cenarios_por_iteracao = sim, todos os 9000 cenários do exemplo acima seriam visitados a cada etapa forward.


Janela de Execução

Ao se executar o modelo SPTcpp, o andamento da execução é mostrado na tela.

  • Ao se realizar a otimização de um estudo, o primeiro procedimento que o modelo faz é montar o modelo de otimização;
  • Se o usuário setou a iteração inicial como 0, o modelo faz uma simulação inicial com todos os cenários e posteriormente começa as iterações;
  • Ao final de cada iteração, é impresso na tela o tempo médio do solver no forward e backward, o custo superior e inferior, brecha de otimalidade e o tempo da iteração e o tempo total de otimização;
  • Se o tipo de estudo for otimização e simulação, ao terminar as iterações no processo de otimização, o modelo importa os cortes automaticamente e faz a simulação do modelo. Resultados de tempo e custos são exibidos;
  • Ao final da execução, o tempo total de otimização e de execução é mostrado e o modelo é encerrado.

Abaixo é mostrado um exemplo de execução completa do modelo, com otimização e simulação. janela_execucao


Gerando Novo Processo Estocástico

O modelo SPTcpp permite ao usuário uma alta flexibilidade na criação de árvores de cenários no âmbito do médio prazo. Alguns pontos interessantes são:

  • Realização por bacia ou por usina hidrelétrica;
  • O número de aberturas por estágio é customizável;
  • Escolha de diferentes sementes tanto no sorteio da realização quanto nos cenários de afluências sorteados;
  • Escolha da ordem máxima de correlação; entre outros.

É interessante notar que o processo estocástico hidrológico é um dado de entrada do programa. Isso possibilita que processos estocásticos gerados a partir de outros ambientes (Matlab, R, Python e etc.) venham a funcionar no SPT, desde que os dados sejam dispostos conforme os arquivos do diretório ProcessoEstocasticoHidrologico. Metodologicamente falando, um processo estocástico para geração de série temporal é compatível com o SPTcpp quando possui dependência temporal linear (coeficiente linear de autocorrelação) e resíduos aleatórios de amostra comum (propriedade da árvore de cenário) gerados de maneira independente no tempo (o sorteio do presente não possui relação com o passado).

Importante: Em caso de um estudo do tipo otimizacao_e_simulacao ou simulacao, a simulação da operação ocorrerá nos cenários do processo estocástico informado. Caso se deseje realizar uma simulação em cenários out-of-sample (que basicamente podem ser diferentes dos cenários da otimização, geralmente providos de uma amostra maior do espaço amostral) uma nova chamada do programa deverá ser feita com o processo estocástico desejado.

A seguir é apresentado um exemplo prático de como se parametrizar um novo processo estocástico.

Exemplo de Médio Prazo (MP)

Com os dados de entrada no padrão SPT, o usuário deve adicionar dois arquivos extras no diretório DadosEntrada:

  • HIDRELETRICA_AFLUENCIA_AttMatrizPremissa_PorCenarioPorPeriodo
  • HIDRELETRICA_AFLUENCIA_AttVetorPremissa_PorPeriodo

Esses arquivos são criados ao se converter um deck do Newave ou do Decomp. Ao se converter um deck do NW, os arquivos estarão no diretório DadosEntrada\Otimizacao\AtributosPremissasNEWAVE juntamente com os outros arquivos Premissa. No caso do DC, esses dados estarão no diretório DadosSaida\Otimizacao\AcoplamentoPosEstudo. Entretanto, as mesmas usinas devem ser instanciadas no MP e no CP, através da Pré-configuração Além disso, dados adicionais de vazão devem ter sido utilizados no momento da conversão do deck oficial através do diretório de DadosAdicionais.

Neste exemplo simples, deseja-se criar uma árvore de cenários com 5 períodos e 5 aberturas por período, sendo cada período do processo estocástico idêntico ao período de otimização do estágio. Dessa estrutura, serão sorteados 100 cenários a serem percorridos pelo algoritmo ao longo de 5 iterações (nesse caso, 20 cenários forward por iteração). Além disso, a vazão afluente do processo estocástico será gerada por bacia hidrográfica (Variável Aleatória) e decomposta em afluência incremental (Variável Aleatória Interna) para cada hidrelétrica do sistema. O deck utilizado será o NW052022. Para parametrizar esta árvore, o usuário deve:

  • No arquivo DADOS_AttComumOperacional:
    • Alterar o estagio_final para 5
    • Alterar o numero_cenarios para 100
    • Alterar os atributos relacionados às sementes dos sorteios (opcional)
    • Definir o atributo tipo_processo_estocastico_hidrologico como hidrologico_bacia. Como pode-se observar nos arquivos HIDRELETRICA_AttComumOperacional (atributo bacia) e BACIA_HIDROGRAFICA_AttComumOperacional são definidas (por padrão) 22 bacias hidrográficas;
    • Caso se deseje gerar um processo estocástico não autoregressivo (ou seja, sem autocorrelação temporal) o valor 0 deve ser atribuído ao atributo ordem_maxima_auto_correlacao_geracao_cenario_hidrologico.
  • No arquivo DADOS_AttVetorOperacional_PorIdEstagio:
    • Alterar o atributo numero_aberturas para 5 em cada um dos estágios. O número de aberturas irá definir o tamanho da amostra do espaço amostral para aquele período. Por padrão, o modelo SPTcpp gera diferentes amostras por período. Caso o usuário prefira manter a mesma amostra para cada período, basta editar o arquivo de resíduos do processo estocástico.

n_aberturas

Por último o usuário deve executar o modelo SPTcpp no modo execução. Ao se executar o modelo, ele irá gerar a árvore de cenários e iniciar a otimização do problema. Os arquivos deste processo estocástico gerado estarão no diretório DadosEntrada\Otimizacao\AtributosOperacionaisSPT\ProcessoEstocasticoHidrologico.

processo_estocastico

Devido à quantidade de informação associada aos cenários hidrológicos de estudos plurianuais, os arquivos a serem lidos pelo programa (exibidos na figura acima) fornecem apenas as informações fundamentais para a construção dos cenários hidrológicos. Entretanto, existem algumas maneiras do usuário informar ao programa que compute e exiba a informação completa dos cenários hidrológicos. Para isso no arquivo DADOS_AttComumOperacional:

  • Ao gerar um novo processo estocástico:
    • Definir/adicionar o atributo imprimir_geracao_cenario_hidrologico como 1. Desse modo, todas as informações (além das fundamentais) sobre a geração dos cenários do processo estocástico será exibida em DadosEntrada\Otimizacao\AtributosPremissasSPT\ProcessoEstocasticoHidrologico.
  • Execução com processo estocástico já estabelecido:
    • Definir/adicionar o atributo imprimir_exportacao_pos_estudo como 1. Nesse caso, todos os cenários hidrológicos (cuidado, arquivos gigantes!) serão impressos no diretório definido em diretorio_importacao_pos_estudo no formato de arquivo de tendência hidrológica HIDRELETRICA_AFLUENCIA_AttMatrizPremissa_PorCenarioPorPeriodo.
    • Definir/adicionar o atributo imprimir_cenario_hidrologico_pre_otimizacao como 1. Com isso o programa irá imprimir, iterativamente, os cenários visitados pelo algoritmo.

Para utilizar este mesmo processo estocástico em um outro problema, basta inserir o diretório ProcessoEstocasticoHidrologico dentro do diretório DadosEntrada do problema de interesse. Entretanto, os parâmetros de solução do problema, como o atributo numero_cenarios, devem ser compatíveis com o número de cenários da árvore de cenários, caso contrário o modelo irá gerar (instanciar) um novo processo estocástico.


Acoplamento entre as Etapas de Planejamento

O SPTcpp possibilita dois tipos de acoplamento entre diferentes etapas de planejamento: estático e dinâmico. O primeiro deles segue o procedimento que atualmente é feito no setor: roda um problema de horizonte maior e acopla os cortes gerados com um problema de horizonte menor. O acoplamento dinâmico atualiza as funções de custo futuro e estados de maneira iterativa entre as diferentes etapas.

A seguir é demonstrado como realizar o acoplamento estático entre as etapas de médio (horizonte do Newave) e curto prazo (horizonte do Decomp), sendo análogo para acoplamentos de outras etapas. Supondo decks de MP e CP com início em janeiro:

  1. É necessário ter o acoplamento temporal entre as informações, portanto, os cortes do MP referentes ao período seguinte ao último período de otimização do CP devem ser utilizados, neste caso os cortes do mês de março;
  2. O nome dos arquivos de corte deve ser alterado, suprimindo o prefixo "IdEstagio_X_". A imagem abaixo mostra como fica o diretório de cortes:

image

  1. Em posse dos arquivos ajustados, inserir o endereço do diretório no atributo diretorio_importacao_pos_estudo do arquivo DADOS_AttComumOperacional.

Simulação de um Estudo

Após realizar a otimização de um estudo, as políticas operativas (cortes) obtidas estarão no diretório DadosSaida\Otimizacao\IdIteracaoX\Backward (Onde X é a última iteração). Se a realização da variável aleatória (afluência) for por bacia, na última iteração o modelo irá fornecer políticas por bacia e também discretizadas por usina hidrelétrica. Desta forma, ao se realizar simulações com esta política operativa obtida, o usuário pode gerar afluências tanto por bacia quanto por UHE.

Em posse do diretório de cortes o usuário pode realizar diversas simulações em diferentes cenários de afluência. Neste exemplo, deseja-se simular as políticas operativas obtidas em 2000 cenários de afluência out-of-sample. Estes cenários serão sorteados de uma árvore com 2000 aberturas por estágio. Para isso, os seguintes passos devem ser seguidos:

DADOS_AttComumOperacional

  • Alterar o tipo_estudo para simulacao;
  • Colocar o diretório com os cortes no atributo diretorio_importacao_cortes;
  • Alterar o numero_cenarios para 2000;
  • Definir o atributo tipo_processo_estocastico_hidrologico como desejado;
  • Deve-se alterar as sementes de criação da árvore de cenários através dos atributos semente_espaco_amostral_geracao_cenario_hidrologico e semente_geracao_cenario_hidrologico.

DADOS_AttVetorOperacional_PorIdEstagio

  • Alterar o atributo numero_aberturas para 2000 em cada período.

Ao se executar o modelo, uma nova árvore de cenários será criada e a simulação será realizada em sequencia. Os arquivos resultantes da simulação estarão no diretório DadosSaida\Simulacao\IdIteracao0\Forward\Resultados\geral. Os diretórios presentes neste endereço são mostrados a seguir:

arquivos_simu

Cada diretório possui um arquivo do tipo '.csv'. Estes arquivos são facilmente lidos e podem ser plotados com pouco esforço. A seguir é mostrado o arquivo varPHDISP_4_primal, ao qual mostra o despacho das hidrelétricas por patamar de carga e por período. No detalhe, o despacho da UHE de id 1 em 2 cenários gerados na simulação.

dado_saida_phdisp


Impressão de Subproblemas de Programação Matemática

O SPTcpp foi concebido de maneira a ser completamente "auditável" em relação à formulação e resultados dos subproblemas de programação matemática. Inclusive, nesse contexto, pode-se dizer que há certo comprometimento de performance computacional do programa em detrimento à transparência dada ao processo de resolução. Isso porque os problemas de otimização são formulados de maneira extensa, com dois objetivos:

  • A visualização direta dos valores dos atributos operacionais na formulação do problema (sem pré-processamento de informações após a leitura dos arquivos);
  • A impressão com resultados oriundos diretamente dos resolvedores do problema (sem pós-processamento de informações após a obtenção dos resultados dos resolvedores). Conforme ilustrado na figura anterior, perceba que o nome dos diretórios e arquivos das variáveis é idêntico ao nome utilizado na formulação do problema.

Exemplo Médio prazo

Em uma execução de validação de resultados:

  • Para imprimir a formulação geral dos resolvedores de programação matemática durante a execução do programa, no arquivo DADOS_AttComumOperacional.csv o atributo imprimir_solver deve receber sim.
  • Para imprimir os resultados dos resolvedores de programação matemática durante a execução do programa, no arquivo DADOS_AttComumOperacional.csv o atributo imprimir_resultado_por_estagio_por_cenario deve receber sim para impressão dos resultados da etapa forward e o atributo imprimir_resultado_por_estagio_por_cenario_por_realizacao deve receber sim para impressão dos resultados da etapa backward.

Dependendo do número de cenários, aberturas e estágios do problema, a impressão da formulação e de todos os resultados dos resolvedores de programação matemática pode consumir um gigantesco espaço em disco.

Outros atributos também podem ser ativados para um maior detalhamento da resolução do problema, como: imprimir_estado_por_iteracao, imprimir_corte_por_iteracao e imprimir_selecao_corte_por_iteracao (no caso da utilização de seleção de cortes).