完成基本多场景功能。

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,115 @@
# -*- coding: utf-8 -*-
"""
测试火电可用发电量为0时的系统行为 - 简化版本
验证系统在无火电情况下的基本功能
"""
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'src'))
from storage_optimization import optimize_storage_capacity, SystemParameters
def test_zero_grid_simple():
"""测试火电可用发电量为0时的系统行为"""
print("=== 测试火电可用发电量为0时的系统行为简化版 ===")
# 创建简单的测试场景
solar_output = [30.0] * 12 + [0.0] * 12 # 12小时有光伏12小时无光伏
wind_output = [20.0] * 24 # 稳定风电
thermal_output = [0.0] * 24 # 无火电
load_demand = [25.0] * 24 # 稳定负荷
print("测试数据设计:")
print(f" 光伏出力: {sum(solar_output):.1f} MWh (12小时)")
print(f" 风电出力: {sum(wind_output):.1f} MWh")
print(f" 火电出力: {sum(thermal_output):.1f} MWh")
print(f" 总发电量: {sum(solar_output) + sum(wind_output) + sum(thermal_output):.1f} MWh")
print(f" 总负荷: {sum(load_demand):.1f} MWh")
print(f" 理论盈余: {(sum(solar_output) + sum(wind_output) + sum(thermal_output) - sum(load_demand)):.1f} MWh")
# 设置系统参数
params = SystemParameters(
max_curtailment_wind=0.1, # 允许弃风10%
max_curtailment_solar=0.1, # 允许弃光10%
max_grid_ratio=0.2, # 允许上网20%
storage_efficiency=0.9,
discharge_rate=1.0,
charge_rate=1.0,
max_storage_capacity=50.0 # 限制储能容量
)
print(f"\n系统参数:")
print(f" 最大弃风率: {params.max_curtailment_wind}")
print(f" 最大弃光率: {params.max_curtailment_solar}")
print(f" 最大上网电量比例: {params.max_grid_ratio}")
print(f" 储能容量限制: {params.max_storage_capacity} MWh")
try:
result = optimize_storage_capacity(
solar_output, wind_output, thermal_output, load_demand, params
)
if result is None:
print(f"\n[ERROR] 优化计算失败")
return
# 计算结果统计
actual_grid_feed_in = sum(x for x in result['grid_feed_in'] if x > 0)
actual_curtail_wind = sum(result['curtailed_wind'])
actual_curtail_solar = sum(result['curtailed_solar'])
print(f"\n优化结果:")
print(f" 储能容量需求: {result['required_storage_capacity']:.2f} MWh")
print(f" 实际上网电量: {actual_grid_feed_in:.2f} MWh")
print(f" 实际弃风量: {actual_curtail_wind:.2f} MWh")
print(f" 实际弃光量: {actual_curtail_solar:.2f} MWh")
print(f" 实际弃风率: {actual_curtail_wind/sum(wind_output):.3f}")
print(f" 实际弃光率: {actual_curtail_solar/sum(solar_output):.3f}")
# 验证约束条件
total_generation = sum(solar_output) + sum(wind_output) + sum(thermal_output)
total_load = sum(load_demand)
total_surplus = total_generation - total_load
expected_max_curtail_wind = sum(wind_output) * params.max_curtailment_wind
expected_max_curtail_solar = sum(solar_output) * params.max_curtailment_solar
print(f"\n约束验证:")
print(f" 总盈余电力: {total_surplus:.2f} MWh")
print(f" 弃风限制: {actual_curtail_wind:.2f} <= {expected_max_curtail_wind:.2f} {'OK' if actual_curtail_wind <= expected_max_curtail_wind else 'NG'}")
print(f" 弃光限制: {actual_curtail_solar:.2f} <= {expected_max_curtail_solar:.2f} {'OK' if actual_curtail_solar <= expected_max_curtail_solar else 'NG'}")
print(f" 储能限制: {result['required_storage_capacity']:.2f} MWh (限制: {params.max_storage_capacity} MWh)")
# 能量平衡验证
energy_used = actual_grid_feed_in + actual_curtail_wind + actual_curtail_solar + total_load
energy_balance = abs(total_generation - energy_used)
print(f"\n能量平衡验证:")
print(f" 总发电量: {total_generation:.2f} MWh")
print(f" 能量使用: {energy_used:.2f} MWh")
print(f" 平衡误差: {energy_balance:.2f} MWh {'OK' if energy_balance < 0.1 else 'NG'}")
# 综合评估
constraints_ok = (actual_curtail_wind <= expected_max_curtail_wind + 0.1 and
actual_curtail_solar <= expected_max_curtail_solar + 0.1 and
energy_balance < 0.1)
if constraints_ok:
print(f"\n[OK] 测试通过:")
print(f" [OK] 约束条件正确执行")
print(f" [OK] 能量平衡正确")
print(f" [OK] 系统在有盈余时正确处理")
else:
print(f"\n[WARNING] 测试部分通过,需要检查约束条件")
except Exception as e:
print(f"\n[ERROR] 测试失败: {str(e)}")
import traceback
traceback.print_exc()
print("\n=== 测试完成 ===")
if __name__ == "__main__":
test_zero_grid_simple()