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:

from datetime import timedelta

tempo["tempo"] = pd.to_timedelta(tempo["tempo"], unit="s") / timedelta(hours=1)
tempo["label"] = [str(timedelta(hours=d)) for d in tempo["tempo"].tolist()]
fig = px.bar(
    tempo,
    x="etapa",
    y="tempo",
    text="label",
    barmode="group",
)
fig


Total running time of the script: (0 minutes 1.258 seconds)

Gallery generated by Sphinx-Gallery