1. 微电网经济调度与鲁棒优化的现实需求
微电网作为分布式能源系统的核心单元,其经济调度问题直接关系到运营成本与供电可靠性。传统确定性优化方法在面对光伏出力波动、负荷预测偏差等不确定性因素时,往往表现出"脆弱性"——即理论上最优的调度方案在实际运行时可能因微小扰动而失效。去年参与某工业园区微电网项目时,我们就曾遇到这样的情况:基于预测数据制定的完美调度方案,在实际运行第一天就因突发的云层覆盖导致光伏出力骤降40%,不得不启动高价柴油发电机补足缺口。
鲁棒优化方法通过构建不确定性集合,将随机变量约束在合理波动范围内,寻求"最坏情况下仍可行"的调度方案。两阶段建模则进一步区分了"日前决策"与"实时调整"的时序特性:第一阶段确定机组启停等"此时此地"决策(Here-and-Now),第二阶段通过储能充放电等"等待观望"决策(Wait-and-See)应对不确定性。这种"决策-响应"的框架更符合电力系统实际运行逻辑。
2. 两阶段鲁棒优化模型构建
2.1 基础模型框架
考虑包含燃气轮机(MT)、光伏(PV)、储能(ESS)和可中断负荷的典型微电网,其两阶段鲁棒模型可表述为:
code复制min_{x} c^T x + max_{u∈U} min_{y∈Ω(x,u)} d^T y
s.t. Ax ≥ b
Ω(x,u) = {y | Gy ≥ h - Ex - Fu}
其中:
- x:第一阶段决策变量(机组启停、日前计划等)
- y:第二阶段决策变量(储能充放电、负荷削减等)
- u:不确定性参数(光伏出力、负荷需求等)
- U:不确定性集合(盒式集合或多面体集合)
2.2 不确定性集合设计
常见的盒式集合(Box Uncertainty Set)虽然计算简单,但往往过于保守。我们采用预算不确定性集合(Budget Uncertainty Set):
code复制U = {u | u_i = ū_i + ξ_iΔu_i, ∑|ξ_i| ≤ Γ, |ξ_i| ≤ 1}
其中Γ为"保守度预算",通过调节Γ可在经济性与鲁棒性间取得平衡。实际项目中,我们通过历史数据统计确定Δu_i的取值,而Γ则根据运营商风险偏好设定(通常取1.5-2.5)。
2.3 线性化处理技巧
模型中存在的非线性项(如机组启停成本与出力的乘积项)需要通过大M法进行线性化。以燃气轮机为例:
code复制引入二进制变量z表示机组状态:
- z=1:机组运行
- z=0:机组停机
出力约束修改为:
P_min*z ≤ P ≤ P_max*z
启动成本表示为 C_su*z
3. Python求解实现关键步骤
3.1 工具链选型
我们选用以下工具构建求解框架:
- Pyomo:代数建模语言,支持鲁棒优化问题表述
- Gurobi:商业求解器(学术免费),处理MIP问题效率高
- Pandas:数据处理与场景生成
- Matplotlib:结果可视化
注意:安装Gurobi时需申请学术许可证,社区版有规模限制。替代方案可使用COIN-OR的CBC求解器(通过Pyomo调用)
3.2 核心代码结构
python复制# 模型初始化
model = ConcreteModel()
# 第一阶段变量
model.x = Var(units, within=Binary) # 机组启停
model.p_day_ahead = Var(units, within=NonNegativeReals) # 日前计划出力
# 第二阶段变量
model.y_p = Var(units, time, within=NonNegativeReals) # 实时调整出力
model.y_ess = Var(ess_units, time, within=Reals) # 储能充放电
# 不确定性参数
model.u_pv = Param(time, mutable=True) # 光伏实际出力
3.3 对偶转化与C&CG算法
鲁棒问题通过列与约束生成(Column-and-Constraint Generation, C&CG)算法求解,其核心流程:
- 主问题(MP)求解确定x
- 子问题(SP)寻找最恶劣场景u
- 将u对应的约束添加到MP
- 迭代直到收敛
python复制# C&CG主问题
def build_master():
master = ConcreteModel()
# 包含初始约束
return master
# 最恶劣场景子问题
def solve_sub(x_val):
sub = ConcreteModel()
# 构建max-min问题
return worst_u
4. 实际应用中的工程调优
4.1 计算效率提升
在30节点微电网案例中,原始C&CG算法需要15+次迭代。通过以下改进将迭代次数降至5-8次:
- 初始场景生成:用历史极端场景初始化主问题
- 有效不等式:添加基于物理约束的切割平面
- 并行求解:利用Pyomo的asynchronous解法管理器
4.2 保守度调节实践
通过Γ参数调节鲁棒性水平时,我们发现:
- Γ=0:退化为确定性模型,平均成本最低但5%场景会失负荷
- Γ=2:成本增加8%,但99.9%场景可行
- Γ>3:成本剧增而可靠性提升有限
建议采用Γ值自适应策略:预测精度高时降低Γ,恶劣天气预警时提高Γ。
4.3 与MPC的结合应用
将鲁棒调度与模型预测控制(MPC)结合形成滚动优化框架:
code复制while not end_of_horizon:
1. 执行当前时段调度指令
2. 观测实际光伏/负荷数据
3. 更新预测与不确定性集合
4. 重新求解两阶段问题
5. 移至下一时段
5. 典型问题排查与解决
5.1 模型不可行诊断
当主问题报告不可行时,按以下步骤排查:
-
检查基础约束逻辑:
- 功率平衡等式左右项是否匹配
- 储能SOC上下限是否合理(如0.2-0.8)
-
验证不确定性集合:
python复制print(sum(u[i]/Δu[i] for i in time) <= Γ) # 预算约束 -
逐步放松约束定位冲突源
5.2 Gurobi求解中断处理
遇到"Time limit exceeded"时:
- 调整MIPGap参数(默认1e-4可放宽到1e-3)
- 设置启发式策略:
python复制opt.options['Heuristics'] = 0.05 # 增加启发式努力 opt.options['MIPFocus'] = 1 # 侧重可行性
5.3 结果合理性验证
通过以下方法验证调度方案:
python复制def validate_solution():
1. 固定x值,随机生成100组u
2. 求解第二阶段问题
3. 统计约束违反率与平均成本
4. 绘制储能SOC轨迹曲线
我在某社区微电网项目中,通过这种验证发现储能充放电功率限制设置错误(单位混淆了kW和kWh/h),避免了实际运行事故。
