# OuLiPower V1.0 ![](https://img.shields.io/badge/Python-3.12.14-blue) ![](https://img.shields.io/badge/Pytorch-2.6.0+cu124-blue) ------ ## 一、项目结构说明 ```python # 整体目录树 OuLiPowerV1.0/ 根目录 ├── requirements.txt 部署环境 Python 依赖清单。 ├── base/ 模型抽象基类目录。 │ ├── __init__.py │ └── base_model.py 定义 PyTorch 模型基类,统一设备设置等基础能力。 ├── layers/ 可复用的神经网络层。 │ └── layers.py 主要服务于 TSMixer 系列的时序网络结构。 ├── model/ 候选预测模型集合。 │ ├── CNN_LSTM.py │ ├── DLinear.py │ ├── GRU.py │ ├── Mamba.py │ ├── TCN.py │ ├── TSMixer.py │ ├── TransformerEn.py │ └── lightbgm.py ├── scripts/ 部署运行与模型加载入口。 │ ├── ModelLoading.py 通用模型工厂与推理封装 │ ├── pipeline.py 训练数据管线,读取按日 CSV,构造 PyTorch Dataset,生成/加载。 │ ├── prediction.py 预测主流程:加载模型、生成短期/中期预测、夜间功率归零、保存 CSV,并上传到远端服务器。 │ └── run.sh 批量运行脚本,依次为 JMJD01、YUWEI、ZHONGXIN 三个场站生成预测。 ├── utils/ 数据处理和通用工具。 │ ├── metrics_utils.py │ ├── processed.py │ ├── train_utils.py │ └── weather_utils.py ├── saved_model/ 已训练模型资产--目录规则:<场站ID>/<模型名>/<序列长度>/<特征版本>/ │ ├── JMJD01/ │ │ └── GRU/ │ │ ├── 288/ │ │ │ └── v24/ │ │ │ ├── best_model.pth │ │ │ ├── best_tpe_params.json │ │ │ └── scaler.pkl │ │ └── 960/ │ │ └── v24/ │ │ ├── best_model.pth │ │ ├── best_tpe_params.json │ │ └── scaler.pkl │ ├── YUWEI/ │ │ └── GRU/ │ │ ├── 288/v24/ │ │ │ ├── best_model.pth │ │ │ ├── best_tpe_params.json │ │ │ └── scaler.pkl │ │ └── 960/v24/ │ │ ├── best_model.pth │ │ ├── best_tpe_params.json │ │ └── scaler.pkl │ └── ZHONGXIN/ │ └── GRU/ │ ├── 288/v24/ │ │ ├── best_model.pth │ │ ├── best_tpe_params.json │ │ └── scaler.pkl │ └── 960/v24/ │ ├── best_model.pth │ ├── best_tpe_params.json │ └── scaler.pkl ├── archive/ 预测结果归档目录--<场站ID>//YYYY/MM/YYYYMMDDHH.csv │ ├── JMJD01/ │ │ ├── ShortTerm/ │ │ │ └── 2026/ │ │ │ ├── 2026010100.csv │ │ │ ├── 2026090100.csv │ │ │ └── 01/ │ │ │ └── 2026011000.csv │ │ └── MediumTerm/ │ │ └── 2026/ │ │ └── 01/ │ │ └── 2026011000.csv │ └── YUWEI/ ├── test/ 测试目录 ├── prediction_test.py 测试文件 ``` ------ ## 二、运行环境和代码部署 1. 把`OuLiPowerV1.0`项目复制到你想要安装的目录。如:`$HOME`(默认我放在这里,大家随意!) 2. 安装代码运行环境 ```bash # python 3.12.14 # pytorch 2.6.0+cu124 这里根据客户需求,推理时安装CPU版本也开始可以的。 conda create -n oulipower python=3.12 -y conda activate oulipower # CPU版本 #python -m pip install -r requirements_CPU.txt # GPU版本 python -m pip install -r requirements_GPU.txt ``` 3. 进入测试目录,进行测试 ```bash cd test/ python prediction_test.py \ --projs "JMJD01" \ --model_name "GRU" \ --release "v24" \ --lat 22.555907 \ --lon 113.135232 \ --short_term_seq 288 \ --medium_term_seq 960 \ --capacity 4050 \ --saved_model_root "$HOME/OuLiPowerV1.0/saved_model" \ --saved_result_root "$HOME/OuLiPowerV1.0/archive" \ --init_time 2026101612 ``` 输出“测试成功🏅” 则表示部署成功! ## 三、模型的输入和输出 ```python #模型输入: 短期:(1, 288, 9) 中期:(1, 960, 9) 9个特征按固定顺序: ssrd, tcc, lcc, mcc, hcc, 2t, 2d, 10u, 10v #模型输出: 短期:288 个 15 分钟功率点 中期:960 个 15 分钟功率点 #目前适配场站: JMJD01 江门光伏场 容量 4050 kW lat 22.555907 lon 113.135232 YUWEI 北流煜炜光伏场 容量 3000 kW lat 22.615142 lon 110.305066 ZHONGXIN 清远忠信光伏场 容量 2250 kW lat 23.542156 lon 112.996233 ``` ------ ## 四、单场站调用方式 > 代码调用路径:**scripts/prediction.py** ```python # 江门光伏场 在2026年10月26日12时 进行短期和中期预测 python $HOME/OuLiPowerV1.0/scripts/prediction.py \ --projs "JMJD01" \ 场站ID --model_name "GRU" \ 加载的模型 --release "v24" \ 加载的特征版本 --lat 22.555907 \ 场站纬度 --lon 113.135232 \ 场站经度 --short_term_seq 288 \ 短期序列长度 --medium_term_seq 960 \ 中期序列长度 --capacity 4050 \ 场站装机容量 --saved_model_root "$HOME/OuLiPowerV1.0/saved_model" \ 权重保存路径 --saved_result_root "$HOME/OuLiPowerV1.0/archive" \ 输出csv存档位置 --init_time 2026102612 预报时间(UTC) ``` 注意⚠️: > **prediction.py** 约第245至260行是读取气象变量的代码部分,这部分需要和欧力这边服务器联合起来,暂时没有实现。现在使用的是模拟数据。后期替换就行。 ![image-20261026105801289](assets/image-20261026105801289.png) > **prediction.py** 约第321至330行是上传预报数据至指定服务器的部分,可根据需求更换。 `Local_files` 是预报文件存档的路径, 对应OuLiPowerV1.0项目的 archive/ `remote_files` 是远程服务器的地址。需要构造成完整的路径 ![image-20261026110303842](assets/image-20261026110303842.png) ## 五、多场站调用方式 > 代码调研路径: **scripts/run.sh** ```bash bash run.sh 2026102612 ``` 注意⚠️: > 使用代码之前,需要提前配置好**run.sh**文件 ```bash #!/bin/bash init_time="$1" # 江门光伏场 echo "江门光伏场" python $HOME/OuLiPowerV1.0/scripts/prediction.py \ --projs "JMJD01" \ --model_name "GRU" \ --release "v24" \ --lat 22.555907 \ --lon 113.135232 \ --short_term_seq 288 \ --medium_term_seq 960 \ --capacity 4050 \ --saved_model_root "$HOME/OuLiPowerV1.0/saved_model" \ --saved_result_root "$HOME/OuLiPowerV1.0/archive" \ --init_time "$init_time" # 北流煜炜光伏场 echo "北流煜炜光伏场" python $HOME/OuLiPowerV1.0/scripts/prediction.py \ --projs "YUWEI" \ --model_name "GRU" \ --release "v24" \ --lat 22.615142 \ --lon 110.305066 \ --short_term_seq 288 \ --medium_term_seq 960 \ --capacity 3000 \ --saved_model_root "$HOME/OuLiPowerV1.0/saved_model" \ --saved_result_root "$HOME/OuLiPowerV1.0/archive" \ --init_time "$init_time" # 清远忠信光伏场 echo "清远忠信光伏场" python $HOME/OuLiPowerV1.0/scripts/prediction.py \ --projs "ZHONGXIN" \ --model_name "GRU" \ --release "v24" \ --lat 23.542156 \ --lon 112.996233 \ --short_term_seq 288 \ --medium_term_seq 960 \ --capacity 2250 \ --saved_model_root "$HOME/OuLiPowerV1.0/saved_model" \ --saved_result_root "$HOME/OuLiPowerV1.0/archive" \ --init_time "$init_time" ```