WaterStrategy
Português
Português
  • WaterStrategy Documentação
  • Suporte
  • Começando
    • Criando uma conta
    • Fazendo login
    • Visita à interface
    • Criando um novo projeto e rede
    • Compartilhando projetos e redes
    • Exportação e importação de modelos
    • Lidando com erros de modelo
    • Carregando dados externos
  • Noções básicas de modelagem
    • Modelagem do sistema de recursos hídricos?
    • O que é Pywr?
    • Conceitos de Pywr
    • Tipos de nós
      • Entrada de água
        • Nodo de entrada
        • Nodo de captação
        • Nodo de entrada proporcional
      • Transporte de água
        • Link Node
        • Nodo do Rio
        • Nodo de atraso
        • RiverSplit Node
        • RiverSplitWithGauge Node
        • Nodo RiverGauge
        • BreakLink Node
        • PiecewiseLink Node
        • MultiSplitLink Node
      • Armazenamento de água
        • Storage Node
        • Nodo do reservatório
        • VirtualStorage Node
        • Nó de armazenamento virtual contínuo
        • Nó de armazenamento virtual anual
        • Nó de armazenamento virtual sazonal
        • Nó de armazenamento agregado
      • Saída de água
        • Nodo de saída
        • Perda Link Node
      • Energia hidrelétrica
        • Nodo de turbina
      • Outros
        • Nodo agregado
    • Penalidades de alocação
    • Cenários
      • WaterStrategy Cenários
      • Cenários Pywr
        • Integração de parâmetros e cenários pywr
    • Parâmetros
      • Classe de parâmetro base
        • Parâmetro
        • Parâmetro do índice
      • Parâmetros simples
        • Constante
        • Parâmetro de cenário constante
        • Parâmetro de índice de cenário constante
      • Combinando vários parâmetros
        • Parâmetro agregado
        • Parâmetro de índice agregado
        • Parâmetro de divisão
        • Parâmetro negativo
        • Parâmetro máximo
        • Parâmetro máximo negativo
        • Parâmetro mínimo
        • Parâmetro mínimo negativo
        • Parâmetro de deslocamento
      • Séries temporais e perfis
        • Perfil diário
        • Perfil semanal
        • Perfil mensal
        • Perfil de rebaixamento uniforme
        • Perfil diário do cenário
        • Perfil semanal do cenário
        • Perfil mensal do cenário
        • Fatores mensais do cenário indexado de matrizes
        • Perfil RBF
      • Parâmetro DataFrame
      • Parâmetro HDF5
      • Parâmetros baseados em matrizes
        • Parâmetro indexado da matriz
        • Parâmetro de cenário indexado de matriz
        • Parâmetro de matriz indexada
      • Parâmetros de limite
        • Limite abstrato
        • Limite de armazenamento
        • Limite do nó
        • Limite de parâmetros
        • Limite do gravador
        • Limite do ano atual
        • Limite de dias ordinais atual
      • Parâmetros de interpolação
        • Parâmetro interpolado
        • Quadratura interpolada
        • Fluxo interpolado
        • Volume interpolado
      • Parâmetros da curva de controle
        • Curva de controle básico
        • Parâmetro interpolado da curva de controle
        • Parâmetro interpolado por partes da curva de controle
        • Parâmetro do índice da curva de controle
      • Parâmetros hidrelétricos
      • Outros
        • Parâmetro anual da série harmônica
        • Parâmetro de déficit
        • Parâmetro do Scenario Wrapper
        • Parâmetro integral por partes
        • Parâmetro de fluxo
        • Parâmetro de atraso de fluxo
        • Parâmetro do fator de desconto
    • Gravadores
      • Gravador básico
        • Gravador
        • Gravador de nós
        • Gravador de armazenamento
        • Gravador de parâmetros
        • Gravador de parâmetros de índice
        • Agregador
      • Gravadores de matriz Numpy
        • Gravador de nós Numpy Array
        • Gravador de armazenamento Numpy Array
        • Gravador de nível de matriz Numpy
        • Gravador de área Numpy Array
        • Gravador de parâmetros Numpy Array
        • Gravador de parâmetros de índice Numpy Array
        • Gravador de parâmetros de perfil diário Numpy Array
      • Gravadores de curva de duração de fluxo
        • Gravador de curva de duração de fluxo
        • Gravador de curva de duração de armazenamento
        • Registrador de desvio da curva de duração do fluxo
        • Registrador de curva de duração de fluxo sazonal
      • Registradores de déficit
        • Gravador de déficit de nós Numpy Array
        • Gravador de proporção fornecido pelo Numpy Array Node
        • Gravador de taxa de redução de nós Numpy Array
        • Gravador de nós de déficit total
        • Gravador de nós de frequência de déficit
      • Registradores estatísticos
        • Gravador agregado
        • Gravador de nós de fluxo médio
        • Gravador de nós de fluxo total
        • Registrador de fluxo total anual
        • Registrador de parâmetros médios
        • Gravador de parâmetros totais
        • Gravador de nós de fluxo médio contínuo
        • Gravador de armazenamento de volume mínimo
        • Gravador de armazenamento de volume mínimo
        • Registrador de parâmetros do índice de contagem de etapas de tempo
        • Registrador de limites do índice de contagem anual
        • Gravador de parâmetros de janela rolante
      • Gravadores de índice
        • Registrador de parâmetros do índice de contagem anual
      • Gravadores de arquivos
        • Gravador CSV
        • Gravador de tabelas
      • Gravadores de energia hidrelétrica
        • Gravador de energia hidrelétrica
        • Registrador de energia hidrelétrica total
  • Modelagem aplicada
    • Nodos de reservatório e armazenamento
  • Tutoriais
    • Criação e execução de um modelo simples
      • Criando e executando um modelo
        • Configurando um projeto e uma rede
        • Adicionando nós e links (bordas)
        • Adicionar dados aos nós
        • Definindo o horizonte temporal
        • Executando o modelo e visualizando suas saídas
        • Criando um novo cenário
        • Exercício
      • Fazendo alterações em um modelo
        • Adicionando um reservatório
        • Adicionando regras operacionais básicas
    • Modelagem de sistemas de reservatórios de bacias
      • Criando um novo projeto e rede
      • Adicionando uma barragem (reservatório)
      • Adicionando uma demanda
      • Adicionar um tratamento de água funciona com perdas
      • Adicionando uma fonte representando a água subterrânea
      • Exercícios adicionais
      • Adicionando batimetria, evaporação e precipitação do reservatório
        • Antecedentes sobre evaporação e precipitação em reservatórios
        • Adicionando batimetria de reservatório (Área)
        • Adicionando batimetria de reservatório (Nível)
        • Adicionando evaporação mensal e chuvas
      • Usando penalidades de alocação e regras de controle para equilibrar as fontes
      • Curvas de controle e economia de demanda
        • Adição de curvas de controle de reservatórios e economia de demanda (reduções)
    • Usando penalidades de alocação para alocar água
    • Cenários PyWR lendo DataFrame externo e adicionando regras personalizadas
      • Carregando arquivos
      • Lendo CSV DataFrame
      • Executando cenários pywr
      • Lendo o DataFrame h5 para cenários pywr
      • Criar regra personalizada - TranscientDecisionParameter
Powered by GitBook
On this page
  • Registrar regra personalizada - TranscientDecisionParameter
  • Usando o TranscientDecisionParameter
  • Resultados

Was this helpful?

Export as PDF
  1. Tutoriais
  2. Cenários PyWR lendo DataFrame externo e adicionando regras personalizadas

Criar regra personalizada - TranscientDecisionParameter

PreviousLendo o DataFrame h5 para cenários pywr

Last updated 7 months ago

Was this helpful?

Registrar regra personalizada - TranscientDecisionParameter

Cole o código a seguir e clique no botão Salvar

classe TransientDecisionParameter (Parameter):
    “"” Retorna um dos dois valores, dependendo do intervalo de tempo atual

    Este `Parâmetro` pode ser usado para modelar um evento de decisão discreto
     isso acontece em uma determinada data. Antes desta data, o `antes`
     o valor é retornado e, após essa data, o valor `depois` é retornado.

    Parâmetros
    ----------
    decision_date: string ou pandas.Timestamp
        A data de ativação da decisão.
    before_parameter: Parâmetro
        O valor a ser usado antes da data da decisão.
    after_parameter: Parâmetro
        O valor a ser usado após a data da decisão.
    earliest_date: string ou pandas.Timestamp ou None
        Data mais antiga para a qual a variável pode ser definida. O padrão é `model.timestepper.start`
    latest_date: string ou pandas.Timestamp ou None
        Data mais recente para a qual a variável pode ser definida. O padrão é `model.timestepper.end`
    decision_freq: string de frequência de pandas (padrão 'AS')
        A resolução de datas viáveis. Por exemplo, 'AS' criaria datas viáveis a cada
        ano entre `mais cedo_data` e `mais recente_encontro`. As funções `pandas` são usadas
        internamente para cálculos de data delta.

    “"”

    definitivamente __inicializá-lo__(eu, modelo, decisão)_data, antes_parâmetro, depois_parâmetro, mais antigo_Data = nenhuma, mais recente_Data = nenhuma, decisão_freq='as', **kwargs):
        super (TransientDecisionParameter, self).__inicializá-lo__(modelo, **kwargs)
        eu._decisão_data = Nenhuma
        autodecisão_data = decisão_data

        se não for isinstance (before_parameter, Parameter):
            raise ValueError ('O valor `antes' deve ser uma instância de parâmetro. ')
        before_parameter.parents.add (self)
        sel. antes_parâmetro = antes_parâmetro

        se não for isinstance (after_parameter, Parameter):
            raise ValueError ('O valor `after` deve ser uma instância de parâmetro. ')
        after_parameter.parents.add (self)
        self. depois_parâmetro = depois_parâmetro

        # Esses parâmetros são usados principalmente se essa classe for usada como variável.
        eu._mais cedo_data = Nenhuma
        self. mais antigo_data = mais antiga_data

        eu._mais recente_data = Nenhuma
        self.latest_data = mais recente_data

        autodecisão_freq = decisão_freq
        eu._viável_datas = Nenhuma
        self.integer_size = 1  # Esse parâmetro tem uma única variável inteira

    def decision_date ():
        def fget (self):
            devolva a si mesmo._decisão_data

        def fset (self, valor):
            if isinstance (valor, pd.timestamp):
                eu._decisão_data = valor
            senão:
                eu._decisão_data = pd.to_datetime (valor)

        retornar locais ()

    decisão_data = propriedade (**data_de_decisão ()

    def earliest_date ():
        def fget (self):
            se eu mesmo._mais cedo_a data não é Nenhuma:
                devolva a si mesmo._mais cedo_data
            senão:
                retornar self.model.timestepper.start

        def fset (self, valor):
            if isinstance (valor, pd.timestamp):
                eu._mais cedo_data = valor
            senão:
                eu._mais cedo_data = pd.to_datetime (valor)

        retornar locais ()

    mais cedo_data = propriedade (**data_anterior ()

    def latest_date ():
        def fget (self):
            se eu mesmo._mais recente_a data não é Nenhuma:
                devolva a si mesmo._mais recente_data
            senão:
                retornar self.model.timestepper.end

        def fset (self, valor):
            if isinstance (valor, pd.timestamp):
                eu._mais recente_data = valor
            senão:
                eu._mais recente_data = pd.to_datetime (valor)

        retornar locais ()

    mais recente_data = propriedade (**data_mais recente ()

    configuração de definição (self):
        super (TransientDecisionParameter, self) .setup ()

        # Agora, configure as datas possíveis para quando esse objeto for usado como uma variável.
        eu._viável_datas = pd.date_intervalo (self.mais antigo)_data, self.latest_date,
                                                 freq = self.decision_freq)

    valor def (self, ts, scenario_index):

        se ts for Nenhum:
            v = self.antes_parameter.get_valor (scenario_index)
        elif ts.datetime >= self.decision_date:
            v = self.after_parameter.get_valor (scenario_index)
        senão:
            v = self.antes_parameter.get_valor (scenario_index)
        retornar v

    definitivamente obter_inteira_lower_bounds (self):
        retornar np.array ([0,], dtype=np.int)

    definitivamente obter_inteira_limites superiores (self):
        retorna np.array ([len (self)._viável_datas) - 1,], dtype=np.int)

    conjunto de definição_inteira_variáveis (self, valores):
        # Atualize a data da decisão com a data viável correspondente
        autodecisão_encontro = eu mesmo._datas_viáveis [valores [0]]

    definitivamente obter_inteira_variáveis (self):
        return np.array ([self._viável_datas.get_loc (autodecisão)_data),], dtype = np.int)

    def dump (self):

        dados = {
            'mais cedo_'data': self.mais cedo_formato data.iso (),
            'mais recente_'data': self.latest_formato data.iso (),
            'decisão_'data': autodecisão_formato data.iso (),
            'decisão_'frequência': autodecisão_freq
        }

        dados de retorno

    @classmethod
    carga definida (cls, modelo, dados):

        antes_parâmetro = carga_parâmetro (modelo, data.pop ('before_parameter'))
        depois_parâmetro = carga_parâmetro (modelo, data.pop ('after_parameter'))

        return cls (modelo), antes_parâmetro = antes_parâmetro, depois_parâmetro = depois_parâmetro, **dados)

Parâmetro de decisão transitória.register ()

Agora, ao executar essa rede em WaterStrategy, um TranscientDecisionParameter será registrado.

Certifique-se de que, depois de salvar sua regra personalizada, ela seja exibida no lado esquerdo, neste caso em Parâmetro seção

Usando o TranscientDecisionParameter

Nesse caso, dobraremos o volume máximo de Novo reservatório storage node começando em 2045-01-01

Vá para Novo reservatório storage node e Editar Volume máximo

Selecione em Opções aba PYWR_PARAMETER

Cole o código a seguir e clique em Salvar

{
  	“tipo”: “TransientDecisionParameter”,
	“depois_parâmetro”:”__Novo reservatório__:máximo_volume depois de”,
	“antes_parâmetro”:”__Novo reservatório__:máximo_volume antes”,
	“data_de_decisão”: “2045-01-01”,
	“data_recente”: “2045-01-01”
}

O TranscientDecisionParameter inclui atributos antes_parametro e depois_parameter que teremos que criar da seguinte forma:

Uma pequena caixa de texto se abrirá, quando pudermos escrever o nome do nosso novo POR_PARÂMETRO, neste caso __Novo reservatório__:máximo_volume anterior. Clique Entrar. \

WaterStrategy abrirá a janela de parâmetros, colará o seguinte código e Salvar

**__Novo reservatório__:máximo_volume antes: **

{
	“tipo”: “parâmetro constante”,
	“valor”: 120000
}

Repita para criar o volume máximo após o parâmetro

**__Novo reservatório__:máximo_volume após: **

{
	“tipo”: “parâmetro constante”,
	“valor”: 240000
}

Como última etapa, TranscientDecisionParameter precisa Proporção de volume inicial para o storage node, pois o parâmetro herda os valores iniciais do nó, neste caso, configuraremos para 0.99

Resultados

Como podemos ver na figura a seguir, estamos combinando cenários pywr usando a Mudança Climática e aumentando o volume do nosso reservatório selecionado de 120.000 Ml para 240.000 Ml em 1º de janeiro 2045.

volume simulado (Novo reservatório)