excel结果中输出弃电量。

This commit is contained in:
dmy
2025-12-27 17:57:38 +08:00
parent 7ce065f2df
commit 2956bc80fb
4 changed files with 283 additions and 840 deletions

View File

@@ -0,0 +1,134 @@
# 弃电损失量功能增强文档
## 修改概述
在用户要求下,对 `main.py` 文件的 Excel 输出功能进行了增强,新增了**弃电损失量**相关的统计和输出。
## 主要修改内容
### 1. 统计结果工作表增强
`export_results_to_excel` 函数的 `stats_df` 中新增了以下指标:
| 新增指标 | 说明 | 单位 |
|---------|------|------|
| 总弃风电量 | 全部时间的弃风量总和 | MWh |
| 总弃光电量 | 全部时间的弃光量总和 | MWh |
| 总弃电量 | 弃风量 + 弃光量 | MWh |
| 弃电损失比例 | 总弃电量 / 总潜在发电量 | % |
**代码位置**[`main.py:374-377`](main.py:374-377)
```python
# 计算弃电损失量
total_curtail_wind = sum(result['curtailed_wind'])
total_curtail_solar = sum(result['curtailed_solar'])
total_curtail_energy = total_curtail_wind + total_curtail_solar
# 计算总潜在发电量
total_potential_generation = sum(solar_output) + sum(wind_output) + sum(thermal_output)
curtailment_loss_ratio = (total_curtail_energy / total_potential_generation * 100) if total_potential_generation > 0 else 0
```
### 2. 运行数据工作表增强
`data_df` 中新增了以下列:
| 新增列名 | 说明 | 计算方式 |
|---------|------|----------|
| 弃电损失量(MW) | 每小时的弃电损失量 | 弃风量 + 弃光量 |
| 累计弃电量(MWh) | 从开始到当前的累计弃电量 | 逐小时累加弃电损失量 |
**代码位置**[`main.py:323-348`](main.py:323-348)
```python
# 计算弃电损失量(弃风+弃光)
curtailment_loss = [result['curtailed_wind'][i] + result['curtailed_solar'][i] for i in range(len(result['curtailed_wind']))]
# 计算累计弃电损失量
cumulative_curtailment = []
cumulative = 0
for loss in curtailment_loss:
cumulative += loss
cumulative_curtailment.append(cumulative)
```
## 功能特点
### 1. 完整的弃电损失分析
- **小时级分析**`弃电损失量(MW)` 提供每小时的弃电情况
- **累计分析**`累计弃电量(MWh)` 提供弃电的累积趋势
- **总量统计**:总弃风量、总弃光量、总弃电量的完整统计
- **比例分析**:弃电损失比例,评估系统效率
### 2. 数据一致性保证
- 运行数据中的累计弃电量 = 统计结果中的总弃电量
- 弃电损失量 = 弃风量 + 弃光量(逐小时匹配)
- 所有计算基于原始优化结果,确保数据一致性
### 3. 用户友好的输出
- Excel文件中清晰的工作表分类
- 中文列名,便于理解
- 合理的单位标注MW用于功率MWh用于能量
## 输出效果
### 统计结果工作表示例
```
指标 | 数值
-------------------|------------------
总弃风电量 | 12.50 MWh
总弃光电量 | 8.30 MWh
总弃电量 | 20.80 MWh
弃电损失比例 | 2.34%
```
### 运行数据工作表新增列
```
小时 | 弃风量(MW) | 弃光量(MW) | 弃电损失量(MW) | 累计弃电量(MWh)
-----|-----------|-----------|---------------|--------------
1 | 0.5 | 0.3 | 0.8 | 0.8
2 | 0.2 | 0.4 | 0.6 | 1.4
3 | 0.0 | 0.5 | 0.5 | 1.9
... | ... | ... | ... | ...
```
## 使用说明
1. **运行程序**`python main.py --excel data.xlsx`
2. **查看结果**在生成的Excel文件中查看"统计结果"和"运行数据"工作表
3. **分析弃电**
- 统计结果:了解总体弃电情况和损失比例
- 运行数据:分析逐小时弃电模式和累计趋势
## 技术细节
### 计算公式
- **弃电损失量** = 弃风量 + 弃光量
- **累计弃电量** = Σ(弃电损失量) (逐小时累加)
- **弃电损失比例** = (总弃电量 / 总潜在发电量) × 100%
- **总潜在发电量** = 光伏总出力 + 风电总出力 + 火电总出力
### 数据来源
- 基于 `storage_optimization.py` 中的 `result` 字典
- 使用 `curtailed_wind``curtailed_solar` 数据
- 确保与优化算法结果完全一致
## 兼容性
- ✅ 向后兼容:不影响原有功能
- ✅ Excel格式保持原有文件结构
- ✅ 时间尺度支持24小时和8760小时数据
- ✅ 数据精度:保持原有计算精度
## 验证
创建了测试文件 `test_main_modifications.py` 用于验证功能正确性:
- 验证Excel文件导出成功
- 检查新增列是否正确添加
- 验证数据计算的一致性
- 确认统计结果的准确性
## 总结
此次修改成功地在Excel输出中增加了完整的弃电损失量分析功能为用户提供了更详细和直观的弃电情况分析工具有助于优化储能系统配置和运行策略。

View File

@@ -0,0 +1,121 @@
# 上网电量比例计算方法说明
## 计算公式
**上网电量比例** = 总上网电量 / 总发电量
其中:
- **总上网电量** = sum(grid_feed_in) - 只计算正值(上网电量)
- **总发电量** = 火电发电量 + 实际风电发电量 + 实际光伏发电量
## 详细计算过程
### 1. 基础数据获取
在 [`check_constraints()`](src/storage_optimization.py:350) 函数中:
```python
# 计算总量
total_wind_potential = sum(wind_output) # 风电总潜力
total_solar_potential = sum(solar_output) # 光伏总潜力
total_thermal = sum(thermal_output) # 火电总量
total_curtailed_wind = sum(balance_result['curtailed_wind']) # 弃风总量
total_curtailed_solar = sum(balance_result['curtailed_solar']) # 弃光总量
total_grid_feed_in = sum(balance_result['grid_feed_in']) # 电网交互总量
```
### 2. 计算实际发电量
```python
# 实际发电量(考虑弃风弃光)
actual_wind_generation = total_wind_potential - total_curtailed_wind
actual_solar_generation = total_solar_potential - total_curtailed_solar
total_generation = total_thermal + actual_wind_generation + actual_solar_generation
```
### 3. 计算上网电量比例
```python
actual_grid_feed_in_ratio = total_grid_feed_in / total_generation if total_generation > 0 else 0
```
## 数据来源说明
### grid_feed_in 数据含义
在 [`calculate_energy_balance()`](src/storage_optimization.py:107) 函数中:
- **正值** = 向电网输送的电量(上网)
- **负值** = 从电网购买的电量(购电)
```python
# 上网情况
grid_feed_in[hour] = grid_feed_allowed # 正值
# 购电情况
grid_feed_in[hour] = -remaining_deficit # 负值
```
### 分母说明
**总发电量**包括:
1. **火电发电量** - 全部计入(不考虑弃火电)
2. **实际风电发电量** = 风电总潜力 - 弃风量
3. **实际光伏发电量** = 光伏总潜力 - 弃光量
## 计算示例
假设有如下数据:
- 火电总量120 MWh (24小时 × 5MW)
- 风电总量72 MWh (24小时 × 平均3MW)
- 光伏总量48 MWh (24小时 × 平均2MW)
- 弃风量7.2 MWh
- 弃光量4.8 MWh
- 上网电量10 MWh
计算过程:
```python
# 1. 实际发电量
actual_wind = 72 - 7.2 = 64.8 MWh
actual_solar = 48 - 4.8 = 43.2 MWh
total_generation = 120 + 64.8 + 43.2 = 228 MWh
# 2. 上网电量比例
grid_feed_in_ratio = 10 / 228 = 0.0438 4.38%
```
## 注意事项
### 1. 购电情况的处理
- 如果系统净购电total_grid_feed_in < 0上网电量比例仍按公式计算
- 负的上网电量会降低比例值
### 2. 零分母处理
- 如果总发电量为0比例设为0避免除零错误
### 3. 约束检查
在优化算法中,上网电量比例用于约束检查:
```python
grid_constraint_satisfied = constraint_results['total_grid_feed_in_ratio'] <= params.max_grid_ratio
```
## 输出位置
上网电量比例在以下位置输出:
1. **控制台输出**[`main.py:749`](main.py:749)
```python
print(f"实际上网电量比例: {result['total_grid_feed_in_ratio']:.3f}")
```
2. **Excel统计结果**[`main.py:393`](main.py:393)
```python
f"{result['total_grid_feed_in_ratio']:.3f}",
```
3. **可视化显示**[`src/advanced_visualization.py:158`](src/advanced_visualization.py:158)
```python
上网电量比例: {result['total_grid_feed_in_ratio']:.1%}
```
## 总结
上网电量比例反映的是系统向电网输送电量占总发电量的比例,是评估系统电网交互特性的重要指标。该比例越低,说明系统越倾向于本地消纳新能源;比例越高,说明系统向电网输出的电量越多。