安装

本页讲解 PREP-SHOT 的安装和作为 Python 库的使用方式。若想直接动手完成一次求解,请参阅 Quickstart (30 minutes)

第 1 步:下载

克隆代码仓库:

git clone https://github.com/PREP-NexT/PREP-SHOT.git

或下载 zip 压缩包

第 2 步:安装

建议使用单独的 conda 环境,以便隔离求解器依赖:

cd PREP-SHOT
conda create -n prep-shot python=3.11 -y
conda activate prep-shot
pip install -e .

pip install -e . 会以可编辑模式安装 PREP-SHOT,并自动安装 pyproject.toml 中声明的所有运行时依赖。默认求解器 HiGHS 以 wheel 形式自动安装;商用求解器需另行安装,并在算例的 config.json 中修改 solver 字段。

无需额外安装—— pip install -e . 已经引入了 highsbox,它将 HiGHS 以 wheel 形式提供。可用以下命令验证:

python -c "import highsbox; print('OK')"

config.json 中:

"solver_parameters": {"solver": "highs"}

可选依赖组:

pip install -e .[notebook]   # jupyterlab, matplotlib, h5netcdf
pip install -e .[dev,docs]   # pytest, sphinx

我们计划随 v2.0 稳定性承诺一同发布 PyPI 版本 (pip install prepshot)。在此之前,如需锁定特定版本,可直接从 GitHub 安装:

pip install git+https://github.com/PREP-NexT/PREP-SHOT@v1.10.0

第 3 步:运行算例

examples/ 下的每个子目录都是一个自包含的算例。任选其一,进入该目录运行;参见 Quickstart (30 minutes)three_zone 数据集的完整动手演练。

cd examples/three_zone   # or southeast_asia, thailand
python -m prepshot

仓库随附三个算例:three_zone (人工合成的 3 区域算例,被 Quickstart (30 minutes) 使用)、southeast_asia (湄公河下游,5 个国家,57 座水库)、thailand (单一区域,13 座湄公河流域水库)。

如要运行自定义算例,可复制 examples/three_zone/ 作为起始模板,然后编辑 input/*.csvconfig.json

第 4 步:作为 Python 库使用 PREP-SHOT

在执行 pip install -e . 之后,可以直接从你自己的 Python 代码中导入和驱动 PREP-SHOT。最简单的入口是 prepshot.cli.main,它与 prepshot 命令行脚本等价,会在含有 config.jsonparams.json 的目录上完整执行 "建模—求解—保存" 全过程:

from prepshot.cli import main

solved = main(root_dir="/path/to/my/scenario")
if not solved:
    raise RuntimeError("PREP-SHOT did not reach optimality")

如需更精细的控制——同一 Python 进程中运行多个算例、求解后查看模型、跳过默认 Excel 输出——可使用更底层的函数:

from prepshot.set_up import initialize_environment
from prepshot.model import create_model
from prepshot.solver import solve_model

parameters = initialize_environment({
    "filepath": "/path/to/scenario",
    "config_filename": "/path/to/scenario/config.json",
    "params_filename": "/path/to/scenario/params.json",
})

model = create_model(parameters)
solved = solve_model(model, parameters)
print("objective:", model.get_value(model.cost))

Python API 在整个 v1.x 系列保持稳定,是依赖 PREP-SHOT 的下游代码推荐使用的接口。完整的稳定性政策参见 Stability policy