Зарегистрировать настраиваемое правило — параметр TranscientDecision
Вставьте следующий код и нажмите кнопку «Сохранить»
Параметр класса TransientDecision (параметр):
«"» Возвращает одно из двух значений в зависимости от текущего временного шага
Этот «Параметр» можно использовать для моделирования дискретного события принятия решения
это происходит в определенный день. До этой даты «до»
возвращается значение, а после этой даты возвращается значение «после».
параметры
----------
decision_date: строка или панды. Timestamp
Дата начала принятия решения.
before_parameter: параметр
Значение, которое следует использовать до даты принятия решения.
after_parameter: Параметр
Значение, которое будет использоваться после даты принятия решения.
earliest_date: строка или пандас.Timestamp или нет
Самая ранняя дата, на которую можно установить переменную. По умолчанию используется значение `model.timestepper.start`
latest_date: строка или Pandas.Timestamp или нет
Последняя дата, на которую можно установить переменную. По умолчанию используется значение `model.timestepper.end`
decision_freq: частотная строка панд (по умолчанию «AS»)
Решение возможных дат. Например, «AS» будет каждый раз создавать возможные даты
год между «самым ранним»_дата` и `последнее_дата`. Используются функции `pandas`
для внутренних расчетов дельта-дат.
«"»
def __инициалировать__(«я», «модель», «решение»)_дата, до_параметр, после_параметр, самый ранний_Дата = нет, последняя_Дата = нет, решение_freq='as', **kwargs):
super (параметр временного решения, self).__инициалировать__(модель, **кварги)
себя._решение_дата = Нет
самостоятельное решение_дата = решение_дата
если нет, то экземпляр (before_parameter, параметр):
raise ValueError («Значение «до» должно быть экземпляром параметра. ')
before_parameter.parents.add (сам)
селф. раньше_параметр = до_параметр
если нет, isinstance (after_parameter, параметр):
raise ValueError ('Значение `after` должно быть экземпляром параметра. ')
after_parameter.parents.add (сам)
селф. после_параметр = после_параметр
# Эти параметры чаще всего используются, если этот класс используется в качестве переменной.
себя._самый ранний_дата = Нет
сам. Самый ранний_дата = самая ранняя_дата
себя._самый последний_дата = Нет
self.latest_дата = последняя_дата
самостоятельное решение_частота = решение_частота
себя._выполнимый_даты = Нет
self.целочисленный_размер = 1 # Этот параметр содержит одну целочисленную переменную
def decision_date ():
дегет (сам):
возвращайся сам._решение_дата
def fest («я», «значение»):
если есть экземпляр (значение, PD.Timestamp):
себя._решение_дата = значение
еще:
себя._решение_дата = pd.to_datetime (значение)
вернуть местных жителей ()
решение_дата = свойство (**дата_решения ()
def arliest_date ():
дегет (сам):
если я сам._самый ранний_дата не равна нулю:
возвращайся сам._самый ранний_дата
еще:
верните self.model.timestepper.start
def fest («я», «значение»):
если есть экземпляр (значение, PD.Timestamp):
себя._самый ранний_дата = значение
еще:
себя._самый ранний_дата = pd.to_datetime (значение)
вернуть местных жителей ()
самый ранний_дата = свойство (**самая ранняя_дата ())
def latest_date ():
дегет (сам):
если я сам._самый последний_дата не равна нулю:
возвращайся сам._самый последний_дата
еще:
верните self.model.timestepper.end
def fest («я», «значение»):
если есть экземпляр (значение, PD.Timestamp):
себя._самый последний_дата = значение
еще:
себя._самый последний_дата = pd.to_datetime (значение)
вернуть местных жителей ()
самый последний_дата = свойство (**последняя дата ())
настройка по определению (самостоятельно):
super (параметр временного решения, self) .setup ()
# Теперь задайте допустимые даты использования этого объекта в качестве переменной.
себя._выполнимый_даты = pd.date_диапазон (сам). Самый ранний_дата, self.latest_date,
freq=self.decision_freq)
значение по умолчанию (self, ts, scenario_index):
если оно равно «Нет»:
v = self.before_параметр.get_значение (индекс_сценария)
elif ts.datetime >= дата принятия самостоятельного решения:
v = self.after_параметр.get_значение (индекс_сценария)
еще:
v = self.before_параметр.get_значение (индекс_сценария)
вернуть v
def get_целое_lower_bounds (сам):
верните массив np.array ([0,], dtype=np.int)
def get_целое_upper_bounds (само):
верните np.array ([len) (self)._выполнимый_даты) - 1,], dtype=np.int)
набор def_целое_переменные (self, значения):
# Обновите дату принятия решения соответствующей возможной датой
самостоятельное решение_дата = я._осуществимые даты [значения [0]]
def get_целое_переменные (self):
верните np.array ([self)._выполнимый_dates.get_loc (самостоятельное решение)_дата),], dtype=np.int)
самосвалка (самовывоз):
данные = {
'самый ранний_«дата»: самая ранняя_формат date.iso (),
'новейший_«дата»: self.latest_формат date.iso (),
'решение_«дата»: самостоятельное решение_формат date.iso (),
'решение_частота»: самостоятельное решение_частота
}
возвращать данные
@classmethod
заданная нагрузка (класс, модель, данные):
перед_параметр = нагрузка_параметр (модель, data.pop ('before_parameter'))
после_параметр = нагрузка_параметр (модель, data.pop ('after_parameter'))
возвращаемый класс (модель), ранее_параметр = до_параметр, после_параметр = после_параметр, **данные)
Параметр временного решения.register ()
Теперь при запуске этой сети в WaterStrategy будет зарегистрирован параметр TranscientDecision.
Убедитесь, что после сохранения настраиваемого правила оно отображается слева, в данном случае в разделе Параметр раздел
Использование параметра TranscientDecision
В этом случае мы удвоим максимальный объем Новое водохранилище storage node начиная с 2045-__-01-01
Перейти к Новое водохранилище storage node и РедактироватьМаксимальная громкость
Параметр TranscientDecision включает атрибуты «до»_параметрипосле_параметр`, который нам нужно будет создать следующим образом:
Откроется небольшое текстовое поле, когда мы сможем написать имя нашего нового PWR_ПАРАМЕТР, в данном случае
__Новое водохранилище__:макс_объем до. Нажмите Введите. \
WaterStrategy откроет окно параметров, вставьте следующий код и Сохранить
В качестве последнего шага требуется параметр «TranscientDecision» Начальная объемная пропорция для storage node, поскольку параметр наследует начальные значения от узла, в этом случае мы настроим на 0.99
Результаты
Как видно на следующем рисунке, мы комбинируем сценарии pywr с использованием изменения климата и увеличиваем объем выбранного нами водохранилища с 120.000 мл до 240.____000 мл за 1 января 2045 мл.