删除max_grid_feed_in_ratio_absolute变量。

This commit is contained in:
dmy
2025-12-25 23:51:48 +08:00
parent 89b7516ee4
commit 1dad2ff220
2 changed files with 90 additions and 33 deletions

View File

@@ -18,7 +18,7 @@ class SystemParameters:
"""系统参数配置类"""
max_curtailment_wind: float = 0.1 # 最大允许弃风率 (0.0-1.0)
max_curtailment_solar: float = 0.1 # 最大允许弃光率 (0.0-1.0)
max_grid_ratio: float = 0.2 # 最大允许上网电量比例 (0.0-1.0)
max_grid_ratio: float = 0.2 # 最大允许上网电量比例 (0.0-∞,只限制上网电量,不限制购电)
storage_efficiency: float = 0.9 # 储能充放电效率 (0.0-1.0)
discharge_rate: float = 1.0 # 储能放电倍率 (C-rate)
charge_rate: float = 1.0 # 储能充电倍率 (C-rate)
@@ -70,8 +70,9 @@ def validate_inputs(
raise ValueError("弃风率必须在0.0-1.0之间")
if not (0.0 <= params.max_curtailment_solar <= 1.0):
raise ValueError("弃光率必须在0.0-1.0之间")
if not (-1.0 <= params.max_grid_ratio <= 1.0):
raise ValueError("上网电量比例必须在-1.0到1.0之间(负值表示购电)")
# max_grid_ratio只限制上网电量比例必须为非负值
if not (0.0 <= params.max_grid_ratio):
raise ValueError("上网电量比例限制必须为非负值")
if not (0.0 < params.storage_efficiency <= 1.0):
raise ValueError("储能效率必须在0.0-1.0之间")
if params.discharge_rate <= 0 or params.charge_rate <= 0:
@@ -212,16 +213,10 @@ def calculate_energy_balance(
# 计算剩余缺电,需要从电网购电
remaining_deficit = power_deficit - actual_discharge
# 如果还有缺电且允许购电,则从电网购电
# 如果还有缺电从电网购电
if remaining_deficit > 0:
# 检查是否允许购电max_grid_ratio为负值
if params.max_grid_ratio < 0:
# 购电功率为负值,表示从电网输入
grid_feed_in[hour] = -remaining_deficit
else:
# 不允许购电,缺电部分无法满足
# 在实际系统中可能需要削减负荷
grid_feed_in[hour] = 0 # 不购电
# 购电功率为负值,表示从电网输入
grid_feed_in[hour] = -remaining_deficit
return {
'storage_profile': storage_soc.tolist(),
@@ -333,12 +328,15 @@ def optimize_storage_capacity(
constraint_results = check_constraints(solar_output, wind_output, thermal_output, balance_result, params)
# 检查是否满足所有约束
# 对于负的max_grid_ratio购电约束实际grid_feed_in_ratio应该大于等于约束值
grid_constraint_satisfied = (
constraint_results['total_grid_feed_in_ratio'] <= params.max_grid_ratio
if params.max_grid_ratio >= 0
else constraint_results['total_grid_feed_in_ratio'] >= params.max_grid_ratio
)
# max_grid_ratio只限制上网电量比例,不约束购电
# 只有当grid_feed_in为正时上网才需要检查约束
total_grid_feed_in = sum(balance_result['grid_feed_in'])
if total_grid_feed_in > 0:
# 有上网电量,检查是否超过限制
grid_constraint_satisfied = constraint_results['total_grid_feed_in_ratio'] <= params.max_grid_ratio
else:
# 没有上网电量或为负值(购电),总是满足约束
grid_constraint_satisfied = True
constraints_satisfied = (
constraint_results['total_curtailment_wind_ratio'] <= params.max_curtailment_wind and