Files
multi_energy_complementarity/tests/test_storage_capacity.py
2025-12-27 19:15:56 +08:00

87 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""测试储能容量计算"""
import sys
sys.path.append('src')
from storage_optimization import calculate_energy_balance, SystemParameters
# 使用简单的示例数据
solar_output = [0.0] * 6 + [10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 50.0, 40.0, 30.0, 20.0, 10.0, 0.0] + [0.0] * 6
wind_output = [20.0, 30.0, 40.0, 30.0, 20.0, 10.0] * 4
thermal_output = [50.0] * 24
load_demand = [30.0, 40.0, 50.0, 60.0, 80.0, 100.0, 120.0, 140.0, 160.0, 180.0, 200.0, 180.0,
160.0, 140.0, 120.0, 100.0, 80.0, 60.0, 50.0, 40.0, 30.0, 20.0, 10.0, 20.0]
# 系统参数
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,
max_storage_capacity=200.0 # 设置储能容量上限
)
# 测试不同储能容量下的储能状态
test_capacities = [50.0, 100.0, 150.0, 200.0]
print("="*70)
print("测试不同储能容量下的实际最大储能状态")
print("="*70)
print(f"储能容量上限: {params.max_storage_capacity} MWh")
print(f"充放电倍率: {params.charge_rate} C\n")
for capacity in test_capacities:
result = calculate_energy_balance(
solar_output, wind_output, thermal_output, load_demand,
params, capacity, initial_soc=0.0
)
storage_profile = result['storage_profile']
max_storage_state = max(storage_profile)
min_storage_state = min(storage_profile)
total_curtailed = sum(result['curtailed_wind']) + sum(result['curtailed_solar'])
print(f"储能容量: {capacity:.1f} MWh")
print(f" 实际最大储能状态: {max_storage_state:.2f} MWh ({max_storage_state/capacity*100:.1f}%)")
print(f" 实际最小储能状态: {min_storage_state:.2f} MWh")
print(f" 总弃电量: {total_curtailed:.2f} MWh")
# 检查是否有充电受限的情况
charge_profile = result['charge_profile']
discharge_profile = result['discharge_profile']
max_possible_charge = capacity * params.charge_rate # 最大充电功率
max_possible_discharge = capacity * params.discharge_rate # 最大放电功率
max_actual_charge = max(charge_profile)
max_actual_discharge = max(discharge_profile)
print(f" 最大充电功率: {max_actual_charge:.2f} MW (限制: {max_possible_charge:.2f} MW)")
print(f" 最大放电功率: {max_actual_discharge:.2f} MW (限制: {max_possible_discharge:.2f} MW)")
# 检查是否达到功率限制
charge_limited = any(c >= max_possible_charge * 0.99 for c in charge_profile)
discharge_limited = any(d >= max_possible_discharge * 0.99 for d in discharge_profile)
if charge_limited:
print(f" ⚠ 充电功率受限")
if discharge_limited:
print(f" ⚠ 放电功率受限")
# 检查储能容量利用率
utilization = max_storage_state / capacity * 100
if utilization < 90:
print(f" ⚠ 储能容量利用率低 ({utilization:.1f}%)")
print()
print("="*70)
print("分析:为什么实际储能状态达不到设定的储能容量上限?")
print("="*70)
print("可能的原因:")
print("1. 电力供需平衡:如果发电量和负荷基本平衡,不需要大量储能")
print("2. 充放电倍率限制:充放电功率受限,无法快速填满储能")
print("3. 约束条件限制:弃风弃光率、上网电量比例等约束限制了储能使用")
print("4. 周期性平衡要求:储能需要在周期结束时回到接近初始状态")
print("5. 初始SOC设置初始SOC从0开始可能需要多周期才能稳定")