完成基本多场景功能。

This commit is contained in:
dmy
2025-12-27 19:15:56 +08:00
parent 2956bc80fb
commit b55f083be8
23 changed files with 3910 additions and 0 deletions

View File

@@ -0,0 +1,236 @@
# 多场景聚类分析模块说明
## 模块概述
`multi_scenario.py` 是一个专门用于多维时间序列数据聚类分析的Python模块。该模块能够同时对光伏出力、风电出力和负荷需求进行聚类分析识别不同的运行场景提取典型场景并生成详细的分析报告。
## 核心功能
### 1. 多维数据聚类
- **同时聚类**:光伏、风电、负荷三个维度同时进行聚类分析
- **特征标准化**:自动对多维数据进行标准化处理
- **智能命名**:根据聚类中心自动生成场景名称(如"场景1(高光伏+中风电+高负荷)"
### 2. 最优聚类数确定
- **肘部法则**:通过分析聚类内误差和确定最优聚类数
- **轮廓系数**:计算聚类质量,选择轮廓系数最高的聚类数
- **自动化选择**:支持自动寻找最优聚类数
### 3. 场景特征分析
- **统计信息**:计算各场景的光伏、风电、负荷的均值和标准差
- **频率统计**:分析各场景的出现频率和持续时间
- **特征对比**:生成雷达图对比不同场景的特征
### 4. 典型日提取
- **完整日识别**:自动识别各场景的完整代表日
- **典型曲线**:提取每个场景的典型日内变化曲线
- **场景标记**:记录典型日对应的年内的天数
### 5. 可视化分析
- **9宫格综合图表**:包含场景分布、频率、特征、典型日等
- **时间序列展示**展示8760小时数据的场景分布
- **统计分析表格**:生成详细的场景统计摘要
### 6. 结果导出
- **Excel报告**:导出包含时间序列、统计、典型日的完整报告
- **图表保存**:保存高质量的分析图表
- **参数记录**:记录聚类参数和分析时间
## 主要类和函数
### MultiScenarioAnalyzer 类
#### 初始化参数
```python
MultiScenarioAnalyzer(n_clusters: int = 8, random_state: int = 42)
```
- `n_clusters`: 聚类数量默认8个场景
- `random_state`: 随机种子,确保结果可重现
#### 核心方法
**fit_predict()** - 执行聚类分析
```python
result = analyzer.fit_predict(
solar_output, # 光伏出力曲线 (MW)
wind_output, # 风电出力曲线 (MW)
load_demand, # 负荷曲线 (MW)
find_optimal_k=False # 是否自动寻找最优聚类数
)
```
**plot_scenario_analysis()** - 生成分析图表
```python
analyzer.plot_scenario_analysis(
result, # 聚类结果
solar_output, # 光伏出力数据
wind_output, # 风电出力数据
load_demand, # 负荷数据
save_path=None, # 图片保存路径
show_plot=False # 是否显示图片
)
```
**export_scenario_results()** - 导出Excel报告
```python
excel_file = analyzer.export_scenario_results(
result, # 聚类结果
solar_output, # 光伏出力数据
wind_output, # 风电出力数据
load_demand, # 负荷数据
filename=None # 输出文件名
)
```
### ScenarioResult 数据类
存储聚类分析结果的容器:
```python
@dataclass
class ScenarioResult:
cluster_labels: np.ndarray # 每个时间点的场景标签
cluster_centers: np.ndarray # 各场景的聚类中心
scenario_names: List[str] # 场景名称
scenario_stats: Dict # 各场景统计信息
silhouette_score: float # 轮廓系数
n_scenarios: int # 场景数量
scenario_frequencies: np.ndarray # 各场景出现频率
typical_days: Dict # 典型日数据
```
## 使用示例
### 基础使用
```python
from src.multi_scenario import MultiScenarioAnalyzer
# 创建分析器
analyzer = MultiScenarioAnalyzer(n_clusters=6, random_state=42)
# 执行聚类分析
result = analyzer.fit_predict(solar_output, wind_output, load_demand)
# 输出结果
print(f"识别出 {result.n_scenarios} 个场景")
print(f"轮廓系数: {result.silhouette_score:.3f}")
for i, name in enumerate(result.scenario_names):
freq = result.scenario_frequencies[i]
print(f"{name}: 出现频率 {freq:.1%}")
```
### 自动寻找最优聚类数
```python
# 自动寻找最优聚类数
result = analyzer.fit_predict(
solar_output, wind_output, load_demand,
find_optimal_k=True
)
print(f"最优聚类数: {result.n_scenarios}")
```
### 生成分析图表
```python
# 生成综合分析图表
analyzer.plot_scenario_analysis(
result, solar_output, wind_output, load_demand,
save_path="scenario_analysis.png",
show_plot=True
)
```
### 导出详细报告
```python
# 导出Excel报告
excel_file = analyzer.export_scenario_results(
result, solar_output, wind_output, load_demand
)
print(f"报告已导出: {excel_file}")
```
## 输出文件说明
### Excel报告结构
**时间序列数据**工作表:
- 小时、天数、光伏、风电、负荷、场景标签、场景名称
**场景统计**工作表:
- 场景编号、名称、出现频率、各指标均值和标准差
**典型日数据**工作表:
- 各场景的典型日内24小时变化曲线
**分析参数**工作表:
- 聚类数量、轮廓系数、随机种子、分析时间
### 图表内容
生成的9宫格图表包含
1. **场景时间分布** - 8760小时中各场景的分布情况
2. **场景频率饼图** - 各场景的出现频率
3. **聚类中心热力图** - 场景特征对比
4. **典型日曲线** - 前3个场景的日内变化
5. **场景特征雷达图** - 多维特征对比
6. **统计摘要表** - 关键指标汇总
7. **全年趋势图** - 日均值变化趋势
## 技术特点
### 1. 数据预处理
- 自动检测数据长度一致性
- 多维数据标准化处理
- 支持8760小时全年数据
### 2. 聚类算法
- 使用K-means聚类算法
- 通过轮廓系数评估聚类质量
- 支持自定义或自动确定聚类数
### 3. 场景理解
- 基于聚类中心自动生成场景描述
- 考虑光伏、风电、负荷的相对水平
- 提供直观的场景命名
### 4. 典型日提取
- 智能识别完整的代表日
- 确保典型日的场景纯度
- 提供典型日的年内位置信息
### 5. 可视化设计
- 中文标签和说明
- 专业的统计图表
- 清晰的数据展示
## 应用场景
1. **电力系统规划**:识别典型运行场景,指导储能配置
2. **新能源消纳分析**:分析不同场景下的新能源消纳特性
3. **负荷预测**:基于场景分类进行精准负荷预测
4. **运行策略优化**:针对不同场景制定差异化运行策略
5. **风险评估**:分析极端场景的出现概率和影响
## 性能说明
- **处理能力**支持8760小时数据的聚类分析
- **计算效率**K-means算法确保快速收敛
- **内存使用**:优化的数据结构,内存占用合理
- **结果稳定性**:固定随机种子确保结果可重现
## 依赖库
- numpy: 数值计算
- pandas: 数据处理
- matplotlib: 基础绘图
- seaborn: 统计图表
- scikit-learn: 机器学习算法
- dataclasses: 数据结构
## 注意事项
1. **数据质量**:确保输入数据无异常值和缺失值
2. **数据长度**支持24小时或8760小时数据
3. **聚类数选择**聚类数不宜过多建议3-12个
4. **结果解释**:结合实际业务背景解释聚类结果
5. **图表显示**:如需显示图表,需要合适的显示环境
该模块为多能互补系统的运行分析和场景识别提供了强大的工具支持,有助于深入理解系统的运行规律和特性。

204
docs/MYPY_TYPE_FIXES.md Normal file
View File

@@ -0,0 +1,204 @@
# mypy 类型注解修复说明
## 修复概述
针对 `multi_scenario.py` 模块中的 mypy 警告进行了全面的类型注解修复,提高了代码的类型安全性和可维护性。
## 主要修复内容
### 1. 导入类型增强
**修复前**
```python
from typing import List, Dict, Tuple, Optional
```
**修复后**
```python
from typing import List, Dict, Tuple, Optional, Union
```
**说明**:添加了 `Union` 类型支持,用于处理混合类型的数据结构。
### 2. 数据类字段类型注解
**修复前**
```python
@dataclass
class ScenarioResult:
cluster_labels: np.ndarray
cluster_centers: np.ndarray
scenario_names: List[str]
scenario_stats: Dict # 过于宽泛
silhouette_score: float
n_scenarios: int
scenario_frequencies: np.ndarray
typical_days: Dict # 过于宽泛
```
**修复后**
```python
@dataclass
class ScenarioResult:
cluster_labels: np.ndarray
cluster_centers: np.ndarray
scenario_names: List[str]
scenario_stats: Dict[str, Dict[str, float]] # 明确嵌套结构
silhouette_score: float
n_scenarios: int
scenario_frequencies: np.ndarray
typical_days: Dict[str, Dict[str, float]] # 明确嵌套结构
```
**说明**:将 `Dict` 类型具体化为 `Dict[str, Dict[str, float]]`,明确了字典的键值类型结构。
### 3. 类属性类型注解
**修复前**
```python
def __init__(self, n_clusters: int = 8, random_state: int = 42):
self.n_clusters = n_clusters
self.random_state = random_state
self.scaler = StandardScaler()
self.kmeans = KMeans(n_clusters=n_clusters, random_state=random_state, n_init=10)
self.scenario_names = [] # 类型不明确
```
**修复后**
```python
def __init__(self, n_clusters: int = 8, random_state: int = 42):
self.n_clusters: int = n_clusters
self.random_state: int = random_state
self.scaler: StandardScaler = StandardScaler()
self.kmeans: KMeans = KMeans(n_clusters=n_clusters, random_state=random_state, n_init=10)
self.scenario_names: List[str] = []
```
**说明**:为所有实例属性添加了明确的类型注解,提高类型检查的准确性。
### 4. 函数返回类型注解
**修复前**
```python
def calculate_scenario_statistics(self, data: np.ndarray, labels: np.ndarray,
original_data: np.ndarray) -> Dict:
# ...
def extract_typical_days(self, solar_output: List[float], wind_output: List[float],
load_demand: List[float], labels: np.ndarray) -> Dict:
# ...
```
**修复后**
```python
def calculate_scenario_statistics(self, data: np.ndarray, labels: np.ndarray,
original_data: np.ndarray) -> Dict[str, Dict[str, float]]:
# ...
def extract_typical_days(self, solar_output: List[float], wind_output: List[float],
load_demand: List[float], labels: np.ndarray) -> Dict[str, Dict[str, float]]:
# ...
```
**说明**:明确了函数返回的具体字典类型结构。
### 5. 局部变量类型注解
**修复前**
```python
scenario_stats = {}
typical_days = {}
scenario_frequencies = np.array([...])
hours = list(range(1, len(solar_output) + 1))
days = [(h - 1) // 24 + 1 for h in hours]
summary_data = []
typical_data = []
table_data = []
```
**修复后**
```python
scenario_stats: Dict[str, Dict[str, float]] = {}
typical_days: Dict[str, Dict[str, float]] = {}
scenario_frequencies: np.ndarray = np.array([...])
hours: List[int] = list(range(1, len(solar_output) + 1))
days: List[int] = [(h - 1) // 24 + 1 for h in hours]
summary_data: List[Dict[str, str]] = []
typical_data: List[Dict[str, float]] = []
table_data: List[List[str]] = []
params_data: Dict[str, List[Union[int, str]]] = {...}
```
**说明**:为所有局部变量添加了明确的类型注解,消除了类型推断的不确定性。
## 修复效果
### 1. mypy 检查改善
- **修复前**:存在多个类型注解缺失和类型不明确的警告
- **修复后**类型注解完整且明确mypy 检查更加严格和准确
### 2. 代码质量提升
- **类型安全**:在编译时就能发现类型相关错误
- **可读性**:类型注解使代码的意图更加明确
- **维护性**IDE 可以提供更好的代码补全和错误提示
### 3. 开发体验改善
- **智能提示**IDE 可以基于类型注解提供准确的代码补全
- **错误检测**:在开发阶段就能发现类型不匹配的问题
- **重构支持**:重构时类型系统可以提供安全保障
## 类型注解最佳实践
### 1. 具体化泛型类型
- **避免**:使用过于宽泛的类型如 `Dict`, `List`
- **推荐**:使用具体的类型如 `Dict[str, float]`, `List[int]`
### 2. 明确标注所有属性
- **避免**:依赖类型推断的隐式类型
- **推荐**:为所有实例属性和重要局部变量添加类型注解
### 3. 使用合适的导入
- **基础类型**`List`, `Dict`, `Tuple`, `Optional`
- **高级类型**`Union`, `Type`, `Callable`
- **特定库**:如 `numpy.ndarray`, `pandas.DataFrame`
### 4. 保持一致性
- **命名约定**:使用一致的变量命名和类型命名
- **风格统一**:在整个项目中保持相同的类型注解风格
## 验证方法
可以使用以下命令验证类型注解的正确性:
```bash
# 安装 mypy
pip install mypy
# 运行类型检查
mypy src/multi_scenario.py
# 严格模式检查
mypy --strict src/multi_scenario.py
```
## 总结
通过这些类型注解修复,`multi_scenario.py` 模块现在具有:
1. **完整的类型覆盖**:所有重要变量都有明确的类型注解
2. **准确的类型信息**:类型注解精确反映了数据的实际结构
3. **良好的开发体验**IDE 和类型检查器可以提供更好的支持
4. **高代码质量**:类型安全有助于减少运行时错误
这些改进使代码更加健壮、易于维护,并提供了更好的开发工具支持。

View File

@@ -0,0 +1,228 @@
# 场景储能配置优化模块
## 功能概述
本模块将多场景聚类分析与储能容量优化相结合,为多能互补系统提供场景化的储能配置方案。通过识别不同的运行模式,为每种场景提供最优的储能容量建议。
## 主要特性
### 1. 多场景储能优化
- **场景识别**: 基于光伏、风电、负荷三维度进行聚类分析
- **储能配置**: 为每个场景独立计算最优储能容量
- **结果汇总**: 提供加权平均和最大需求分析
### 2. 智能数据处理
- **短时扩展**: 自动将短时场景数据扩展为24小时
- **长度适配**: 确保数据符合储能优化算法要求
- **错误处理**: 完善的异常捕获和提示机制
### 3. 可视化分析
- **结果展示**: 清晰的场景储能需求汇总表
- **配置建议**: 基于安全系数的储能容量推荐
- **频率分析**: 基于场景出现频率的加权计算
## 核心类和方法
### MultiScenarioAnalyzer类
#### 新增方法
##### `optimize_storage_for_scenarios()`
对聚类后的场景进行储能配置优化。
**参数:**
- `result`: 聚类结果 (ScenarioResult)
- `solar_output`: 光伏出力曲线 (List[float], MW)
- `wind_output`: 风电出力曲线 (List[float], MW)
- `load_demand`: 负荷曲线 (List[float], MW)
- `system_params`: 系统参数 (SystemParameters, 可选)
- `safety_factor`: 安全系数 (float, 默认1.2)
**返回:**
- Dict[str, Dict[str, float]]: 各场景的储能优化结果
**功能:**
1. 遍历所有识别出的场景
2. 提取每个场景的数据点
3. 确保数据长度为24小时
4. 调用储能优化算法
5. 计算加权平均和推荐容量
##### `_extract_scenario_data()`
提取指定场景的数据点。
**参数:**
- `solar_output`: 光伏出力曲线
- `wind_output`: 风电出力曲线
- `load_demand`: 负荷曲线
- `cluster_labels`: 场景标签
- `scenario_id`: 场景编号
**返回:**
- Tuple[List[float], List[float], List[float], int]: 场景数据和时间长度
##### `print_storage_optimization_summary()`
打印储能配置优化汇总结果。
**参数:**
- `optimization_results`: 储能优化结果
**输出:**
- 格式化的场景对比表格
- 加权平均和最大需求
- 储能容量配置建议
## 使用示例
```python
from multi_scenario import MultiScenarioAnalyzer
from storage_optimization import SystemParameters
# 1. 生成测试数据
solar_output = [0.0] * 6 + [5.0] * 12 + [0.0] * 6 # 光伏出力
wind_output = [3.0] * 24 # 风电出力
load_demand = [10.0] * 24 # 负荷曲线
# 2. 执行多场景聚类
analyzer = MultiScenarioAnalyzer(n_clusters=3, random_state=42)
result = analyzer.fit_predict(solar_output, wind_output, load_demand)
# 3. 储能配置优化
system_params = SystemParameters(
max_curtailment_wind=0.1,
max_curtailment_solar=0.1,
max_grid_ratio=0.2,
storage_efficiency=0.9,
discharge_rate=1.0,
charge_rate=1.0
)
optimization_results = analyzer.optimize_storage_for_scenarios(
result, solar_output, wind_output, load_demand,
system_params, safety_factor=1.2
)
# 4. 查看结果
analyzer.print_storage_optimization_summary(optimization_results)
```
## 输出结果
### 优化结果结构
```python
{
'scenario_id': {
'scenario_name': '场景名称',
'duration': 24, # 小时
'required_storage': 5.0, # MWh
'curtailment_wind': 0.05, # 弃风率
'curtailment_solar': 0.03, # 弃光率
'grid_ratio': 0.15, # 上网比例
'frequency': 0.3, # 场景频率
'energy_balance_check': True # 能量平衡检查
},
'summary': {
'weighted_average_storage': 4.5, # MWh
'maximum_storage_need': 8.0, # MWh
'recommended_capacity': 9.6, # MWh
'safety_factor': 1.2,
'n_scenarios': 3
}
}
```
### 控制台输出示例
```
================================================================================
场景储能配置优化汇总
================================================================================
场景 名称 频率 储能容量 弃风率 弃光率
--------------------------------------------------------------------------------
场景1 低负荷(低光伏+低风电+低负荷) 25.0% 1.00 MWh 0.000 0.000
场景2 高负荷(高光伏+低风电+高负荷) 45.0% 3.00 MWh 0.100 0.050
场景3 中负荷(中光伏+高风电+中负荷) 30.0% 2.00 MWh 0.020 0.000
--------------------------------------------------------------------------------
加权平均储能需求 2.25 MWh
最大储能需求 3.00 MWh
推荐储能容量 3.60 MWh
安全系数 1.20
配置建议:
- 建议:储能容量配置相对合理
================================================================================
```
## 技术特点
### 1. 模块化设计
- **职责分离**: `src/multi_scenario.py` 专门用于储能配置优化
- **测试分离**: `test_multi_scenario.py` 只做基本聚类测试
- **功能集成**: 聚类分析+储能优化的完整工作流
### 2. 智能处理逻辑
- **数据扩展**: 自动处理短时场景数据
- **长度适配**: 确保24小时数据用于优化
- **频率加权**: 基于场景出现频率的储能需求计算
### 3. 鲁棒性设计
- **异常处理**: 完善的错误捕获和提示
- **边界检查**: 场景数据完整性验证
- **参数验证**: 系统参数合理性检查
## 测试验证
### 基础功能测试
- 多场景聚类分析
- 储能配置优化计算
- 结果汇总和展示
### 边界情况测试
- 短时间数据处理
- 极大储能需求场景
- 不同聚类数效果对比
### 性能测试
- 长时间序列数据处理
- 多场景同时优化
- 结果输出和存储
## 应用价值
### 1. 规划设计支持
- **场景化设计**: 为不同运行模式提供定制化储能配置
- **容量优化**: 基于实际运行模式的科学容量计算
- **风险评估**: 考虑极端场景的安全系数设计
### 2. 运行策略制定
- **模式识别**: 自动识别典型运行模式
- **策略切换**: 基于场景的储能运行策略
- **适应性**: 适应季节性和随机性变化
### 3. 投资决策依据
- **成本优化**: 平衡储能投资与运行效果
- **风险控制**: 基于极端场景的容量保障
- **经济评估**: 为投资决策提供量化依据
## 后续扩展
### 1. 功能增强
- **多时域优化**: 季节性和日内储能协调
- **动态调度**: 基于实时场景的储能调度
- **成本效益分析**: 集成经济性评估
### 2. 应用扩展
- **多能系统**: 扩展到更多能源类型
- **微电网**: 适配不同规模的微电网
- **虚拟电厂**: 支持虚拟电厂储能配置
### 3. 算法优化
- **智能算法**: 集成机器学习优化方法
- **预测融合**: 结合天气预报的场景预测
- **自适应**: 动态调整聚类和优化参数
## 总结
场景储能配置优化模块为多能互补系统提供了一个完整的储能容量设计工具。通过多场景聚类分析和储能优化的结合,实现了从数据到决策的全流程支持,具有很强的工程应用价值。