Files
multi_energy_complementarity/tests/test_excel_parameters.py

184 lines
7.6 KiB
Python
Raw Normal View History

2025-12-27 19:15:56 +08:00
"""
测试Excel参数设置功能
该程序演示如何修改Excel参数工作表中的参数并验证参数是否被正确读取
作者: iFlow CLI
创建日期: 2025-12-25
"""
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'src'))
import pandas as pd
from excel_reader import read_excel_data, validate_system_parameters
from storage_optimization import optimize_storage_capacity
def test_parameter_modification():
"""测试参数修改功能"""
print("=== 测试Excel参数设置功能 ===\n")
# 1. 读取原始参数
print("1. 读取原始Excel参数...")
original_data = read_excel_data('data_template_24.xlsx', include_parameters=True)
original_params = original_data['system_parameters']
print("原始参数:")
print(f" 最大弃风率: {original_params.max_curtailment_wind}")
print(f" 最大弃光率: {original_params.max_curtailment_solar}")
print(f" 最大上网电量比例: {original_params.max_grid_ratio}")
print(f" 储能效率: {original_params.storage_efficiency}")
print(f" 放电倍率: {original_params.discharge_rate}")
print(f" 充电倍率: {original_params.charge_rate}")
print(f" 最大储能容量: {original_params.max_storage_capacity}")
# 2. 使用原始参数进行优化
print("\n2. 使用原始参数进行储能容量优化...")
original_result = optimize_storage_capacity(
original_data['solar_output'],
original_data['wind_output'],
original_data['thermal_output'],
original_data['load_demand'],
original_params
)
print(f"原始参数优化结果:")
print(f" 所需储能容量: {original_result['required_storage_capacity']:.2f} MWh")
print(f" 弃风率: {original_result['total_curtailment_wind_ratio']:.3f}")
print(f" 弃光率: {original_result['total_curtailment_solar_ratio']:.3f}")
print(f" 上网电量比例: {original_result['total_grid_feed_in_ratio']:.3f}")
# 3. 修改Excel参数
print("\n3. 修改Excel参数...")
# 创建测试用的参数DataFrame
new_params_df = pd.DataFrame({
'参数名称': [
'最大弃风率',
'最大弃光率',
'最大上网电量比例',
'储能效率',
'放电倍率',
'充电倍率',
'最大储能容量'
],
'参数值': [
0.15, # 增加弃风率
0.12, # 增加弃光率
0.25, # 增加上网电量比例
0.85, # 降低储能效率
1.2, # 增加放电倍率
1.2, # 增加充电倍率
1000.0 # 设置储能容量上限
],
'参数说明': [
'允许的最大弃风率0.0-1.0',
'允许的最大弃光率0.0-1.0',
'允许的最大上网电量比例0.0-∞,只限制上网电量)',
'储能充放电效率0.0-1.0',
'储能放电倍率C-rate>0',
'储能充电倍率C-rate>0',
'储能容量上限MWh空表示无限制'
],
'取值范围': [
'0.0-1.0',
'0.0-1.0',
'≥0.0',
'0.0-1.0',
'>0',
'>0',
'>0或空'
],
'默认值': [
'0.1',
'0.1',
'0.2',
'0.9',
'1.0',
'1.0',
'无限制'
]
})
# 读取原始Excel文件
with pd.ExcelFile('data_template_24.xlsx') as xls:
data_df = pd.read_excel(xls, sheet_name='数据')
description_df = pd.read_excel(xls, sheet_name='说明')
# 保存修改后的Excel文件
with pd.ExcelWriter('data_template_24_modified.xlsx', engine='openpyxl') as writer:
data_df.to_excel(writer, sheet_name='数据', index=False)
new_params_df.to_excel(writer, sheet_name='参数', index=False)
description_df.to_excel(writer, sheet_name='说明', index=False)
print("已创建修改后的Excel文件: data_template_24_modified.xlsx")
print("修改后的参数:")
print(f" 最大弃风率: 0.15 (原: {original_params.max_curtailment_wind})")
print(f" 最大弃光率: 0.12 (原: {original_params.max_curtailment_solar})")
print(f" 最大上网电量比例: 0.25 (原: {original_params.max_grid_ratio})")
print(f" 储能效率: 0.85 (原: {original_params.storage_efficiency})")
print(f" 放电倍率: 1.2 (原: {original_params.discharge_rate})")
print(f" 充电倍率: 1.2 (原: {original_params.charge_rate})")
print(f" 最大储能容量: 1000.0 (原: {original_params.max_storage_capacity})")
# 4. 读取修改后的参数
print("\n4. 读取修改后的参数...")
modified_data = read_excel_data('data_template_24_modified.xlsx', include_parameters=True)
modified_params = modified_data['system_parameters']
print("修改后的参数读取结果:")
print(f" 最大弃风率: {modified_params.max_curtailment_wind}")
print(f" 最大弃光率: {modified_params.max_curtailment_solar}")
print(f" 最大上网电量比例: {modified_params.max_grid_ratio}")
print(f" 储能效率: {modified_params.storage_efficiency}")
print(f" 放电倍率: {modified_params.discharge_rate}")
print(f" 充电倍率: {modified_params.charge_rate}")
print(f" 最大储能容量: {modified_params.max_storage_capacity}")
# 5. 验证修改后的参数
validation = validate_system_parameters(modified_params)
if validation['valid']:
print("[OK] 修改后的参数验证通过")
else:
print("[ERROR] 修改后的参数验证失败:")
for error in validation['errors']:
print(f" - {error}")
if validation['warnings']:
print("[WARNING] 修改后的参数警告:")
for warning in validation['warnings']:
print(f" - {warning}")
# 6. 使用修改后的参数进行优化
print("\n5. 使用修改后的参数进行储能容量优化...")
modified_result = optimize_storage_capacity(
modified_data['solar_output'],
modified_data['wind_output'],
modified_data['thermal_output'],
modified_data['load_demand'],
modified_params
)
print(f"修改后参数优化结果:")
print(f" 所需储能容量: {modified_result['required_storage_capacity']:.2f} MWh")
print(f" 弃风率: {modified_result['total_curtailment_wind_ratio']:.3f}")
print(f" 弃光率: {modified_result['total_curtailment_solar_ratio']:.3f}")
print(f" 上网电量比例: {modified_result['total_grid_feed_in_ratio']:.3f}")
print(f" 容量限制是否达到: {modified_result['capacity_limit_reached']}")
# 7. 对比结果
print("\n6. 结果对比:")
print(f"储能容量变化: {original_result['required_storage_capacity']:.2f} -> {modified_result['required_storage_capacity']:.2f} MWh")
print(f"弃风率变化: {original_result['total_curtailment_wind_ratio']:.3f} -> {modified_result['total_curtailment_wind_ratio']:.3f}")
print(f"弃光率变化: {original_result['total_curtailment_solar_ratio']:.3f} -> {modified_result['total_curtailment_solar_ratio']:.3f}")
print(f"上网电量比例变化: {original_result['total_grid_feed_in_ratio']:.3f} -> {modified_result['total_grid_feed_in_ratio']:.3f}")
print("\n=== 测试完成 ===")
print("Excel参数设置功能测试成功")
print("用户可以通过修改Excel文件中的'参数'工作表来调整系统参数。")
if __name__ == "__main__":
test_parameter_modification()