Nota
Go to the end to download the full example code.
Análise de configuração dos REEs (Reservatórios Equivalentes)
O arquivo ree.dat contém as configurações dos REEs (Reservatórios Equivalentes de Energia) do sistema NEWAVE. Os REEs são agregações de usinas hidrelétricas que permitem uma representação simplificada do sistema hidroelétrico para fins de otimização.
import plotly.express as px
import plotly.io as pio
from inewave.newave import Ree
pio.templates.default = "ggplot2"
# Leitura do arquivo ree.dat
arq_ree = Ree.read("./newave/ree.dat")
Estrutura dos REEs
Cada REE agrupa usinas hidrelétricas de uma região e está associado a um submercado:
Total de REEs configurados: 12
REEs do sistema:
codigo nome ... mes_fim_individualizado ano_fim_individualizado
0 1 SUDESTE ... 6.0 2026.0
1 6 MADEIRA ... 6.0 2026.0
2 7 TPIRES ... 6.0 2026.0
3 5 ITAIPU ... 6.0 2026.0
4 10 PARANA ... 6.0 2026.0
5 12 PRNPANEMA ... 6.0 2026.0
6 2 SUL ... 6.0 2026.0
7 11 IGUACU ... 6.0 2026.0
8 3 NORDESTE ... 6.0 2026.0
9 4 NORTE ... 6.0 2026.0
10 8 BMONTE ... 6.0 2026.0
11 9 MAN-AP ... 6.0 2026.0
[12 rows x 5 columns]
Submercados representados: [np.int64(1), np.int64(2), np.int64(3), np.int64(4)]
Códigos de REE: [np.int64(1), np.int64(2), np.int64(3), np.int64(4), np.int64(5), np.int64(6), np.int64(7), np.int64(8), np.int64(9), np.int64(10), np.int64(11), np.int64(12)]
Análise da distribuição por submercado
Verificando como os REEs estão distribuídos entre os submercados:
print("Distribuição de REEs por submercado:")
# Contagem de REEs por submercado
rees_por_submercado = (
rees.groupby("submercado")
.agg({"codigo": "count", "nome": lambda x: ", ".join(x)})
.rename(columns={"codigo": "quantidade_rees", "nome": "nomes_rees"})
)
print(rees_por_submercado)
# Visualização da distribuição
fig = px.bar(
rees_por_submercado.reset_index(),
x="submercado",
y="quantidade_rees",
title="Distribuição de REEs por Submercado",
labels={
"submercado": "Submercado",
"quantidade_rees": "Quantidade de REEs",
},
)
fig
Distribuição de REEs por submercado:
quantidade_rees nomes_rees
submercado
1 6 SUDESTE, MADEIRA, TPIRES, ITAIPU, PARANA, PRNP...
2 2 SUL, IGUACU
3 1 NORDESTE
4 3 NORTE, BMONTE, MAN-AP
Análise de períodos individualizados
Verificando configurações de individualização de usinas:
print("Análise de períodos individualizados:")
# Verificar REEs com período de individualização definido
rees_individualizados = rees[
(rees["mes_fim_individualizado"].notna())
& (rees["ano_fim_individualizado"].notna())
& (rees["mes_fim_individualizado"] > 0)
& (rees["ano_fim_individualizado"] > 0)
]
if len(rees_individualizados) > 0:
print(f"REEs com individualização: {len(rees_individualizados)}")
print("\nREEs individualizados:")
print(
rees_individualizados[
[
"codigo",
"nome",
"mes_fim_individualizado",
"ano_fim_individualizado",
]
]
)
# Criando data de fim da individualização
rees_individualizados_copy = rees_individualizados.copy()
rees_individualizados_copy["data_fim"] = (
rees_individualizados_copy["ano_fim_individualizado"].astype(str)
+ "-"
+ rees_individualizados_copy["mes_fim_individualizado"]
.astype(str)
.str.zfill(2)
)
print("\nDatas de fim da individualização:")
datas_fim = rees_individualizados_copy.groupby("data_fim")["codigo"].count()
print(datas_fim)
# Verificar configuração de remoção de fictícias
remocao_ficticias = arq_ree.remocao_ficticias
if remocao_ficticias is not None:
print(f"\nRemoção de usinas fictícias: {remocao_ficticias}")
opcoes_remocao = {
0: "Não remove fictícias",
1: "Remove fictícias no período individualizado",
}
descricao = opcoes_remocao.get(remocao_ficticias, "Opção desconhecida")
print(f"Significado: {descricao}")
Análise de períodos individualizados:
REEs com individualização: 12
REEs individualizados:
codigo nome mes_fim_individualizado ano_fim_individualizado
0 1 SUDESTE 6.0 2026.0
1 6 MADEIRA 6.0 2026.0
2 7 TPIRES 6.0 2026.0
3 5 ITAIPU 6.0 2026.0
4 10 PARANA 6.0 2026.0
5 12 PRNPANEMA 6.0 2026.0
6 2 SUL 6.0 2026.0
7 11 IGUACU 6.0 2026.0
8 3 NORDESTE 6.0 2026.0
9 4 NORTE 6.0 2026.0
10 8 BMONTE 6.0 2026.0
11 9 MAN-AP 6.0 2026.0
Datas de fim da individualização:
data_fim
2026.0-6.0 12
Name: codigo, dtype: int64
Remoção de usinas fictícias: 0
Significado: Não remove fictícias
Modificação da configuração dos REEs
Exemplo de como modificar configurações para estudos específicos:
print("Exemplo de modificação de configuração:")
# Cenário: Alterando período de individualização de um REE específico
rees_modificado = rees.copy()
# Exemplo: Extendendo individualização do primeiro REE até dezembro de 2025
if len(rees_modificado) > 0:
primeiro_ree = rees_modificado.iloc[0]["codigo"]
print(f"Modificando individualização do REE {primeiro_ree}:")
print(
f"Antes: {rees_modificado.iloc[0]['mes_fim_individualizado']}/{rees_modificado.iloc[0]['ano_fim_individualizado']}"
)
# Aplicando modificação
rees_modificado.iloc[
0, rees_modificado.columns.get_loc("mes_fim_individualizado")
] = 12
rees_modificado.iloc[
0, rees_modificado.columns.get_loc("ano_fim_individualizado")
] = 2025
print(
f"Depois: {rees_modificado.iloc[0]['mes_fim_individualizado']}/{rees_modificado.iloc[0]['ano_fim_individualizado']}"
)
# Aplicando modificação ao arquivo
arq_ree.rees = rees_modificado
print("✓ Modificação aplicada ao arquivo")
Exemplo de modificação de configuração:
Modificando individualização do REE 1:
Antes: 6.0/2026.0
Depois: 12.0/2025.0
✓ Modificação aplicada ao arquivo
Total running time of the script: (0 minutes 0.053 seconds)