Nota
Go to the end to download the full example code.
Síntese da Execução
Para realizar a síntese da execução 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 de tempo de execução, é necessario o decomp.tim
, para a síntese da convergência,
o relato.rvX
e, para a síntese de inviabilidades, o inviab_unic.rvX
. Neste contexto,
basta fazer:
$ sintetizador-decomp execucao
O sintetizador irá exibir o log da sua execução:
>>> 2025-04-07 21:02:55,581 INFO: # Realizando síntese da EXECUÇÃO #
>>> 2025-04-07 21:02:55,581 INFO: Realizando síntese de PROGRAMA
>>> 2025-04-07 21:02:55,586 INFO: Tempo para sintese de PROGRAMA: 0.00 s
>>> 2025-04-07 21:02:55,586 INFO: Realizando síntese de VERSAO
>>> 2025-04-07 21:02:55,586 INFO: Lendo arquivo dec_oper_sist.csv
>>> 2025-04-07 21:02:55,674 INFO: Tempo para sintese de VERSAO: 0.09 s
>>> 2025-04-07 21:02:55,674 INFO: Realizando síntese de TITULO
>>> 2025-04-07 21:02:55,684 INFO: Lendo arquivo dadger.rv0
>>> 2025-04-07 21:02:56,004 INFO: Tempo para sintese de TITULO: 0.33 s
>>> 2025-04-07 21:02:56,004 INFO: Realizando síntese de CONVERGENCIA
>>> 2025-04-07 21:02:56,004 INFO: Lendo arquivo relato.rv0
>>> 2025-04-07 21:02:56,692 INFO: Tempo para sintese de CONVERGENCIA: 0.69 s
>>> 2025-04-07 21:02:56,692 INFO: Realizando síntese de TEMPO
>>> 2025-04-07 21:02:56,692 INFO: Lendo arquivo decomp.tim
>>> 2025-04-07 21:02:56,697 INFO: Tempo para sintese de TEMPO: 0.01 s
>>> 2025-04-07 21:02:56,697 INFO: Realizando síntese de INVIABILIDADES
>>> 2025-04-07 21:02:56,697 INFO: Lendo arquivo inviab_unic.rv0
>>> 2025-04-07 21:02:56,705 INFO: Lendo arquivo hidr.dat
>>> 2025-04-07 21:02:58,220 INFO: Tempo para sintese de INVIABILIDADES: 1.52 s
>>> 2025-04-07 21:02:58,221 INFO: Realizando síntese de CUSTOS
>>> 2025-04-07 21:02:58,231 INFO: Tempo para sintese de CUSTOS: 0.01 s
>>> 2025-04-07 21:02:58,236 INFO: Tempo para sintese da execucao: 2.65 s
>>> 2025-04-07 21:02:58,236 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
from datetime import timedelta
import pandas as pd
Para a síntese da execução é produzido um arquivo com as informações das sínteses que foram realizadas:
metadados = pd.read_parquet("sintese/METADADOS_EXECUCAO.parquet")
print(metadados)
# A leitura das sínteses realizadas pode ser feita da seguinte forma:
convergencia = pd.read_parquet("sintese/CONVERGENCIA.parquet")
custos = pd.read_parquet("sintese/CUSTOS.parquet")
tempo = pd.read_parquet("sintese/TEMPO.parquet")
chave nome_curto nome_longo
0 PROGRAMA PROGRAMA Modelo de Otimização
1 VERSAO VERSAO Versão do Modelo
2 TITULO TITULO Título do Estudo
3 CONVERGENCIA CONVERGENCIA Convergência do Processo Iterativo
4 TEMPO TEMPO Tempo de Execução
5 INVIABILIDADES INVIABILIDADES Violações das Restrições
6 CUSTOS CUSTOS Composição de Custos da Solução
O formato dos dados de CONVERGÊNCIA:
print(convergencia.head(10))
iteracao zinf zsup ... violacao_hm3 delta_zinf execucao
0 1 NaN 1.956588e+09 ... 0.0 NaN 0
1 2 NaN 5.658944e+08 ... 0.0 NaN 0
2 3 533343777.1 5.465525e+08 ... 0.0 NaN 0
3 4 533343777.1 5.387266e+08 ... 0.0 0.000000e+00 0
4 5 533350638.4 5.357187e+08 ... 0.0 1.286469e-05 0
5 6 533370771.4 5.340916e+08 ... 0.0 3.774815e-05 0
6 7 533370989.3 5.339817e+08 ... 0.0 4.085338e-07 0
7 8 533371336.6 5.337387e+08 ... 0.0 6.511415e-07 0
8 9 533371360.9 5.337107e+08 ... 0.0 4.555925e-08 0
9 10 533372346.2 5.335950e+08 ... 0.0 1.847306e-06 0
[10 rows x 12 columns]
O formato dos dados de CUSTOS:
print(custos)
parcela valor_esperado desvio_padrao
0 geracao_termica 459104.14 0.0
1 penalidade_intercambio 1.57 0.0
2 penalidade_vertimento_fio 14.89 0.0
3 penalidade_vertimento_reservatorio 2.79 0.0
4 violacao_desvio 0.00 0.0
5 violacao_turbinamento_fio 34.30 0.0
6 violacao_turbinamento_reservatorio 13.67 0.0
O formato dos dados de TEMPO:
print(tempo)
etapa tempo execucao
0 Leitura de Dados 12.0 0
1 Convergencia 412.0 0
2 Impressao 13.0 0
Cada arquivo pode ser visualizado de diferentes maneiras, a depender da aplicação. Por exemplo, é comum avaliar a convergência do modelo através da variação do gap.
fig = px.line(
convergencia,
x="iteracao",
y="delta_zinf",
)
fig
Quando se analisam os custos de cada fonte, geralmente são feitos gráficos de barras empilhadas ou setores:
fig = px.pie(
custos.loc[custos["valor_esperado"] > 0],
values="valor_esperado",
names="parcela",
)
fig
Uma abordagem semelhante é utilizada na análise do tempo de execução:
Total running time of the script: (0 minutes 0.902 seconds)