Nota
Go to the end to download the full example code.
Síntese da Política
Para realizar a síntese da política de um caso do DECOMP é necessário estar em um diretório
no qual estão os principais arquivos de saída do modelo. Por exemplo, para se realizar a
síntese dos coeficientes dos cortes construídos, são necessarios os arquivos
dec_fcf_cortes_NNN.rvX
. Neste contexto, basta fazer:
$ sintetizador-decomp politica
O sintetizador irá exibir o log da sua execução:
>>> 2025-04-07 21:11:56,394 INFO: # Realizando síntese da POLITICA #
>>> 2025-04-07 21:11:56,395 INFO: Realizando síntese de CORTES_COEFICIENTES
>>> 2025-04-07 21:11:56,396 INFO: Lendo arquivo dec_eco_discr.csv
>>> 2025-04-07 21:11:56,410 INFO: Lendo arquivo dadger.rv0
>>> 2025-04-07 21:11:56,734 INFO: Lendo arquivo dec_fcf_cortes_001.rv0
>>> 2025-04-07 21:11:56,803 INFO: Lendo arquivo dec_fcf_cortes_002.rv0
>>> 2025-04-07 21:11:56,872 INFO: Lendo arquivo dec_fcf_cortes_003.rv0
>>> 2025-04-07 21:11:56,942 INFO: Lendo arquivo dec_fcf_cortes_004.rv0
>>> 2025-04-07 21:11:57,011 INFO: Lendo arquivo dec_fcf_cortes_005.rv0
>>> 2025-04-07 21:11:57,102 INFO: Tempo para sintese de CORTES_COEFICIENTES: 0.71 s
>>> 2025-04-07 21:11:57,102 INFO: Realizando síntese de CORTES_VARIAVEIS
>>> 2025-04-07 21:11:57,109 INFO: Tempo para sintese de CORTES_VARIAVEIS: 0.01 s
>>> 2025-04-07 21:11:57,112 INFO: Tempo para sintese da politica: 0.72 s
>>> 2025-04-07 21:11:57,112 INFO: # Fim da síntese #
Os arquivos serão salvos no subdiretório sintese
. Para realizar o processamento,
pode ser utilizado o próprio python
:
import plotly.express as px
import pandas as pd
Para a síntese da política é produzido um arquivo com as informações das sínteses que foram realizadas:
metadados = pd.read_parquet("sintese/METADADOS_POLITICA.parquet")
print(metadados)
# A leitura das sínteses realizadas pode ser feita da seguinte forma:
variaveis = pd.read_parquet("sintese/CORTES_VARIAVEIS.parquet")
coeficientes = pd.read_parquet("sintese/CORTES_COEFICIENTES.parquet")
chave ... nome_longo
0 CORTES_COEFICIENTES ... Coeficientes dos cortes de Benders
1 CORTES_VARIAVEIS ... Descrição das variáveis dos cortes de Benders
[2 rows x 3 columns]
O formato dos dados de VARIAVEIS, que contém os dados referentes aos tipos das variáveis (eixos) dos cortes construídos:
print(variaveis)
tipo_coeficiente nome_curto_coeficiente ... unidade_coeficiente unidade_estado
0 1 RHS ... 10^3 R$ 10^3 R$
1 6 VARM ... 10^3 R$/hm3 hm3
2 4 GTER ... 10^3 R$/MWh MWh
3 8 QDEF ... 10^3 R$/hm3 hm3
[4 rows x 5 columns]
O formato dos dados de COEFICIENTES:
print(coeficientes.head(10))
estagio indice_corte iteracao ... patamar valor_coeficiente valor_estado
0 1 28 1 ... 0 6.924769e+08 -5.726520e+09
1 1 28 1 ... 0 -5.776888e+02 6.046199e+02
2 1 28 1 ... 0 -5.641785e+02 0.000000e+00
3 1 28 1 ... 0 -5.518798e+02 0.000000e+00
4 1 28 1 ... 0 -5.194132e+02 1.133243e+04
5 1 28 1 ... 0 -4.276657e+02 2.130000e+03
6 1 28 1 ... 0 -3.938638e+02 0.000000e+00
7 1 28 1 ... 0 -3.417199e+02 0.000000e+00
8 1 28 1 ... 0 -3.044547e+02 0.000000e+00
9 1 28 1 ... 0 -2.904833e+02 0.000000e+00
[10 rows x 10 columns]
Cada dado pode ser visualizado de diferentes maneiras, a depender da aplicação.
# Por exemplo, é comum avaliar o comportamento dos coeficientes relativos ao volume
# armazenado de uma usina hidrelétrica (multiplicador do volume versus estado consultado)
# durante a construção da política do modelo para determinado estágio.
nome_coeficiente = "VARM"
tipo_coeficiente = variaveis.loc[
variaveis["nome_curto_coeficiente"] == nome_coeficiente, "tipo_coeficiente"
].iloc[0]
uhe = 6
estagio = 1
coeficientes_varm = coeficientes.loc[
(coeficientes["tipo_coeficiente"] == tipo_coeficiente)
& (coeficientes["indice_entidade"] == uhe)
& (coeficientes["estagio"] == 1)
]
fig = px.scatter(
coeficientes_varm, x="valor_estado", y="valor_coeficiente", color="iteracao"
)
fig
Total running time of the script: (0 minutes 0.059 seconds)