Python 接口
HydroPilot 的公开 Python 接口提供了脚本化水文工作流最常用的运行入口。
主要公开对象
SimModel是核心运行时入口BatchRunResult用于保存一次或多次评估的结果UQPyLAdapter用于把 HydroPilot 接到 UQPyL 优化工作流中
典型用法
如果你想直接在 Python 中执行一次或多次评估,可以使用 SimModel:
python
from hydropilot import SimModel
with SimModel("config.yaml") as model:
result = model.run([72.5, 0.3, 120])
print(result.objs)这样就可以直接拿到目标值、约束、诊断项以及提取出的时间序列。
SimModel
SimModel(cfgPath) 会负责加载并校验配置,初始化运行时 session,并暴露模型评估所需的基础信息。
常见能力包括:
- 用一维向量执行单次评估
- 用二维数组执行批量评估
- 在单次评估时接收按名称组织的输入值
- 暴露上下界、变量名、目标数量、约束数量等问题定义信息
真正执行时,HydroPilot 通常会按下面的顺序工作:
- 在配置的工作目录下创建工程副本
- 将设计变量转换成物理参数
- 把参数写入模型输入文件
- 执行配置中的模型命令
- 提取输出并计算目标、约束和诊断项
BatchRunResult
BatchRunResult 是 SimModel.run() 返回的结构化结果容器。
最重要的字段有:
X:被评估的设计空间输入P:解析后的物理参数objs:目标函数值cons:约束值diags:诊断项series:提取出的时间序列
即使是单次评估,数组也仍然保持 batch 形状,只是 n_samples = 1。这样单次和批量流程在下游处理时更一致。
不运行模型时的参数写入
Python 接口也支持在不执行模型的情况下生成工程副本:
apply_design(X, out_dir):先把设计值转换为物理参数,再写入工程apply_params(P, out_dir):直接写入已经解析好的物理参数
这种方式适合先检查生成后的工程文件,或者把准备好的工程交给别的运行环境去执行。
UQPyLAdapter
UQPyLAdapter 也是公开 Python 接口的一部分,不过更偏向集成层。它会把 SimModel 包装成 UQPyL 的 Problem,这样优化算法就可以把 HydroPilot 配置当成标准优化目标来调用。
为什么使用 Python 接口
- 方便在 notebook 或脚本中集成 HydroPilot
- 便于程序化执行重复评估
- 拿到结构化结果,而不只是终端摘要
- 进一步接入 UQPyL 这类上层工作流
