# -*- 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()