def __escreve_cenario(self, arquivo: IO, cenario: Cenario): """ Escreve informações sobre um cenário no relatório de saída. """ # Calcula os campos existentes com base no número de UHE e UTE campos = [13] + [19] * (5 * len(self.uhes) + len(self.utes) + 5) self.__escreve_borda_tabela(arquivo, campos) # Escreve o cabeçalho da tabela cab_tabela = " PERÍODO " for i in range(len(self.uhes)): ind_uhe = str(i + 1).ljust(2) cab_tabela += " AFL({}) ".format(ind_uhe) cab_tabela += " VF({}) ".format(ind_uhe) cab_tabela += " VT({}) ".format(ind_uhe) cab_tabela += " VV({}) ".format(ind_uhe) cab_tabela += " CMA({}) ".format(ind_uhe) for i in range(len(self.utes)): ind_ute = str(i + 1).ljust(2) cab_tabela += " GT({}) ".format(ind_ute) cab_tabela += " DEFICIT " cab_tabela += " CMO " cab_tabela += " CUSTO IMEDIATO " cab_tabela += " CUSTO FUTURO " cab_tabela += " CUSTO TOTAL " arquivo.write(cab_tabela + "\n") # Escreve as linhas com dados numéricos linhas_cenario = cenario.linhas_tabela() for linha in linhas_cenario: arquivo.write(linha) self.__escreve_borda_tabela(arquivo, campos)
def __init__(self, resultados: List[Resultado], caminho: str, LOG_LEVEL: str): self.uhes: List[UHE] = resultados[0].uhes self.utes: List[UTE] = resultados[0].utes self.resultados = resultados self.cenarios_medios = [ Cenario.cenario_medio(r.cenarios) for r in resultados ] self.caminho = caminho coloredlogs.install(logger=logger, level=LOG_LEVEL)
def visualiza_volume_final(self): """ Gera os gráficos para acompanhamento dos volumes finais. """ logger.debug("Visualizações de volume final...") # Se o diretório para os volumes finais não existe, cria caminho = self.caminho + "volume_final/" if not os.path.exists(caminho): os.makedirs(caminho) # Um gráfico de saída para cada UHE n_periodos = len(self.cenarios[0].volumes_finais[0]) n_cenarios = len(self.cenarios) cmap = plt.get_cmap('viridis') for i, uh in enumerate(self.uhes): # Configurações gerais do gráfico plt.figure(figsize=(12, 6)) plt.title("VOLUME FINAL PARA {}".format(uh.nome)) # Eixo x: plt.xlabel("Período de estudo") x = np.arange(1, n_periodos + 1, 1) plt.xticks(x) # Eixo y: plt.ylabel("Volume final (hm3)") for j, cen in enumerate(self.cenarios): plt.plot(x, cen.volumes_finais[i], color=cmap(j / n_cenarios), marker="o", linewidth=4, alpha=0.2, label="Cenário {}".format(j + 1)) # Plota o cenário médio cenario_medio = Cenario.cenario_medio(self.cenarios) plt.plot(x, cenario_medio.volumes_finais[i], color=cmap(1), marker="o", linewidth=16, alpha=0.2, label="Cenário médio") # Salva a imagem e exporta os dados caminho_saida = caminho + "{}".format(uh.nome) plt.savefig(caminho_saida + ".png") cabecalho = ["PERIODO", "VOLUME_FINAL"] dados = [x, cenario_medio.volumes_finais[i]] self.exporta_dados(caminho_saida, cabecalho, dados) plt.close()
def visualiza_fobj(self): """ Gera os gráficos para acompanhamento do Custo Total. """ logger.debug("Visualização de custos totais...") # Se o diretório para o CMO não existe, cria caminho = self.caminho + "custo_total/" if not os.path.exists(caminho): os.makedirs(caminho) # Um gráfico de saída para cada UTE n_periodos = len(self.cenarios[0].volumes_finais[0]) n_cenarios = len(self.cenarios) cmap = plt.get_cmap('viridis') # Configurações gerais do gráfico plt.figure(figsize=(12, 6)) plt.title("CUSTO TOTAL DE OPERAÇÃO") # Eixo x: plt.xlabel("Período de estudo") x = np.arange(1, n_periodos + 1, 1) plt.xticks(x) # Eixo y: plt.ylabel("Custo ($/MWmed)") for j, cen in enumerate(self.cenarios): plt.plot(x, cen.fobj, color=cmap(j / n_cenarios), marker="o", linewidth=4, alpha=0.2, label="Cenário {}".format(j + 1)) # Plota o cenário médio cenario_medio = Cenario.cenario_medio(self.cenarios) plt.plot(x, cenario_medio.fobj, color=cmap(1), marker="o", linewidth=16, alpha=0.2, label="Cenário médio") # Salva a imagem e exporta os dados caminho_saida = caminho + "fobj" plt.savefig(caminho_saida + ".png") cabecalho = ["PERIODO", "CUSTO_TOTAL"] dados = [x, cenario_medio.fobj] self.exporta_dados(caminho_saida, cabecalho, dados) plt.close()
def __escreve_cenario_medio(self, arquivo: IO): """ Escreve informações sobre os cenários médios no relatório de saída. """ logger.info("Escrevendo cenário médio...") arquivo.write("RELATÓRIO DE CENÁRIOS MÉDIOS\n\n") # Calcula os campos existentes com base no número de UHE e UTE campos = [13] + [19] * (5 * len(self.uhes) + len(self.utes) + 5) self.__escreve_borda_tabela(arquivo, campos) logger.debug("X-------------X-------------------X-------------------X") # Escreve o cabeçalho da tabela cab_tabela = " PERÍODO " for i in range(len(self.uhes)): ind_uhe = str(i + 1).ljust(2) cab_tabela += " AFL({}) ".format(ind_uhe) cab_tabela += " VF({}) ".format(ind_uhe) cab_tabela += " VT({}) ".format(ind_uhe) cab_tabela += " VV({}) ".format(ind_uhe) cab_tabela += " CMA({}) ".format(ind_uhe) for i in range(len(self.utes)): ind_ute = str(i + 1).ljust(2) cab_tabela += " GT({}) ".format(ind_ute) cab_tabela += " DEFICIT " cab_tabela += " CMO " cab_tabela += " CUSTO IMEDIATO " cab_tabela += " CUSTO FUTURO " cab_tabela += " CUSTO TOTAL " logger.debug(" PERÍODO CUSTO IMEDIATO CUSTO FUTURO ") arquivo.write(cab_tabela + "\n") # Constroi o cenário médio cenario_medio = Cenario.cenario_medio(self.cenarios) # Escreve as linhas com dados numéricos linhas_cenario = cenario_medio.linhas_tabela() for linha in linhas_cenario: arquivo.write(linha) # Faz o logging das linhas na saída padrão for i in range(len(linhas_cenario)): logger.debug(" " + str(i + 1).rjust(13) + "{:19.4f}".format(cenario_medio.ci[i]) + " " + "{:19.4f}".format(cenario_medio.alpha[i])) self.__escreve_borda_tabela(arquivo, campos) logger.debug("X-------------X-------------------X-------------------X") arquivo.write("\n")
def organiza_cenarios(self) -> List[Cenario]: """ Para cada dente do pente, monta as séries históricas de cada variável de interesse no estudo realizado. """ return [Cenario.cenario_dos_nos(d) for d in self.dentes]