Files
multi_energy_complementarity/tests/test_excel_parameters.py
2025-12-27 19:15:56 +08:00

184 lines
7.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
测试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()