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 NEWAVE é 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 newave.tim
. Para a síntese da convergência,
o pmo.dat
. Neste contexto, basta fazer:
$ sintetizador-newave execucao
O sintetizador irá exibir o log da sua execução:
>>> 2024-04-22 10:33:42,304 INFO: # Realizando síntese da EXECUÇÃO #
>>> 2024-04-22 10:33:42,306 INFO: Realizando síntese de PROGRAMA
>>> 2024-04-22 10:33:42,315 INFO: Tempo para sintese de PROGRAMA: 0.01 s
>>> 2024-04-22 10:33:42,315 INFO: Realizando síntese de CONVERGENCIA
>>> 2024-04-22 10:33:42,941 INFO: Tempo para sintese de CONVERGENCIA: 0.63 s
>>> 2024-04-22 10:33:42,942 INFO: Realizando síntese de TEMPO
>>> 2024-04-22 10:33:42,946 INFO: Tempo para sintese de TEMPO: 0.00 s
>>> 2024-04-22 10:33:42,946 INFO: Realizando síntese de CUSTOS
>>> 2024-04-22 10:33:42,948 INFO: Tempo para sintese de CUSTOS: 0.00 s
>>> 2024-04-22 10:33:42,951 INFO: Tempo para sintese da execucao: 0.65 s
>>> 2024-04-22 10:33:42,951 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
convergencia = pd.read_parquet("sintese/CONVERGENCIA.parquet")
custos = pd.read_parquet("sintese/CUSTOS.parquet")
tempo = pd.read_parquet("sintese/TEMPO.parquet")
O formato dos dados de CONVERGÊNCIA:
print(convergencia.head(10))
iteracao zinf delta_zinf zsup tempo
0 1 38352.81 NaN 45186.18 8
1 2 39662.03 3.414 41338.57 5
2 3 39665.26 0.008 39660.48 6
3 4 40458.95 2.001 35665.87 6
4 5 40510.69 0.128 35470.21 6
5 6 40619.30 0.268 39362.90 6
6 7 40620.26 0.002 38210.32 8
7 8 40621.08 0.002 46657.10 9
8 9 40789.08 0.414 52822.94 7
9 10 40805.40 0.040 40996.30 10
O formato dos dados de CUSTOS:
print(custos.head(10))
parcela valor_esperado desvio_padrao
0 GERACAO TERMICA 21045.13 0.00
1 DEFICIT 0.00 0.00
2 VERTIMENTO 0.00 0.00
3 EXCESSO ENERGIA 0.00 0.00
4 VIOLACAO CAR 0.00 0.00
5 VIOLACAO SAR 0.00 0.00
6 VIOL. OUTROS USOS 0.00 0.00
7 VIOLACAO EVMIN 0.00 0.00
8 VIOLACAO VZMIN 2976.33 611.93
9 INTERCAMBIO 0.97 0.04
O formato dos dados de TEMPO:
print(tempo.head(5))
etapa tempo
0 Leitura de Dados 0.0
1 Calculos Iniciais 905.0
2 Calculo da Politica 6131.0
3 Simulacao Final 901.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 Zinf.
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 1.258 seconds)