WaterStrategy
Italiano
Italiano
  • WaterStrategy Documentazione
  • Supporto
  • Guida introduttiva
    • Creazione di un account
    • Effettuare il login
    • Tour di WaterStrategy
    • Creazione di un nuovo progetto e di una nuova rete
    • Condivisione di progetti e reti
    • Esportazione e importazione di modelli
    • Gestione degli errori del modello
    • Caricamento di dati esterni
  • Nozioni di base sulla modellazione
    • Modellazione del sistema delle risorse idriche?
    • Che cos'รจ Pywr?
    • Concetti Pywr
    • Tipi di nodi
      • Ingresso di acqua
        • Nodo di input
        • Nodo di bacino
        • Nodo di input proporzionale
      • Trasporto via acqua
        • Link Node
        • Nodo fluviale
        • Nodo Delay
        • RiverSplit Node
        • RiverSplitWithGauge Node
        • Nodo RiverGauge
        • BreakLink Node
        • PiecewiseLink Node
        • MultiSplitLink Node
      • Stoccaggio dell'acqua
        • Storage Node
        • Nodo Reservoir
        • VirtualStorage Node
        • Nodo Rolling Virtual Storage
        • Nodo di storage virtuale annuale
        • Nodo di archiviazione virtuale stagionale
        • Nodo di archiviazione aggregato
      • Uscita dell'acqua
        • Nodo di uscita
        • Perdita Link Node
      • Energia idroelettrica
        • Nodo turbina
      • Altri
        • Nodo aggregato
    • Penalitร  di allocazione
    • Scenari
      • WaterStrategy Scenari
      • Scenari Pywr
        • Integrazione di parametri e pywr-scenario
    • Parametri
      • Classe di parametri base
        • Parametro
        • Parametro indice
      • Parametri semplici
        • Costante
        • Parametro di scenario costante
        • Parametro dell'indice di scenario costante
      • Combinazione di piรน parametri
        • Parametro aggregato
        • Parametro dell'indice aggregato
        • Parametro di divisione
        • Parametro negativo
        • Parametro max
        • Parametro max negativo
        • Parametro MIN
        • Parametro MIN negativo
        • Parametro offset
      • Serie temporali e profili
        • Profilo giornaliero
        • Profilo settimanale
        • Profilo mensile
        • Profilo di prelievo uniforme
        • Profilo giornaliero dello scenario
        • Profilo settimanale di Scenario
        • Profilo mensile di Scenario
        • Scenario indicizzato su array: fattori mensili
        • Profilo RBF
      • Parametro DataFrame
      • Parametro HDF5
      • Parametri basati su array
        • Parametro indicizzato dell'array
        • Parametro dello scenario indicizzato dall'array
        • Parametro dell'array indicizzato
      • Parametri di soglia
        • Soglia astratta
        • Soglia di archiviazione
        • Soglia del nodo
        • Soglia dei parametri
        • Soglia del registratore
        • Soglia per l'anno corrente
        • Soglia del giorno ordinale corrente
      • Parametri di interpolazione
        • Parametro interpolato
        • Quadratura interpolata
        • Flusso interpolato
        • Volume interpolato
      • Parametri della curva di controllo
        • Curva di controllo di base
        • Parametro interpolato della curva di controllo
        • Parametro interpolato a tratti della curva di controllo
        • Parametro dell'indice della curva di controllo
      • Parametri dell'energia idroelettrica
      • Altri
        • Parametro della serie armonica annuale
        • Parametro del deficit
        • Parametro Scenario Wrapper
        • Parametro integrale a tratti
        • Parametro di flusso
        • Parametro di ritardo del flusso
        • Parametro del fattore di sconto
    • registratori
      • Registratore base
        • registratore
        • Registratore di nodi
        • Registratore di archiviazione
        • Registratore di parametri
        • Registratore dei parametri dell'indice
        • Aggregatore
      • Registratori Numpy Array
        • Registratore di nodi Numpy Array
        • Registratore di archiviazione Numpy Array
        • Registratore a livello di array Numpy
        • Registratore di area Numpy Array
        • Registratore di parametri Numpy Array
        • Registratore di parametri dell'indice Numpy Array
        • Registratore di parametri del profilo giornaliero Numpy Array
      • Registratori della curva di durata del flusso
        • Registratore della curva di durata del flusso
        • Registratore della curva di durata di archiviazione
        • Registratore di deviazione della curva di durata del flusso
        • Registratore della curva di durata del flusso stagionale
      • Registratori di deficit
        • Registratore di deficit del nodo Array Numpy
        • Registratore di rapporti fornito da Numpy Array Node
        • Registratore del rapporto di riduzione dei nodi dell'array Numpy
        • Total Deficit Node Recorder
        • Registratore di nodi di frequenza deficitaria
      • Registratori statistici
        • Registratore aggregato
        • Registratore di nodi a flusso medio
        • Registratore Total Flow Node
        • Registratore di flusso totale annuale
        • Registratore dei parametri medi
        • Registratore di parametri totali
        • Registratore di nodi a flusso medio rotante
        • Registratore di archiviazione a volume minimo
        • Registratore di memoria con soglia minima
        • Registratore dei parametri dell'indice Timestep Count
        • Registratore della soglia dell'indice di conteggio annuale
        • Registratore di parametri Rolling Window
      • Registratori di indici
        • Registratore di parametri dell'indice di conteggio annuale
      • Registratori di file
        • Registratore CSV
        • Registratore di tabelle
      • Registratori di energia idroelettrica
        • Registratore di energia idroelettrica
        • Registratore di energia idroelettrica totale
  • Modellazione applicata
    • Serbatoio e nodi di stoccaggio
  • Tutorial
    • Creazione ed esecuzione di un modello semplice
      • Creazione ed esecuzione di un modello
        • Configurazione di un progetto e di una rete
        • Aggiungere nodi e collegamenti (bordi)
        • Aggiungere dati ai nodi
        • Impostazione dell'orizzonte temporale
        • Esecuzione del modello e visualizzazione dei relativi output
        • Creazione di un nuovo scenario
        • Esercizio
      • Apportare modifiche a un modello
        • Aggiungere un serbatoio
        • Aggiungere regole operative di base
    • Modellazione di sistemi di bacini idrici
      • Creazione di un nuovo progetto e di una nuova rete
      • Aggiungere una diga (serbatoio)
      • Aggiungere una domanda
      • L'aggiunta di un trattamento dell'acqua funziona con perdite
      • Aggiungere una fonte che rappresenti le acque sotterranee
      • Esercizi aggiuntivi
      • Aggiungere batimetria del serbatoio, evaporazione e precipitazioni
        • Cenni sull'evaporazione e le precipitazioni nei bacini idrici
        • Aggiungere la batimetria del serbatoio (Area)
        • Aggiungere la batimetria del serbatoio (Livello)
        • Aggiungendo evaporazione e precipitazioni mensili
      • Utilizzo delle penalitร  di allocazione e delle regole di controllo per bilanciare le fonti
      • Curve di controllo e risparmi sulla domanda
        • Aggiungere curve di controllo dei giacimenti e risparmiare sulla domanda (riduzioni)
    • Utilizzo delle penalitร  di allocazione per allocare l'acqua
      • Esercizio 1a Due nodi
      • Esercizio 1b Due richieste
      • Esercizio 1c Proprietร  minime del flusso
      • Esercizio 2a Sistema semplice con prelievi del serbatoio
      • Esercizio 2b Sistema semplice con overflow
    • Scenari PyWR che leggono DataFrame esterni e aggiungono regole personalizzate
      • Caricamento di file
      • Lettura di DataFrame CSV
      • Esecuzione di pywr-scenarios
      • Lettura di DataFrame h5 per scenari pywr
      • Crea regola personalizzata - TranscientDecisionParameter
Powered by GitBook
On this page
  • Registra regola personalizzata - TranscientDecisionParameter
  • Utilizzo del parametro TranscientDecision
  • Risultati

Was this helpful?

Export as PDF
  1. Tutorial
  2. Scenari PyWR che leggono DataFrame esterni e aggiungono regole personalizzate

Crea regola personalizzata - TranscientDecisionParameter

PreviousLettura di DataFrame h5 per scenari pywr

Last updated 1 month ago

Was this helpful?

Registra regola personalizzata - TranscientDecisionParameter

Incolla il codice seguente e fai clic sul pulsante Salva

classe TransientDecisionParameter (parametro):
    ยซ"ยป Restituisce uno dei due valori in base alla fase temporale corrente

    Questo `Parametro` puรฒ essere usato per modellare un evento decisionale discreto
     ciรฒ accade in una determinata data. Prima di questa data il ยซprimaยป
     viene restituito il valore e dopo questa data viene restituito il valore ยซdopoยป.

    Parametri
    ----------
    decision_date: stringa o pandas.timestamp
        La data di inizio della decisione.
    before_parameter: Parametro
        Il valore da utilizzare prima della data della decisione.
    after_parameter: Parametro
        Il valore da utilizzare dopo la data della decisione.
    earliest_date: string o pandas.Timestamp o None
        Prima data in cui รจ possibile impostare la variabile. Il valore predefinito รจ `model.timestepper.start`
    latest_date: string o pandas.Timestamp o None
        Ultima data in cui รจ possibile impostare la variabile. Il valore predefinito รจ `model.timestepper.end`
    decision_freq: stringa di frequenza panda (impostazione predefinita 'AS')
        La risoluzione delle date possibili. Ad esempio ยซASยป creerebbe date fattibili ogni
        anno compreso tra il ยซprimoยป_data` e `ultima_data`. Vengono utilizzate le funzioni `pandas`
        internamente per il calcolo della data delta.

    ยซ"ยป

    def __init__(sรฉ, modello, decisione_data, prima_parametro, dopo_parametro, il primo_data=nessuna, ultima_data=Nessuno, decisione_freq='as', **kwargs):
        super (TransientDecisionParameter, self).__init__(modello, **kwargs)
        sรฉ stesso._decisione_data = Nessuna
        decisione personale_data = decisione_data

        se non รจ istanza (before_parameter, Parameter):
            raise ValueError ('Il valore `before` dovrebbe essere un'istanza di Parameter. ')
        before_parameter.parents.add (self)
        se stesso. prima_parametro = prima_parametro

        se non รจ istanza (after_parameter, Parameter):
            raise ValueError ('Il valore `after` dovrebbe essere un'istanza di Parameter. ')
        after_parameter.parents.add (sรฉ)
        se stesso dopo_parametro = dopo_parametro

        # Questi parametri vengono utilizzati principalmente se questa classe viene utilizzata come variabile.
        sรฉ stesso._il piรน presto possibile_data = Nessuna
        sรฉ stesso. Il piรน presto_data = prima_data

        sรฉ stesso._piรน recente_data = Nessuna
        auto.piรน recente_data = piรน recente_data

        decisione personale_freq = decisione_frequenza
        sรฉ stesso._fattibile_date = Nessuna
        self.dimensione_intero = 1  # Questo parametro ha una singola variabile intera

    def data_decisione ():
        def fget (auto):
            restituire se stessi._decisione_data

        def fset (self, valore):
            if isinstance (value, pd.timestamp):
                sรฉ stesso._decisione_data = valore
            altro:
                sรฉ stesso._decisione_date = pd.to_datetime (valore)

        restituisci locali ()

    decisione_data = proprietร  (**data_decisione ())

    def data_precedente ():
        def fget (auto):
            se stesso._il piรน presto possibile_la data non รจ Nessuna:
                restituire se stessi._il piรน presto possibile_data
            altro:
                return self.model.timestepper.start

        def fset (self, valore):
            if isinstance (value, pd.timestamp):
                sรฉ stesso._il piรน presto possibile_data = valore
            altro:
                sรฉ stesso._il piรน presto possibile_date = pd.to_datetime (valore)

        restituisci locali ()

    il piรน presto possibile_data = proprietร  (**data_piรน recente ()

    def data_ultima ():
        def fget (auto):
            se stesso._piรน recente_la data non รจ Nessuna:
                restituire se stessi._piรน recente_data
            altro:
                restituisce self.model.timestepper.end

        def fset (self, valore):
            if isinstance (value, pd.timestamp):
                sรฉ stesso._piรน recente_data = valore
            altro:
                sรฉ stesso._piรน recente_date = pd.to_datetime (valore)

        restituisci locali ()

    piรน recente_data = proprietร  (**data_ultima ())

    impostazione def (self):
        super (transientDecisionParameter, self) .setup ()

        # Ora imposta le date possibili per l'utilizzo di questo oggetto come variabile.
        sรฉ stesso._fattibile_date = pd.date_intervallo (self._data, self.latest_date,
                                                 freq=self.decision_freq)

    valore def (self, ts, scenario_index):

        se ts รจ Nessuno:
            v = sรฉ stesso. prima_parametro.get_valore (scenario_index)
        elif ts.datetime >= self.decision_date:
            v = auto.dopo_parametro.get_valore (scenario_index)
        altro:
            v = sรฉ stesso. prima_parametro.get_valore (scenario_index)
        ritorno v

    def get_intero_lower_bounds (self):
        restituisce np.array ([0,], dtype=np.int)

    def get_intero_upper_bounds (auto):
        restituisce np.array ([len (self._fattibile_date) - 1,], dtype=np.int)

    impostazione def_intero_variabili (self, valori):
        # Aggiorna la data della decisione con la data possibile corrispondente
        decisione personale_data = sรฉ._feasible_dates [valori [0]]

    def get_intero_variabili (self):
        restituisce np.array ([self._fattibile_date.get_loc (decisione autonoma)_data),], dtype=np.int)

    def dump (auto):

        dati = {
            ยซprima_data': self.earliest_data.isoformat (),
            'piรน recente_data': self.latest_data.isoformat (),
            ยซdecisione_data': decisione personale_data.isoformat (),
            ยซdecisione_frequenza': decisione personale_frequenza
        }

        dati di ritorno

    @classmethod
    def load (cls, modello, dati):

        prima_parametro = carico_parametro (model, data.pop ('before_parameter'))
        dopo_parametro = carico_parametro (model, data.pop ('after_parameter'))

        return cls (model), prima_parametro=prima_parametro, dopo_parametro=dopo_parametro, **dati)

TransientDecisionParameter.register ()

Ora, quando si esegue questa rete in WaterStrategy, verrร  registrato un TranscientDecisionParameter.

Assicurati che dopo aver salvato la tua regola personalizzata, sia visualizzata sul lato sinistro, in questo caso sotto Parametro sezione

Utilizzo del parametro TranscientDecision

In questo caso, raddoppieremo il volume massimo di Nuovo serbatoio storage node a partire da 2045-01-01

Vai a Nuovo serbatoio storage node e Modifica Volume massimo

Seleziona in Opzioni linguetta PYWR_PARAMETRO

Incolla il codice seguente e fai clic Salva

{
  	ยซtypeยป: ยซTransientDecisionParameterยป,
	ยซdopo_parametroยป:ยป__Nuovo serbatoio__:massimo_volume dopoยป,
	ยซprima_parametroยป:ยป__Nuovo serbatoio__:massimo_volume precedenteยป,
	ยซdata_decisioneยป: ยซ2045-01-__-01ยป,
	ยซdata_ultimaยป: ยซ2045-01-__-01ยป
}

TranscientDecisionParameter include gli attributi before_parametro e dopo_parametro che dovremo creare come segue:

Si aprirร  una piccola casella di testo, quando potremo scrivere il nome del nostro nuovo PWR_PARAMETER, in questo caso __Nuovo serbatoio__:massimo_volume precedente. Fare clic Entra. \

WaterStrategy aprirร  la finestra dei parametri, incollerร  il seguente codice e Salva

**__Nuovo serbatoio__:massimo_volume precedente: **

{
	ยซtypeยป: ยซConstantParameterยป,
	ยซvaloreยป: 120000
}

Ripetere l'operazione per creare il volume massimo dopo il parametro

**__Nuovo serbatoio__:massimo_volume dopo: **

{
	ยซtypeยป: ยซConstantParameterยป,
	ยซvaloreยป: 240000
}

Come ultimo passaggio, TranscientDecisionParameter deve Proporzione iniziale del volume per il storage node poichรฉ il parametro eredita i valori iniziali dal nodo, in questo caso imposteremo 0.99

Risultati

Come possiamo vedere nella figura seguente, stiamo combinando scenari pywr utilizzando Climate Change e aumentando il volume del nostro serbatoio selezionato da 120.000 Ml a 240.000 Ml il 1ยฐ gennaio 2045.

volume simulato (New Reservoir)