184 lines
7.6 KiB
Python
184 lines
7.6 KiB
Python
"""
|
||
测试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() |