110 lines
4.9 KiB
Python
110 lines
4.9 KiB
Python
"""
|
||
测试上网电量计算逻辑
|
||
|
||
测试基于可用发电量乘以最大上网比例的上网电量计算
|
||
"""
|
||
|
||
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_grid_calculation():
|
||
"""测试上网电量计算逻辑"""
|
||
print("=== 测试上网电量计算逻辑 ===")
|
||
|
||
# 创建测试数据:有大量盈余电力的情况
|
||
solar_output = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 20.0, 25.0, 30.0, 30.0, 25.0, 20.0, 15.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] # 24小时
|
||
wind_output = [5.0] * 24 # 稳定的风电
|
||
thermal_output = [10.0] * 24 # 稳定的火电
|
||
load_demand = [8.0] * 24 # 稳定的负荷,小于发电量
|
||
|
||
# 验证数据长度
|
||
print(f"数据长度验证: solar={len(solar_output)}, wind={len(wind_output)}, thermal={len(thermal_output)}, load={len(load_demand)}")
|
||
|
||
print(f"总发电潜力: {sum(solar_output) + sum(wind_output) + sum(thermal_output):.2f} MW")
|
||
print(f"总负荷: {sum(load_demand):.2f} MW")
|
||
print(f"理论盈余: {sum(solar_output) + sum(wind_output) + sum(thermal_output) - sum(load_demand):.2f} MW")
|
||
|
||
# 测试参数1:低上网比例
|
||
params1 = SystemParameters(
|
||
max_curtailment_wind=0.1,
|
||
max_curtailment_solar=0.1,
|
||
max_grid_ratio=0.1, # 10%上网比例
|
||
storage_efficiency=0.9,
|
||
discharge_rate=1.0,
|
||
charge_rate=1.0,
|
||
available_thermal_energy=240.0, # 24小时 * 10MW
|
||
available_solar_energy=150.0, # 基于实际光伏出力
|
||
available_wind_energy=120.0 # 基于实际风电出力
|
||
)
|
||
|
||
# 计算期望的上网电量上限(不考虑火电)
|
||
total_available_energy = params1.available_solar_energy + params1.available_wind_energy
|
||
expected_max_grid_feed_in = total_available_energy * params1.max_grid_ratio
|
||
|
||
print(f"\n测试参数1:")
|
||
print(f" 可用发电量总计: {total_available_energy:.2f} MWh")
|
||
print(f" 最大上网比例: {params1.max_grid_ratio}")
|
||
print(f" 期望上网电量上限: {expected_max_grid_feed_in:.2f} MWh")
|
||
|
||
# 设置储能容量上限以观察上网电量限制
|
||
params1.max_storage_capacity = 50.0 # 限制储能容量为50MWh
|
||
result1 = optimize_storage_capacity(solar_output, wind_output, thermal_output, load_demand, params1)
|
||
|
||
actual_grid_feed_in = sum(x for x in result1['grid_feed_in'] if x > 0)
|
||
print(f" 实际上网电量: {actual_grid_feed_in:.2f} MWh")
|
||
print(f" 实际弃风量: {sum(result1['curtailed_wind']):.2f} MWh")
|
||
print(f" 实际弃光量: {sum(result1['curtailed_solar']):.2f} MWh")
|
||
|
||
# 验证上网电量是否正确限制
|
||
if abs(actual_grid_feed_in - expected_max_grid_feed_in) < 1.0: # 允许1MW误差
|
||
print(" [OK] 上网电量计算正确")
|
||
else:
|
||
print(" [ERROR] 上网电量计算有误")
|
||
|
||
# 测试参数2:高上网比例
|
||
params2 = SystemParameters(
|
||
max_curtailment_wind=0.1,
|
||
max_curtailment_solar=0.1,
|
||
max_grid_ratio=0.5, # 50%上网比例
|
||
storage_efficiency=0.9,
|
||
discharge_rate=1.0,
|
||
charge_rate=1.0,
|
||
available_thermal_energy=240.0, # 24小时 * 10MW
|
||
available_solar_energy=150.0, # 基于实际光伏出力
|
||
available_wind_energy=120.0 # 基于实际风电出力
|
||
)
|
||
|
||
# 计算期望的上网电量上限(不考虑火电)
|
||
total_available_energy = params2.available_solar_energy + params2.available_wind_energy
|
||
expected_max_grid_feed_in2 = total_available_energy * params2.max_grid_ratio
|
||
|
||
# 计算期望的上网电量上限(不考虑火电)
|
||
total_available_energy2 = params2.available_solar_energy + params2.available_wind_energy
|
||
|
||
print(f"\n测试参数2:")
|
||
print(f" 可用发电量总计: {total_available_energy2:.2f} MWh")
|
||
print(f" 最大上网比例: {params2.max_grid_ratio}")
|
||
print(f" 期望上网电量上限: {expected_max_grid_feed_in2:.2f} MWh")
|
||
|
||
# 设置储能容量上限以观察上网电量限制
|
||
params2.max_storage_capacity = 50.0 # 限制储能容量为50MWh
|
||
result2 = optimize_storage_capacity(solar_output, wind_output, thermal_output, load_demand, params2)
|
||
|
||
actual_grid_feed_in2 = sum(x for x in result2['grid_feed_in'] if x > 0)
|
||
print(f" 实际上网电量: {actual_grid_feed_in2:.2f} MWh")
|
||
print(f" 实际弃风量: {sum(result2['curtailed_wind']):.2f} MWh")
|
||
print(f" 实际弃光量: {sum(result2['curtailed_solar']):.2f} MWh")
|
||
|
||
# 验证上网电量是否正确限制
|
||
if abs(actual_grid_feed_in2 - expected_max_grid_feed_in2) < 1.0: # 允许1MW误差
|
||
print(" [OK] 上网电量计算正确")
|
||
else:
|
||
print(" [ERROR] 上网电量计算有误")
|
||
|
||
print("\n=== 测试完成 ===")
|
||
|
||
if __name__ == "__main__":
|
||
test_grid_calculation() |