完成基本多场景功能。

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,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()