WaterStrategy
Español
Español
  • WaterStrategy Documentación
  • Soporte
  • Cómo empezar
    • Creación de una cuenta
    • Iniciar sesión
    • Recorrido por la interfaz
    • Creación de un nuevo proyecto y red
    • Compartir proyectos y redes
    • Exportación e importación de modelos
    • Cómo tratar los errores del modelo
    • Carga de datos externos
  • Conceptos básicos de modelado
    • ¿Modelado de sistemas de recursos hídricos?
    • ¿Qué es Pywr?
    • Conceptos de Pywr
    • Tipos de nodos
      • Entrada de agua
        • Nodo de entrada
        • Nodo de captación
        • Nodo de entrada proporcional
      • Transporte acuático
        • Link Node
        • Nodo fluvial
        • Nodo de retardo
        • RiverSplit Node
        • RiverSplitWithGauge Node
        • Nodo RiverGauge
        • BreakLink Node
        • PiecewiseLink Node
        • MultiSplitLink Node
      • Almacenamiento de agua
        • Storage Node
        • Nodo de embalse
        • VirtualStorage Node
        • Nodo de almacenamiento virtual rodante
        • Nodo de almacenamiento virtual anual
        • Nodo de almacenamiento virtual estacional
        • Nodo de almacenamiento agregado
      • Salida de agua
        • Nodo de salida
        • Pérdida Link Node
      • Energía hidroeléctrica
        • Nodo de turbina
      • Otros
        • Nodo agregado
    • Sanciones de asignación
    • Escenarios
      • WaterStrategy Escenarios
      • Escenarios Pywr
        • Integración de parámetros y pywr-scenario
    • Parámetros
      • Clase de parámetro base
        • Parámetro
        • Parámetro de índice
      • Parámetros simples
        • Constante
        • Parámetro de escenario constante
        • Parámetro de índice de escenario constante
      • Combinación de varios parámetros
        • Parámetro agregado
        • Parámetro de índice agregado
        • Parámetro de división
        • Parámetro negativo
        • Parámetro máximo
        • Parámetro máximo negativo
        • Parámetro mínimo
        • Parámetro mínimo negativo
        • Parámetro de compensación
      • Series temporales y perfiles
        • Perfil diario
        • Perfil semanal
        • Perfil mensual
        • Perfil de reducción uniforme
        • Perfil diario de Scenario
        • Perfil semanal de Scenario
        • Perfil mensual del escenario
        • Factores mensuales del escenario indexado de matrices
        • Perfil RBF
      • Parámetro DataFrame
      • Parámetro HDF5
      • Parámetros basados en matrices
        • Parámetro indexado de matriz
        • Parámetro de escenario indexado de matriz
        • Parámetro de matriz indexada
      • Parámetros de umbral
        • Umbral abstracto
        • Umbral de almacenamiento
        • Umbral de nodo
        • Umbral de parámetros
        • Umbral de grabación
        • Umbral del año actual
        • Umbral de días ordinales actuales
      • Parámetros de interpolación
        • Parámetro interpolado
        • Cuadratura interpolada
        • Flujo interpolado
        • Volumen interpolado
      • Parámetros de la curva de control
        • Curva de control base
        • Parámetro interpolado de la curva de control
        • Parámetro interpolado por partes de la curva de control
        • Parámetro de índice de curva de control
      • Parámetros de energía hidroeléctrica
      • Otros
        • Parámetro de serie armónica anual
        • Parámetro de déficit
        • Parámetro de contenedor de escenarios
        • Parámetro integral por partes
        • Parámetro de flujo
        • Parámetro de retardo de flujo
        • Parámetro de factor de descuento
    • Grabadoras
      • Grabadora básica
        • Grabadora
        • Grabador de nodos
        • Grabador de almacenamiento
        • Registrador de parámetros
        • Registrador de parámetros de índice
        • Agregador
      • Grabadoras Numpy Array
        • Grabador de nodos Numpy Array
        • Grabador de almacenamiento Numpy Array
        • Registrador de niveles Numpy Array
        • Grabador de área Numpy Array
        • Registrador de parámetros Numpy Array
        • Registrador de parámetros de índice Numpy Array
        • Registrador de parámetros de perfil diario Numpy Array
      • Registradores de curvas de duración de flujo
        • Registrador de curvas de duración de flujo
        • Registrador de curvas de duración de almacenamiento
        • Registrador de desviación de la curva de duración del flujo
        • Registrador de curvas de duración de flujo estacional
      • Registradores de déficit
        • Registrador de déficit de nodos Numpy Array
        • Registrador de ratios suministrado por Numpy Array Node
        • Registrador de ratios de reducción de nodos Numpy Array
        • Registrador de nodos con déficit total
        • Registrador de nodos de frecuencia deficitaria
      • Registradores estadísticos
        • Grabador agregado
        • Registrador de nodos Mean Flow
        • Grabador de nodos de flujo total
        • Registrador de flujo total anual
        • Registrador de parámetros medios
        • Registrador de parámetros totales
        • Registrador de nodos Rolling Mean Flow
        • Grabador de almacenamiento de volumen mínimo
        • Grabador de volumen mínimo de almacenamiento
        • Registrador de parámetros de índice de recuento de pasos de tiempo
        • Registrador de umbrales del índice de recuento anual
        • Registrador de parámetros Rolling Window
      • Registradores de índices
        • Registrador de parámetros del índice de recuento anual
      • Grabadoras de archivos
        • Grabador CSV
        • Grabador de tablas
      • Grabadoras de energía hidroeléctrica
        • Registrador de energía hidroeléctrica
        • Registrador Total Hydro Energy
  • Modelado aplicado
    • Nodos de depósito y almacenamiento
  • Tutoriales
    • Creación y ejecución de un modelo sencillo
      • Creación y ejecución de un modelo
        • Configuración de un proyecto y una red
        • Añadir nodos y enlaces (bordes)
        • Agregar datos a los nodos
        • Establecer el horizonte temporal
        • Ejecución del modelo y visualización de sus resultados
        • Creación de un nuevo escenario
        • Ejercicio
      • Realizar cambios en un modelo
        • Añadir un depósito
        • Agregar reglas operativas básicas
    • Modelización de sistemas de embalses de
      • Creación de un nuevo proyecto y red
      • Agregar una presa (embalse)
      • Agregar una demanda
      • Agregar un tratamiento de agua funciona con pérdidas
      • Agregar una fuente que represente el agua subterránea
      • Ejercicios adicionales
      • Añadir batimetría de reservorios, evaporación y precipitaciones
        • Antecedentes de la evaporación y la precipitación en los embalses
        • Añadir batimetría de yacimientos (área)
        • Añadir batimetría de reservorio (nivel)
        • Agregar evaporación y lluvia mensuales
      • Uso de reglas de control y penalizaciones de asignación para equilibrar las fuentes
      • Curvas de control y ahorro en la demanda
        • Añadir curvas de control de yacimientos y ahorrar en la demanda (reducciones)
    • Uso de penalizaciones de asignación para asignar agua
    • Escenarios de PyWR que leen un DataFrame externo y agregan reglas personalizadas
      • Carga de archivos
      • Lectura de CSV DataFrame
      • Ejecución de pywr-scenarios
      • Lectura de h5 DataFrame para escenarios de pywr
      • Crear regla personalizada - TranscientDecisionParameter
Powered by GitBook
On this page
  • Registrar regla personalizada: TranscientDecisionParameter
  • Uso del parámetro TranscientDecisionParameter
  • Resultados

Was this helpful?

Export as PDF
  1. Tutoriales
  2. Escenarios de PyWR que leen un DataFrame externo y agregan reglas personalizadas

Crear regla personalizada - TranscientDecisionParameter

PreviousLectura de h5 DataFrame para escenarios de pywr

Last updated 7 months ago

Was this helpful?

Registrar regla personalizada: TranscientDecisionParameter

Pegue el siguiente código y luego haga clic en el botón Guardar

clase TransientDecisionParameter (Parámetro):
    «"» Devuelve uno de los dos valores en función del intervalo de tiempo actual

    Este `parámetro` se puede usar para modelar un evento de decisión discreto
     eso ocurre en una fecha determinada. Antes de esta fecha, el «antes»
     se devuelve el valor y, después de esta fecha, se devuelve el valor `posterior`.

    Parámetros
    ----------
    decision_date: cadena o pandas.Timestamp
        La fecha de activación de la decisión.
    before_parameter: Parámetro
        El valor que se utilizará antes de la fecha de la decisión.
    after_parameter: Parámetro
        El valor que se utilizará después de la fecha de la decisión.
    earliest_date: string o pandas.Timestamp o None
        Fecha más temprana en la que se puede establecer la variable. El valor predeterminado es `model.timestepper.start`
    latest_date: string o pandas.Timestamp o None
        Última fecha en la que se puede establecer la variable. El valor predeterminado es `model.timestepper.end`
    decision_freq: cadena de frecuencia de pandas ('AS' predeterminado)
        La resolución de fechas factibles. Por ejemplo, «AS» crearía fechas factibles cada
        año entre el «más temprano»_fecha` y `última_fecha`. Se utilizan las funciones `pandas`
        internamente para los cálculos de fechas delta.

    «»

    def __iniciarlo__(yo, modelo, decisión)_fecha, antes_parámetro, después_parámetro, el más antiguo_fecha=ninguna, más reciente_fecha=ninguna, decisión_freq=' as ', **kwargs):
        super (TransientDecisionParameter, self).__iniciarlo__(modelo, **kwargs)
        uno mismo._decisión_fecha = Ninguna
        autodecisión_fecha = decisión_cita

        si no es instance (before_parameter, Parameter):
            raise ValueError ('El valor `antes` debe ser una instancia de parámetro. ')
        before_parameter.parents.add (uno mismo)
        uno mismo antes_parámetro = antes_parámetro

        si no es instance (after_parameter, Parameter):
            raise ValueError ('El valor `posterior` debe ser una instancia de parámetro. ')
        after_parameter.parents.add (uno mismo)
        después de uno mismo_parámetro = después_parámetro

        # Estos parámetros se utilizan principalmente si esta clase se utiliza como variable.
        uno mismo._más temprano_fecha = Ninguna
        sí mismo.más temprano_fecha = más temprana_cita

        uno mismo._último_fecha = Ninguna
        autoúltimo_fecha = última_cita

        autodecisión_freq = decisión_frecuencia
        uno mismo._factible_fechas = Ninguna
        tamaño_entero propio = 1  # Este parámetro tiene una única variable entera

    def decision_date ():
        def get (self):
            devuélvete yo._decisión_cita

        def fset (self, valor):
            si es instancia (valor, pd.Timestamp):
                uno mismo._decisión_fecha = valor
            otra cosa:
                uno mismo._decisión_date = pd.to_datetime (valor)

        devuelve locales ()

    decisión_fecha = propiedad (**fecha_decisión ()

    define earliest_date ():
        def get (self):
            si es propio._más temprano_la fecha no es Ninguna:
                devuélvete yo._más temprano_cita
            otra cosa:
                devuelve self.model.timestepper.start

        def fset (self, valor):
            si es instancia (valor, pd.Timestamp):
                uno mismo._más temprano_fecha = valor
            otra cosa:
                uno mismo._más temprano_date = pd.to_datetime (valor)

        devuelve locales ()

    más temprano_fecha = propiedad (**fecha_temprana ()

    def latest_date ():
        def get (self):
            si es propio._último_la fecha no es Ninguna:
                devuélvete yo._último_cita
            otra cosa:
                devuelve self.model.timestepper.end

        def fset (self, valor):
            si es instancia (valor, pd.Timestamp):
                uno mismo._último_fecha = valor
            otra cosa:
                uno mismo._último_date = pd.to_datetime (valor)

        devuelve locales ()

    último_fecha = propiedad (**última fecha ()

    configuración de definición (propia):
        super (TransientDecisionParameter, self) .setup ()

        # Ahora configure las fechas factibles para cuando este objeto se utilice como variable.
        uno mismo._factible_fechas = pd.date_range (self.earliest)_fecha, self.latest_date,
                                                 freq=self.decision_freq)

    valor de definición (self, ts, scenario_index):

        si ts es Ninguno:
            v = auto.antes_parámetro.get_valor (scenario_index)
        elif ts.datetime >= self.decision_date:
            v = autodespués_parámetro.get_valor (scenario_index)
        otra cosa:
            v = auto.antes_parámetro.get_valor (scenario_index)
        devuelve v

    definitivamente consigue_entero_límites inferiores (self):
        devuelve np.array ([0,], dtype=np.int)

    definitivamente consigue_entero_límites superiores (uno mismo):
        devuelve np.array ([len (self)._factible_fechas) - 1,], dtype=np.int)

    conjunto def_entero_variables (propias, valores):
        # Actualice la fecha de la decisión con la fecha factible correspondiente
        autodecisión_fecha = propia._factible_dates [valores [0]]

    definitivamente consigue_entero_variables (propias):
        devuelve np.array ([self._factible_dates.get_loc (autodecisión)_fecha),], dtype=np.int)

    def dump (propio):

        datos = {
            'más temprano_fecha': auto.earliest_date.isoformat (),
            «último_fecha»: self.latest_date.isoformat (),
            «decisión_fecha»: autodecisión_date.isoformat (),
            «decisión_frecuencia': autodecisión_frecuencia
        }

        datos de devolución

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

        delante de_parámetro = carga_parámetro (model, data.pop ('before_parameter'))
        después_parámetro = carga_parámetro (model, data.pop ('after_parameter'))

        return cls (model), antes_parameter=antes_parámetro, después_parámetro = después_parámetro, **datos)

Parámetro de decisión transitoria.register ()

Ahora, al ejecutar esta red en WaterStrategy, se registrará un TranscientDecisionParameter.

Asegúrese de que, después de guardar la regla personalizada, aparezca en el lado izquierdo, en este caso en Parámetro sección

Uso del parámetro TranscientDecisionParameter

En este caso, duplicaremos el volumen máximo de Nuevo embalse storage node empezando en 2045-01-01

Ir a Nuevo embalse storage node y Editar Volumen máximo

Seleccione en Opciones lengüeta PYR_PARÁMETRO

Pegue el siguiente código y haga clic Guardar

{
  	«tipo»: «Parámetro de decisión transitorio»,
	«después_parámetro»:»__Nuevo depósito__:máximo_volumen después de»,
	«antes_parámetro»:»__Nuevo depósito__:máximo_volumen anterior»,
	«fecha_decisión»: «2045-01-01»,
	«última fecha»: «2045-01-01»
}

TranscientDecisionParameter incluye atributos before_parámetro y después_parámetro que tendremos que crear de la siguiente manera:

Se abrirá un pequeño cuadro de texto, cuando podamos escribir el nombre de nuestro nuevo POR_PARÁMETRO, en este caso __Nuevo depósito__:máximo_volumen anterior. Haga clic Entrar. \

WaterStrategy abrirá la ventana de parámetros, pegará el siguiente código y Guardar

**__Nuevo depósito__:máximo_volumen antes: **

{
	«tipo»: «Parámetro constante»,
	«valor»: 120000
}

Repita el procedimiento para crear el volumen máximo después del parámetro

**__Nuevo depósito__:máximo_volumen después de: **

{
	«tipo»: «Parámetro constante»,
	«valor»: 240000
}

Como último paso, TranscientDecisionParameter necesita Proporción de volumen inicial para storage node como parámetro, herede los valores iniciales del nodo, en este caso configuraremos para 0.99

Resultados

Como podemos ver en la siguiente imagen, estamos combinando escenarios de pywr-utilizando el cambio climático y aumentando el volumen de nuestro depósito seleccionado de 120.000 Ml a 240.000 Ml el 1 de enero 2045.

volumen simulado (depósito nuevo)