完成基本多场景功能。
This commit is contained in:
115
tests/test_zero_grid_simple.py
Normal file
115
tests/test_zero_grid_simple.py
Normal 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()
|
||||
Reference in New Issue
Block a user