1. 项目概述:两阶段鲁棒优化问题背景
电力系统调度中,风光出力和负荷需求的不确定性一直是影响决策可靠性的关键因素。传统随机规划方法需要精确的概率分布假设,而实际场景中往往难以获取足够数据支撑这种假设。这正是鲁棒优化(Robust Optimization)的用武之地——它只需要定义不确定参数的波动范围(即不确定集),就能在最坏情况下保证系统可行性。
我最近在Matlab中实现了一个典型的两阶段鲁棒优化模型,用于解决含风光负荷不确定性的电力调度问题。第一阶段确定机组启停、储能配置等"here-and-now"决策;第二阶段根据实时风光出力和负荷波动调整发电计划,属于"wait-and-see"决策。这种分离设计既保证了事前决策的稳健性,又保留了事中调整的灵活性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法原理拆解
2.1 鲁棒优化建模要点
鲁棒优化的核心在于不确定集的构造。对于风光出力不确定性,通常采用多面体集合(Polyhedral Set)描述:
code复制U = {u | u = u0 + ξ, ||ξ||_∞ ≤ Γ}
其中u0为预测值,Γ为不确定性预算参数。Γ=0时退化为确定性优化,Γ越大系统越保守。
2.2 大M法实现线性化
当模型中存在非线性约束(如if-then逻辑)时,需要引入大M法进行线性化处理。例如对于约束:
code复制如果x>0,则y≤a
可转化为:
code复制y - a ≤ M(1-z)
x ≤ Mz
z ∈ {0,1}
其中M是足够大的常数,z为辅助二元变量。选择M值时需注意:
- 过小会导致约束失效
- 过大会引发数值不稳定
- 建议取比问题规模大2-3个数量级的数值
2.3 C&CG算法流程
列与约束生成(Column and Constraint Generation, C&CG)算法是求解两阶段问题的有效方法。其实施步骤为:
- 初始化:求解不考虑不确定性的主问题(MP),获得第一阶段决策x0
- 子问题(SP):固定x0,寻找使系统最恶劣的场景u*
- 判断:若SP目标值超过阈值,将u*对应的约束加入MP
- 迭代:重复求解MP和SP直至收敛
matlab复制while gap > tolerance
% 求解主问题
[x, obj_MP] = sol
