WNTRSimulation的间断模拟应用

WNTR的模拟器包含了一个重要功能,可以帮助我们完成在一次模拟中中断改变条件,然后继续模拟。通过这个功能,我们试着在一个月的模拟中,尝试每天换一个用水模式。

1.WNTR文档中内容。
下面的示例运行10个小时的液压模拟,然后重新启动模拟,再运行14个小时。前10小时和后14小时的结果可以合并分析或单独分析。此外,网络操作可以在模拟之间修改。

>>> wn.options.time.duration = 10*3600
>>> sim = wntr.sim.WNTRSimulator(wn)
>>> first_10_hours_results = sim.run_sim()
>>> wn.options.time.duration = 24*3600
>>> sim = wntr.sim.WNTRSimulator(wn)
>>> last_14_hours_results = sim.run_sim()

2.独立代码测试
我们的思路大致是利用模拟中断的功能,每天中断一次,然后改变用水的模式继续模拟,保证每一天都是我们之前生成的乘子,从而实现用水数据的随机波动,满足我们算法的要求。

import wntr
import pandas as pd
import numpy as np

inp_file = 'c:/Users/wen EX/Desktop/WNTR-master/examples/networks/STUDY1.inp'
wn = wntr.network.WaterNetworkModel(inp_file)
#首先调整一下我们的设置参数,主要是pattern_timestep设置成15min,因为我们的传感器是15min的,设置压力驱动,水力计算时间和报告时间步长
wn.options.hydraulic.demand_model = 'PDD'
wn.options.time.hydraulic_timestep = 15*60
wn.options.time.pattern_timestep = 15*60
wn.options.time.report_timestep = 15*60

#调整一下初始的水量,不然有时候乘子太大会导致需水量过高出现负压
for junction_names, junction in wn.junctions():
    junction.demand_timeseries_list[0].base_value =junction.demand_timeseries_list[0].base_value*0.5

#创建一个字典,到时候键是天数,值是模拟的结果
result = {}

#传入数据,一共是365天的
data = pd.read_csv('patdata3.csv',index_col=0)

#因为要使用动态变量名,这里使用的是命名空间的方法
names = locals()
for i in range(1,366):
    #添加用水模式,命名备用
    wn.add_pattern('day'+str(i)+'pat',data.loc[i,:].to_list())
    #循环迭代所有的junction,这里的junction.demand_timeseries_list不能直接改,我们添加另一个用水模式然后把原先的模式删除了
    for junction_names, junction in wn.junctions():
        junction.add_demand(base=junction.demand_timeseries_list[0].base_value, pattern_name='day'+str(i)+'pat')
        #删除第一个 保留第二个,第二个的用水模式就是我们创建的乘子
        del junction.demand_timeseries_list[0]
    #使用wntr的模拟器,可以通过实践不同来断点模拟,我们每天都断点一次
    wn.options.time.duration = i * 24 * 3600
    sim = wntr.sim.WNTRSimulator(wn)
    names['day'+str(i)+'result']=sim.run_sim()
    #传入字典
    result[i] = names['day'+str(i)+'result']

#我们打印一下看看是不是断点 是不是从第二天开始的
demand = result[2].node['demand']
print(demand.loc[:,'3'])


输出结果:

87300     0.006749
88200     0.006025
89100     0.005985
90000     0.006127
90900     0.005165
            ...   
169200    0.007496
170100    0.007477
171000    0.007554
171900    0.007529
172800    0.007642
Name: 3, Length: 96, dtype: float64

确实需水量数据是从第二天开始,直到第三天零点的,这时候我们已经完成任务。

WNTR包的使用在中文互联网上少之又少,希望我的文章对你有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值