WaterStrategy
中国人
中国人
  • WaterStrategy 文档
  • 支持
  • 入门
    • 创建账户
    • 登录
    • 界面之旅
    • 创建新项目和网络
    • 共享项目和网络
    • 导出和导入模型
    • 处理模型错误
    • 上传外部数据
  • 建模基础知识
    • 水资源系统建模?
    • 什么是 Pywr?
    • Pywr 概念
    • 节点类型
      • 水输入
        • 输入节点
        • 集水节点
        • 比例输入节点
      • 水上运输
        • Link Node
        • 河流节点
        • 延迟节点
        • RiverSplit Node
        • RiverSplitWithGauge Node
        • 河池节点
        • BreakLink Node
        • PiecewiseLink Node
        • MultiSplitLink Node
      • 储水
        • Storage Node
        • 水库节点
        • VirtualStorage Node
        • 滚动虚拟存储节点
        • 年度虚拟存储节点
        • 季节性虚拟存储节点
        • 聚合存储节点
      • 水产量
        • 输出节点
        • 损失 Link Node
      • 水电
        • 涡轮节点
      • 其他
        • 聚合节点
    • 分配罚款
    • 场景
      • WaterStrategy 场景
      • Pywr 场景
        • 参数和 pywr 场景集成
    • 参数
      • 基本参数类
        • 参数
        • 索引参数
      • 简单参数
        • 常数
        • 常量场景参数
        • 常量场景索引参数
      • 组合多个参数
        • 聚合参数
        • 聚合索引参数
        • 分区参数
        • 负参数
        • 最大参数
        • 负的最大参数
        • 最小参数
        • 负的最小参数
        • 偏移量参数
      • 时间序列和概况
        • 每日简介
        • 每周简介
        • 每月概况
        • 统一提款概况
        • 场景每日概况
        • 场景每周简介
        • 场景月度概况
        • 数组索引情景月度因子
        • RBF 简介
      • DataFrame 参数
      • HDF5 参数
      • 基于数组的参数
        • 数组索引参数
        • 数组索引场景参数
        • 索引数组参数
      • 阈值参数
        • 抽象阈值
        • 存储阈值
        • 节点阈值
        • 参数阈值
        • 录音机阈值
        • 本年度阈值
        • 当前序数天阈值
      • 插值参数
        • 插值参数
        • 插值正交
        • 插值流
        • 插值音量
      • 控制曲线参数
        • 基本控制曲线
        • 控制曲线插值参数
        • 控制曲线分段插值参数
        • 控制曲线索引参数
      • 水力发电参数
      • 其他
        • 年度谐波系列参数
        • 赤字参数
        • 场景包装器参数
        • 分段积分参数
        • 流量参数
        • 流量延迟参数
        • 折扣系数参数
    • 录音机
      • 基础录音机
        • 录音机
        • 节点记录器
        • 存储记录器
        • 参数记录器
        • 索引参数记录器
        • 聚合器
      • Numpy 数组记录器
        • Numpy 数组节点记录器
        • Numpy 数组存储记录器
        • Numpy 数组电平记录器
        • Numpy 数组区域记录器
        • Numpy 数组参数记录器
        • Numpy 数组索引参数记录器
        • Numpy 数组每日配置文件参数记录器
      • 流量持续时间曲线记录器
        • 流量持续时间曲线记录器
        • 存储时长曲线记录器
        • 流量持续时间曲线偏差记录器
        • 季节性流量持续时间曲线记录器
      • 赤字记录器
        • Numpy 数组节点缺陷记录器
        • Numpy 数组节点提供的比率记录器
        • Numpy 数组节点缩减比率记录器
        • 总赤字节点记录器
        • 赤字频率节点记录器
      • 统计记录器
        • 聚合记录器
        • 平均流量节点记录器
        • 总流量节点记录器
        • 年度总流量记录器
        • 平均参数记录器
        • 总参数记录器
        • 滚动平均流量节点记录器
        • 最低容量存储记录器
        • 最低阈值容量存储记录器
        • 时间步长计数索引参数记录器
        • 年度计数指数阈值记录器
        • 滚动窗口参数记录器
      • 索引记录器
        • 年度计数指数参数记录器
      • 文件记录器
        • CSV 记录器
        • 表格记录器
      • 水力发电记录器
        • 水力发电记录器
        • 总水电能量记录器
  • 应用建模
    • 水库和存储节点
  • 教程
    • 创建和运行一个简单的模型
      • 创建和运行模型
        • 设置项目和网络
        • 添加节点和链接(边)
        • 向节点添加数据
        • 设定时间范围
        • 运行模型并可视化其输出
        • 创建新场景
        • 运动
      • 对模型进行更改
        • 添加水库
        • 添加基本操作规则
    • 对流域储层系统进行建模
      • 创建新项目和网络
      • 添加水坝(水库)
      • 添加需求
      • 添加有亏损的水处理工程
      • 添加代表地下水的来源
      • 其他练习
      • 添加水库测深、蒸发和降雨量
        • 水库蒸发和降水的背景
        • 添加水库测深(区域)
        • 添加水库测深(等级)
        • 添加每月蒸发量和降雨量
      • 使用分配罚款和控制规则来平衡来源
      • 控制曲线和需求节约
        • 增加油藏控制曲线和需求节约(减少)
    • 使用分配罚款来分配用水
    • PyWR 场景读取外部 DataFrame 并添加自定义规则
      • 上传文件
      • 读取 CSV 数据框
      • 运行 pywr 场景
      • 为 pywr 场景读取 h5 DataFrame
      • 创建自定义规则-TranscientDesicionParameter
Powered by GitBook
On this page
  • 注册自定义规则-TranscientDesicionParameter
  • 使用 TranscientDesicion 参数
  • 结果

Was this helpful?

Export as PDF
  1. 教程
  2. PyWR 场景读取外部 DataFrame 并添加自定义规则

创建自定义规则-TranscientDesicionParameter

Previous为 pywr 场景读取 h5 DataFrame

Last updated 6 months ago

Was this helpful?

注册自定义规则-TranscientDesicionParameter

粘贴以下代码,然后单击 “保存” 按钮

类瞬态决策参数(参数):
    “"” 根据当前的时间步返回两个值之一

    这个 “参数” 可以用来对离散决策事件进行建模
     那发生在给定的日期。在此日期之前,“之前”
     返回值,并在此日期之后返回 “之后” 值。

    参数
    ----------
    decision_date:字符串或 Pandas.Timestamp
        决定的触发日期。
    before_parameter
        在决策日期之前使用的值。
    after_parameter:参数
        决策日期之后要使用的值。
    earliest_date:字符串或 Pandas.Timestamp 或 None
        可以将变量设置为的最早日期。默认为 model.timestepper.start
    latest_date:字符串或 Pandas.Timestamp 或 None
        可以将变量设置为的最新日期。默认为 model.timestepper.end
    decision_freq:熊猫频率字符串(默认为 'AS')
        确定可行日期。例如,“AS” 每隔一段时间都会创建可行的日期
        介于 “最早” 之间的年份_日期`和`最新_日期`。使用了 `pandas` 函数
        内部用于增量日期计算。

    “”

    def __初始化__(自我、模特、决策_日期,之前_参数,之后_参数,最早_日期 = 无,最新_日期=无,决定_freq='as',**kwargs):
        super(瞬态决策参数,自我)。__初始化__(型号,**kwargs)
        自我。_决定_日期 = 无
        自我决定_日期 = 决定_约会

        如果不是 isinstance(before_parameter,参数):
            raise ValueError('之前的值应该是参数实例。')
        before_parameter.parameter.parameter.p
        自我。之前_参数 = 之前_参数

        如果不是 isinstance(after_parameter,参数):
            raise ValueError('之后值应该是参数实例。')
        after_parameter.parameter.parameter.param
        自我。之后_参数 = 之后_参数

        # 如果将该类用作变量,则主要使用这些参数。
        自我。_最早_日期 = 无
        最早的自己_日期 = 最早_约会

        自我。_最新_日期 = 无
        自我。最新_日期 = 最新_约会

        自我决定_频率 = 决定_频率
        自我。_可行_日期 = 无
        self.integer_size = 1  # 此参数只有一个整数变量

    def decision_date ():
        def fget(自我):
            回归自我。_决定_约会

        def fset(自我,价值):
            if 是实例(值,PD.Timestamp):
                自我。_决定_日期 = 值
            否则:
                自我。_决定_日期 = pd.to_datetime(值)

        返回本地人 ()

    决定_日期 = 属性 (**决策日期 ()

    def earliest_date ():
        def fget(自我):
            如果是自我。_最早_日期不是 “无”:
                回归自我。_最早_约会
            否则:
                返回 self.model.timestepper.start

        def fset(自我,价值):
            if 是实例(值,PD.Timestamp):
                自我。_最早_日期 = 值
            否则:
                自我。_最早_日期 = pd.to_datetime(值)

        返回本地人 ()

    最早_日期 = 属性 (**earliest_date ())

    def latest_date ():
        def fget(自我):
            如果是自我。_最新_日期不是 “无”:
                回归自我。_最新_约会
            否则:
                返回 self.model.timestepper.end

        def fset(自我,价值):
            if 是实例(值,PD.Timestamp):
                自我。_最新_日期 = 值
            否则:
                自我。_最新_日期 = pd.to_datetime(值)

        返回本地人 ()

    最新_日期 = 属性 (**latest_date ())

    def 设置(自我):
        super(瞬态决策参数,自我).setup ()

        # 现在设置此对象用作变量的可行日期。
        自我。_可行_日期 = pd.date_范围(self.earliest_日期,self.latest_date,
                                                 freq=self.decision_freq)

    def 值(self、ts、scenario_index):

        如果 ts 为无:
            v = self.before_参数.get_值(场景索引)
        elif ts.datetime >= self.decision_date:
            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 设置_整数_变量(自我、值):
        # 使用相应的可行日期更新决策日期
        自我决定_日期 = 自我._feasible_dates [值 [0]]

    def get_整数_变量(自我):
        返回 np.array ([self._可行_dates.get_loc (self.decision)_日期),], dtype=np.int)

    def dump(自身):

        数据 = {
            '最早_日期': self.earliess_date.isoformat (),
            '最新_日期': self.latest_date.isoformat (),
            '决定_日期': self.decision_date.isoformat (),
            '决定_频率': self.decision_频率
        }

        返回数据

    @classmethod
    def 负载(cls、模型、数据):

        以前_参数 = 加载_参数(模型,data.pop('before_parameter'))
        之后_参数 = 加载_参数(模型,data.pop('after_parameter'))

        返回 cls(模型,之前_参数=之前_参数,之后_参数=之后_参数,**数据)

瞬态决策参数 .register ()

现在,在 WaterStrategy 中运行这个网络时,将注册 TranscientDecisionParameter。

保存自定义规则后,请确保它显示在左侧,在本例中为 参数 部分

使用 TranscientDesicion 参数

在这种情况下,我们将把最大音量增加一倍 新水库 storage node 从 2045-01-01-01-01开始

前往 新水库 storage node 和 “编辑” 最大音量

在里面选择 选项 选项卡 PYWR_参数

粘贴以下代码,然后单击 保存

{
  	“类型”:“瞬态决策参数”,
	“之后_参数”:”__新水库__:max_之后的音量”,
	“之前_参数”:”__新水库__:max_之前的音量”,
	“决策日期”:“2045-01-01-__1234567890____”,
	“最新日期”:“2045-01-01-__1234567890____”
}

TranscientDesicion参数包含 “之前” 的属性_参数和之后_参数`我们必须按如下方式创建:

当我们可以写下新名字时,会打开一个小文本框 PWR_参数,在本例中为 __新水库__:max_之前的音量。 点击 输入。\

WaterStrategy 将打开参数窗口,粘贴以下代码然后 保存

__新水库__:max_之前的音量:

{
	“类型”:“常量参数”,
	“值”:120000
}

重复操作以创建参数后的最大音量

__新水库__:max_之后的音量:

{
	“类型”:“常量参数”,
	“值”:240000
}

作为最后一步,TranscientDesicion参数需要 初始体积比例 对于 storage node 作为参数继承节点的初始值,在这种情况下,我们将设置为 0.99

结果

正如我们在下图中看到的那样,我们正在使用气候变化合并pywr情景,并在1月1日将所选水库的体积从120.000增加到240.2__1234567890__________ml 2045。

模拟体积(新水库)