""" 测试上网电量计算逻辑 测试基于可用发电量乘以最大上网比例的上网电量计算 """ 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()