完成基本多场景功能。
This commit is contained in:
110
tests/test_grid_calculation.py
Normal file
110
tests/test_grid_calculation.py
Normal file
@@ -0,0 +1,110 @@
|
||||
"""
|
||||
测试上网电量计算逻辑
|
||||
|
||||
测试基于可用发电量乘以最大上网比例的上网电量计算
|
||||
"""
|
||||
|
||||
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()
|
||||
Reference in New Issue
Block a user