SWMM与Python的那些事 (一)
暴雨雨水管理模型(Storm Water Management Model,SWMM)作为一款免费、开源、功能强大的城市排水系统模拟软件,已经成为高校、科研院所和市政设计单位的首选软件之一。
然而,常规的基于人工试错的SWMM参数定义方法效率非常低,无法解决多个参数的优化取值问题,通常需要对SWMM循环调用或二次开发。常用的开发语言包括C,C#,C++,Matlab,Python等。其中,Python语言简洁性好、易读性以及可扩展性强,非常适合作为SWMM二次开发的入门级语言,并且在此基础上还可以向机器学习领域拓展,具有较好的应用前景。
Python(3.6 or 3.7)环境下运用SWMM主要有两种方法:(1)利用现有软件包(如pyswmm)提供的数据接口进 行模型参数的自定义;(2)对inp文件进行编码和参数自定义。第一种方法简单易操作,缺点是可供调用的数据接口有限;而第二种方法能够对模型中的任一参数进行自定义,缺点是更加复杂。本次博文主要介绍第一种方法,涵盖对Similation,Nodes, Links模块的介绍:
(一)模拟模块(Simulation)
方式一:
>>> from pyswmm import Simulation
>>> sim = Simulation('./testmodel.inp')
>>> sim.execute()
该方式输出的rpt文件为统计合并后的模拟结果,以及一个out文件,如下所示。
方式二:
>>> from pyswmm import Simulation
>>> with Simulation('testmodel.inp') as sim:
... sim.step_advance(300)
... for step in sim:
... print(sim.current_time)
2015-11-01 14:05:00
2015-11-01 14:10:00
2015-11-01 14:15:00
2015-11-01 14:20:00
相比于方式一,方式二可以在模拟过程中与模型进行交互,例如在某个时间点对某个参数进行自定义,以及获取任一时刻的模拟结果等,交互性更好。此外,该方法能够生成包含各个时间点模拟结果的rpt文件,以及一个out文件。
(二)节点模块(Nodes)
节点模块的使用方法如下所示:
>>> from pyswmm import Simulation, Nodes
>>> with Simulation('./testmodel.inp') as sim:
... node_object = Nodes(sim)
... J1 = node_object["J1"]
... print(J1.invert_elevation)
... print(J1.is_junction())
... for step in sim:
... print(J1.total_inflow)
更多节点模块接口的调用方法详见如下网址:https://pyswmm.readthedocs.io/en/latest/reference/nodes.html.
(三)管线模块(Links)
管线模块的使用方法如下所示:
>>> from pyswmm import Simulation, Links
>>> with Simulation('./testmodel.inp') as sim:
... link_object = Links(sim)
... c1c2 = link_object["C1:C2"]
... print(c1c2.flow_limit)
... print(c1c2.is_conduit())
... for step in sim:
... print(c1c2.flow)
... if c1c2.flow > 10.0:
... c1c2.target_setting = 0.5
更多管线模块接口的调用方法详见如下网址:
https://pyswmm.readthedocs.io/en/latest/reference/links.html.
pyswmm能够满足工程应用中的部分需求,但是许多重要参数的调用接口并未提供,这就需要采用第二种调用方法,这将在以后的博文中继续讲解。下次博文将会结合研究案例,进一步介绍SWMM耦合优化算法的具体实施过程。
SWMM与Python的那些事 (一)相关推荐
- python多线程糗事百科案例
案例:多线程爬虫 目标:爬取糗事百科段子,待爬取页面URL:http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPATH/re 做 ...
- 正则表达式re模式(python爬虫糗事百科热点段子)
python编程快速上手(持续更新中-) python爬虫从入门到精通 文章目录 python编程快速上手(持续更新中-) python爬虫从入门到精通 非结构化数据与结构化数据提取 概述 非结构化的 ...
- 潘石屹 python 知乎_如何看待地产大佬潘石屹微博宣布学习python这件事?对我们有什么启发?...
补充:潘石屹中午又发了一条微博,解释为什么要学python,基本证实了我的猜测 说实话,看到潘石屹要学python,先是意外,甚至不敢相信,翻他微博亲眼看到这条消息,才确信.房地产大佬,人过五十,想想 ...
- 竟然有人用python做这种事 ۦُ۟۟ۖۖۖٛۥۗۙۙۗۡۥٌۚۚۗۛۥۛۚۛۡۥۖۛۛۦُُ۟۟ۖۖۖٛ۟ۗۖۚۥٌُٞۖۛۚ۟ۥٌٌۖۖ۟ۖۦٌ (Python 实现挂机自动锁屏)
# 基于windows系统 实现思路是检测鼠标坐标超过多久未移动调用系统锁屏# 加载所需模块 import pyautogui,time from ctypes import *# 用于计数 t = ...
- python爬虫糗事百科
#coding:utf-8 import urllib2 import re # 工具类 class Tools(object):remove_n = re.compile(r'\n')replace ...
- python参数传递那些事
一.前言 在python中,函数参数的定义和传递有以下几种方式: 语法 意义 def func(name) 普通参数,可以根据位置匹配,也可以根据key来匹配 def func(name=value) ...
- 如何让电脑永不息屏?Python:这事我熟,只需5行代码...
前言 最近新来的小老弟问我,按照公司规定,电脑只有十分钟就锁屏,但是他不想让电脑在空闲十分钟后锁屏. 于是我问他,是不是想挑战一下公司信息安全? 不过小老弟很机智,来了句公司信息安全大于天,他就是想让 ...
- 安装Python那点事,最详细的教程
我要学编程 小码匠:今天学什么? 老码农:安装环境. 小码匠:为什么还不让我编程啊?我看你明天回来都写代码? 老码农:那是Java的,不是Python的. 小码匠:好麻烦. 安装 小码匠:怎么安装? ...
- (python)查看糗事百科文字 点赞 作者 等级 评论
import requests import re headers = { 'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6. ...
- python爬虫案例——糗事百科数据采集
全栈工程师开发手册 (作者:栾鹏) python教程全解 python爬虫案例--糗事百科数据采集 通过python实现糗事百科页面的内容采集是相对来说比较容易的,因为糗事百科不需要登陆,不需要coo ...
最新文章
- GigaScience:ASaiM基于Galaxy微生物组分析框架
- 开源、开放网络和SDN三者区别—Vecloud微云
- 湿度传感器如何工作?
- java map初始化方式_java中Map和List初始化的两种方法
- 关于stm32F4CAN总线调试
- PMP每日三题2022年2月11日
- SAP License:外购和自产货物视同销售业务理解
- 暴雪2013年内发布linux游戏,只因win8是场灾难?
- 转:基于AOP实现Ibatis的缓存配置过期策略
- Enterprise Library Policy Injection Application Block 之二: PIAB设计和实现原理
- 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7,原因是什么
- Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm
- 【知识兔】两列Excel数据快速合并为一列,你会哪种方法?
- 在东京大学感受_东京最好的街头小吃在哪里找到
- 高斯公式_证明_高数
- Taro 3.x 开发 APP 记录 (持续记录中。。。)
- 【动手学习pytorch笔记】28.机器翻译数据集
- python分析方向的第三方库_Python 机器学习方向的第三方库是
- String类型——字符串
- 日本語トレーニング44
热门文章
- Structs详细用法(一)
- HCP数据的下载,以及头动文件和CSF文件的所在位置
- Abaqus齿轮链条传动仿真案例
- 体外诊断(IVD)行业系列四:快速崛起的独立医学实验室
- 手机号码归属地查询api [开源]
- redhat linux ssh服务,Redhat6开启ssh
- Convert excel format exception.You can try specifying the ‘excelType‘ yourself
- C#-实现的鼠标钩子
- 合成大西瓜小游戏微信小程序源码/微信游戏小程序源码
- linux装完系统需要输入密码,在安装Linux系统的过程中,一定要设置root用户的密码 (5.0分)...