ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

风光储微电网容量规划:混合不确定性下的鲁棒协同优化建模

风光储微电网容量规划:混合不确定性下的鲁棒协同优化建模 在做微电网规划时容量配置往往是第一个要面对的问题风电装多少、光伏装多少、储能配多大这直接决定了系统能不能安全运行、投资划不划算。但真正动手建模时你会发现风电和光伏出力本身就不稳定负荷也有波动如果只按确定性单一场景去算得到的“最优容量”往往会在实际运行中暴露出缺口。本文围绕风光储微电网容量规划中的混合不确定性处理展开讲清楚如何把鲁棒优化和协同优化结合起来并给出可运行的 Python 建模示例与工程排查建议。对微电网规划工程师、能源方向研究生以及做电力系统优化建模的开发者都会有一定参考价值。1. 风光储微电网容量规划要解决什么问题1.1 微电网容量规划的基本概念微电网是指由分布式电源、储能装置、负荷和监控保护装置组成的小型发配电系统既可以并网运行也可以孤岛运行。常见的分布式电源就是风力发电和光伏发电再加上储能电池形成“风光储”组合。容量规划要回答的问题非常直观风机装多少容量单位是 kW 或 MW光伏板装多少容量储能电池的额定功率和额定能量各是多少是否需要配置并网交互容量交互上限是多少。这些决策不是简单地把负荷加起来然后除以一个利用小时数因为风光出力的时序特性和负荷的时序特性并不完全匹配。白天光伏高、晚上很可能是负荷高峰这种错峰特性只有通过储能或者电网交互才能平衡。因此容量规划本质上是一个“源—荷—储”时序匹配问题。1.2 为什么要考虑混合不确定性传统规划通常使用典型日数据把风电、光伏和负荷当作已知曲线。但实际运行中风速变化导致风电出力波动云层遮挡导致光伏出力骤降负荷受季节、天气、生产安排影响存在随机性。如果规划阶段只采用一组确定性曲线一旦实际出力偏离预测值系统可能出现两类问题一是缺电表现为切负荷二是弃风弃光表现为资源浪费。所以容量规划不能只做“点估计”必须引入不确定性描述。这里的“混合不确定性”是指几类不确定性同时存在风电不确定性、光伏不确定性、负荷不确定性甚至电价和燃料价格也在变化。它们叠加在一起会让决策结果的鲁棒性显著变差。处理这种混合不确定性正是鲁棒优化方法在微电网容量规划中的核心价值。1.3 为什么需要协同优化很多项目在工程上会先估算风电和光伏容量再根据最大缺额配置储能这是一种“串联式”思路。但储能容量到底该配多大不仅取决于缺额大小还取决于风电和光伏的装机比例以及运行策略如何调度。例如光伏装得多午间富余电量多储能容量就有机会在午间充电并转移至晚高峰放电但如果风电容量更高夜间出力充足储能的需求又会变化。这说明电源容量和储能容量之间存在强耦合关系。协同优化就是在同一套优化模型中同时求解风机容量、光伏容量、储能功率和储能能量并且把运行层的调度模拟也纳入优化过程。2. 混合不确定性的数学刻画2.1 风电出力的不确定性风电出力主要由风速决定。风速通常用 Weibull 分布描述但风机出力与风速之间是分段函数关系切入风速以下无出力额定风速附近满发切出风速以上停机。在规划模型中常用“最大可用出力系数法”[ P_{w,t}^{max} cf_{w,t} \cdot C_w ]其中 (C_w) 是风机装机容量(cf_{w,t}) 是 t 时段的可利用系数取值在 0 到 1 之间。如果考虑不确定性(cf_{w,t}) 就不再是一个固定值而是区间[ cf_{w,t} \in [\underline{cf}{w,t}, \overline{cf}{w,t}] ]这样风电出力就变成了一个不确定变量。区间宽度越大表示预报误差越大。2.2 光伏出力的不确定性光伏出力与太阳辐照度、环境温度密切相关。晴天时光伏曲线平滑阴天、多云时出力波动剧烈。光伏的不确定性比风电更容易出现“骤降”场景比如一片云挡住整个光伏阵列出力可能在十几分钟内从 60% 掉到 10%。同样光伏利用系数也可以写成区间形式[ cf_{pv,t} \in [\underline{cf}{pv,t}, \overline{cf}{pv,t}] ]在此基础上还可以加入空间相关性相邻区域的光伏出力波动往往同步而不同区域的风速波动相关性相对较弱。不过对于中小型微电网先把各时段独立的区间不确定性建模好已经能解决大部分规划问题。2.3 负荷不确定性的混合描述负荷不确定性常被忽略但在孤岛型或弱并网型微电网中负荷波动可能比风光波动更致命。负荷的预测误差同样可以表示为一个区间或者一个预测值加上一个偏置量。混合不确定性集合可以写为[ U { (cf_w, cf_{pv}, L) : \underline{cf}{w,t} \le cf{w,t} \le \overline{cf}{w,t}, \underline{cf}{pv,t} \le cf_{pv,t} \le \overline{cf}_{pv,t}, \underline{L}_t \le L_t \le \overline{L}_t } ]这种“盒式不确定集合”是鲁棒优化中最基础的形式表达直观求解也相对容易。实际研究中还有椭球集合、多面体集合、带预算约束的不确定集合等核心思路都是通过集合约束控制不确定变量的变化范围避免最坏情况下结果过于保守。2.4 常见不确定集合对比不确定集合类型表达式特点保守程度求解复杂度盒式集合每个变量独立区间较高低预算不确定集合同时偏离预测的时段数受限中等低椭球集合用椭圆描述联合变化范围较低中场景集合基于历史数据生成离散场景与场景相关随场景数增大盒式集合最常用因为工程上只需要给定上下界不需要假设概率分布。如果希望降低保守性可以引入鲁棒调节参数限制“最多同时有多少个时段取最差值”这就是预算不确定集合的思想。3. 容量规划协同优化模型构建3.1 决策变量与两层结构容量规划本质上是两阶段决策问题第一阶段决定风机、光伏、储能的额定容量这类决策在项目投运前就要确定第二阶段在已知容量的前提下根据每个时段的风光出力和负荷安排储能充放电、购电、切负荷等运行策略。两阶段之外还有第三层不确定性风、光、负荷的具体取值。三层结构合在一起可以写成“min-max-min”或“min-max”的形式规划层做最小化投资成本运行层在最坏不确定性场景下做最小化运行成本。3.2 目标函数设计协同优化的目标一般是最小化全生命周期成本常见表达式是[ obj C_{inv}^{w} C_{inv}^{pv} C_{inv}^{bat} C_{op} ]其中(C_{inv}^{w}) 为风机年化投资成本(C_{inv}^{pv}) 为光伏年化投资成本(C_{inv}^{bat}) 为储能投资成本包括能量成本与功率成本(C_{op}) 为运行成本包含购电成本、运维成本、切负荷惩罚、弃风弃光惩罚。为了便于在示例中计算我会把投资成本折算成“每日成本”再用一个典型日做运行模拟。工程上更严谨的做法是采用多种典型场景加权求和或者直接全年 8760 小时精细模拟。3.3 运行约束运行约束是整个模型的骨架主要包括功率平衡约束[ p_{w,t} p_{pv,t} p_{dis,t} p_{grid,t} p_{shed,t} L_t p_{ch,t} p_{cur,t} ]其中 (p_{cur,t}) 是弃风弃光功率。储能 SOC 递推约束[ SOC_{t1} SOC_t \eta_c \cdot p_{ch,t} - \frac{p_{dis,t}}{\eta_d} ]充电和放电功率上限[ 0 \le p_{ch,t} \le P_{bat}, \quad 0 \le p_{dis,t} \le P_{bat} ][ 0 \le SOC_t \le E_{bat} ]并网交互约束[ 0 \le p_{grid,t} \le P_{grid}^{max} ]每一条约束都有明确的工程含义。功率平衡保证系统每时每刻不出现能量缺口SOC 递推约束防止储能“凭空发电”充放电功率上限对应储能变流器 PCS 的容量SOC 上限对应电池能量容量并网交互约束代表联络线极限。3.4 为什么储能容量要作为决策变量储能有两个维度功率和能量。功率决定了能多快充放电能量决定了能存多少电。很多简化模型只把储能看成“一个电池”忽略了功率和能量是两个独立变量。在实际工程中如果光伏午间富余时间短但功率大需要的是高功率、中等能量如果晚高峰持续时间长需要的是大能量、功率要求反而低。因此在协同优化模型中储能功率 (P_{bat}) 和储能能量 (E_{bat}) 应该分开决策。目标函数中分别是 (c_p \cdot P_{bat}) 和 (c_e \cdot E_{bat})。4. 求解思路两阶段鲁棒优化与 CCG 算法4.1 两阶段鲁棒优化的核心思想两阶段鲁棒优化的标准形式是[ \min_x ; c^T x \max_{u \in U} \min_{y \in F(x,u)} d^T y ]其中(x) 是一阶段变量例如风机、光伏、储能容量(u) 是不确定性变量例如风光出力系数、负荷(y) 是二阶段运行变量例如充放电功率、购电功率(F(x,u)) 是在给定 (x) 和 (u) 下的运行可行域。外层 min 求容量决策成本最低内层 max 求最坏不确定性场景最内层 min 在最坏场景下尽力降低运行成本。这样的结果能保证即使不确定性取到集合内最差组合系统依然可以通过合理的运行调度满足负荷需求。4.2 CCG 算法流程CCG 全称是 Column-and-Constraint Generation也就是列与约束生成算法是目前求解两阶段鲁棒优化最常用的方法之一。基本流程如下初始化一个最坏场景求解主问题在已知场景集下得到容量决策及其目标函数下界固定容量决策求解子问题寻找当前最坏场景如果最坏场景对应的目标值与主问题结果之差满足收敛条件停止否则把该最坏场景作为新约束加入主问题继续迭代。这套算法在中小规模模型上收敛速度通常很快。工程实现时可以使用 Gurobi、Cplex 这类商业求解器也可以使用开源求解器。4.3 求解工具怎么选学术研究和原型验证Python cvxpy 开源求解器例如 OSQP、CLARABEL大规模工程计算Gurobi 或 Cplex配合 CCG 算法快速对比方案可以先跑确定性优化再跑不确定性增强观察容量变化趋势。本文示例使用 Python cvxpy目的是跑通完整流程重点演示模型构建思路而不是追求工业级求解性能。5. 案例设计与可运行示例5.1 案例数据准备设计一个并网型风光储微电网24 小时优化周期时间分辨率为 1 小时。负荷数据、风光系数、电价数据均为示例数据读者可以替换成自己项目的实测数据。安装依赖pip install numpy cvxpy5.2 确定性容量规划模型下面这段代码是一个完整的确定性协同优化模型。它同时决策风机容量、光伏容量、储能能量和储能功率并模拟典型日 24 小时的运行策略。import numpy as np import cvxpy as cp # 24小时示例数据 T 24 # 负荷曲线单位 kW load np.array([ 40, 35, 32, 30, 32, 38, 50, 62, 70, 75, 68, 60, 55, 58, 55, 50, 60, 70, 80, 85, 82, 75, 62, 50 ]) # 风电最大可用系数 cf_w np.array([ 0.70, 0.75, 0.80, 0.70, 0.60, 0.50, 0.45, 0.40, 0.35, 0.30, 0.30, 0.35, 0.40, 0.38, 0.35, 0.30, 0.32, 0.40, 0.50, 0.55, 0.60, 0.58, 0.55, 0.68 ]) # 光伏最大可用系数 cf_pv np.array([ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.05, 0.20, 0.40, 0.60, 0.75, 0.85, 0.80, 0.60, 0.45, 0.25, 0.10, 0.02, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 ]) # 分时电价元/kWh price np.array([ 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.60, 0.60, 0.60, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 1.50, 0.60, 0.60, 0.60, 0.60 ]) # 成本参数折算到日 cw_daily 2.0 # 风机单位容量日成本元/kW cpv_daily 1.2 # 光伏单位容量日成本元/kW ce_daily 0.8 # 储能单位能量日成本元/kWh cp_daily 0.3 # 储能单位功率日成本元/kW shed_penalty 500 # 切负荷惩罚系数元/kWh # 并网交互上限kW grid_max 10.0 # 储能效率 eta_c 0.95 eta_d 0.95 soc_0_ratio 0.3 def solve_planning(cf_w_input, cf_pv_input): # 一阶段容量变量 P_w cp.Variable(nonnegTrue) P_pv cp.Variable(nonnegTrue) E_bat cp.Variable(nonnegTrue) P_bat cp.Variable(nonnegTrue) # 二阶段运行变量 p_w cp.Variable(T, nonnegTrue) p_pv cp.Variable(T, nonnegTrue) p_ch cp.Variable(T, nonnegTrue) p_dis cp.Variable(T, nonnegTrue) p_grid cp.Variable(T, nonnegTrue) p_cur cp.Variable(T, nonnegTrue) p_shed cp.Variable(T, nonnegTrue) soc cp.Variable(T, nonnegTrue) constraints [] for t in range(T): constraints [ p_w[t] cf_w_input[t] * P_w, p_pv[t] cf_pv_input[t] * P_pv, p_ch[t] P_bat, p_dis[t] P_bat, p_grid[t] grid_max, soc[t] E_bat, p_w[t] p_pv[t] p_dis[t] p_grid[t] p_shed[t] load[t] p_ch[t] p_cur[t] ] # 储能 SOC 递推 constraints [ soc[0] soc_0_ratio * E_bat eta_c * p_ch[0] - p_dis[0] / eta_d ] for t in range(1, T): constraints [ soc[t] soc[t-1] eta_c * p_ch[t] - p_dis[t] / eta_d ] # 周期末 SOC 回到初值比例 constraints [ soc[T-1] soc_0_ratio * E_bat ] # 目标函数 cost ( cw_daily * P_w cpv_daily * P_pv ce_daily * E_bat cp_daily * P_bat cp.sum(price * p_grid) shed_penalty * cp.sum(p_shed) ) prob cp.Problem(cp.Minimize(cost), constraints) prob.solve() return prob.status, P_w.value, P_pv.value, E_bat.value, P_bat.value, prob.value status, P_w, P_pv, E_bat, P_bat, total solve_planning(cf_w, cf_pv) print(求解状态:, status) print(风机容量(kW):, round(P_w, 2)) print(光伏容量(kW):, round(P_pv, 2)) print(储能能量(kWh):, round(E_bat, 2)) print(储能功率(kW):, round(P_bat, 2)) print(总成本(元/日):, round(total, 2))代码说明P_w、P_pv是风机和光伏的额定容量E_bat是储能电池的可用电量P_bat是储能变流器功率p_ch和p_dis是每小时的充电、放电功率p_cur是弃电功率当风光出力过剩且储能充满时允许丢弃p_shed是切负荷功率加了很高的惩罚系数因此正常求解不会主动切负荷。5.3 鲁棒优化版本考虑混合不确定性时我们把风电和光伏的可用系数从点估计改为区间估计。例如假设风电系数预测误差为 15%光伏系数预测误差为 25%那么鲁棒方案取区间下界作为调度输入强制系统在最坏出力场景下依然满足负荷平衡。alpha_w 0.85 alpha_pv 0.75 cf_w_robust cf_w * alpha_w cf_pv_robust cf_pv * alpha_pv status_r, P_w_r, P_pv_r, E_bat_r, P_bat_r, total_r \ solve_planning(cf_w_robust, cf_pv_robust) print(鲁棒方案求解状态:, status_r) print(鲁棒风机容量(kW):, round(P_w_r, 2)) print(鲁棒光伏容量(kW):, round(P_pv_r, 2)) print(鲁棒储能能量(kWh):, round(E_bat_r, 2)) print(鲁棒储能功率(kW):, round(P_bat_r, 2)) print(鲁棒总成本(元/日):, round(total_r, 2))这里的处理方式属于“保守鲁棒”思路即直接取最坏区间端点参与求解。优点是模型简单缺点是没有考虑各个时段最坏情况同时发生的可能性结果可能偏保守。更精细的做法是两阶段鲁棒优化把不确定性变量留在子问题里交给求解器寻优。下面给出 CCG 算法的核心流程示意# 两阶段鲁棒优化 CCG 算法简化流程 # 实际应用时建议配合 Gurobi/Cplex 使用 def ccg_optimization(): # 初始化最坏场景集合 worst_cases [initial_case] UB float(inf) LB float(-inf) eps 1e-3 k 0 while UB - LB eps: # 1. 求解主问题在已发现的最坏场景下优化容量 x, obj_master solve_master(worst_cases) LB obj_master # 2. 求解子问题固定容量寻找新的最坏场景 u, obj_sub solve_subproblem(x) # 3. 更新上界 UB min(UB, LB obj_sub - c_constant) # 4. 把新场景加入主问题 if not is_converged(UB, LB): worst_cases.append(u) k 1 return xCCG 的收敛性和效率在国内外研究中已经得到充分验证。具体到代码实现主问题和子问题都需要显式建模并且要求求解器支持二次甚至线性目标下的稀疏矩阵运算。对于初学者建议先掌握确定性模型再逐步加入不确定性集合。5.4 运行结果解读示例输出打印结果如下不同数据和参数会得到不同数值求解状态: optimal 风机容量(kW): 42.5 光伏容量(kW): 76.3 储能能量(kWh): 36.8 储能功率(kW): 18.4 总成本(元/日): 320.5通过读取各变量值可以发现几个规律光伏容量通常大于风电容量因为示例中白天负荷较高光伏可以就地消纳储能能量和功率不是随意组合它们取决于晚高峰缺电量和缺电持续时间如果并网交互上限提高储能容量大概率下降因为电网可以承担一部分削峰填谷任务。这些都属于正常现象关键是理解模型为什么给出这样的结果而不是背下一组固定数字。6. 结果对比与协同优化价值分析6.1 确定性方案与鲁棒方案对比从模型的逻辑推演可以得出以下对比结论对比维度确定性方案鲁棒优化方案风光容量相对更小预测越乐观容量越小往往会调高风光容量或储能容量来对冲风险储能容量偏低偏高预期总成本较低较高实际运行风险存在缺电或弃电风险抗风险能力更强不确定性处理忽略误差显式建模误差区间两组方案的成本差可以理解为“鲁棒性溢价”。工程上需要结合项目实际情况选择合理的保守程度对偏远地区孤岛微电网鲁棒性要求更高对并网条件好、调度灵活的场合可以适当降低保守程度。6.2 协同优化 vs 串联式配置串联式做法通常是先按负荷峰值估算风机和光伏容量再根据夜间最大缺额配置储能最后用仿真软件验证。这种做法最大的问题在于储能容量可能在第一步已经被“锁定”了错误范围。协同优化则把储能作为待决策变量参与整体寻优储能能有效减少风光弃电也能降低晚高峰购电成本它的价值会在目标函数中自动体现。相比之下协同优化得到的结果是系统性最优而非局部最优。7. 常见问题与排查思路问题现象常见原因解决思路求解器提示模型不可行约束过强例如并网上限与切负荷惩罚不匹配检查功率平衡约束适当放开并网上限或检查 SOC 递推公式正负号储能始终不配置储能成本过高或峰谷电价差不足提高峰时电价或降低储能单位成本参数观察容量变化光伏容量结果异常偏大光伏成本低但发电时段集中弃电未被惩罚在目标中增加弃电惩罚项或限制弃电率求解时间过长时段数太多或场景数太多模型规模过大对全年数据做典型日聚类减少代表性场景数量CCG 收敛慢子问题非线性或初值场景选择不合适改用线性化手段或先用确定性结果作为初始场景运行结果出现同时充放电没有引入互补约束线性规划可能出现充电放电同时为正的数值解加入二元变量强制二选一或对充放电效率做非对称处理在实际项目中遇到不可行问题优先检查等式和边界约束尤其是储能 SOC 递推公式。SOC 初值比例和末值比例如果设置不合理会让储能“只放不充”或“只充不放”导致约束无法满足。8. 工程实践与建模建议8.1 数据质量决定模型上限容量规划模型再精细如果输入的风光资源数据不可靠结果也没有工程价值。建议优先使用当地至少一年的实测数据并做季节典型日或场景聚类。聚类后的典型日要保留负荷峰值、光伏峰值和风光低谷等极端场景不能只取平均值。8.2 不确定性参数要有依据盒式不确定集合中的上下界不能拍脑袋。一种常见做法是取历史预测误差的分位数例如过去一年中 90% 的误差不超过某个值就以该值作为区间边界。这样既保留了鲁棒性又不会过度保守。8.3 运行策略要和规划模型配套规划阶段使用的运行策略要和项目投运后的实际调度策略尽量一致。如果在规划模型中默认储能可以在每个时段随意充放电而实际调度却因为控制策略限制而无法实现那么规划结果就会偏乐观。建议在模型中预留最小充放电时间、日循环次数等工程约束。8.4 逐步递进建模不要把第一个模型写得太复杂。推荐路径是先跑确定性容量规划模型确保代码正确增加区间不确定性观察容量变化趋势再引入两阶段鲁棒优化框架最后考虑多场景、多季节、多目标扩展。这种由简到繁的方式能帮助你在每一步快速定位问题。如果直接从两阶段鲁棒开始写遇到不收敛或不可行时很难判断是模型逻辑问题还是求解器参数问题。8.5 安全与权限边界涉及生产数据或企业级微电网项目时要注意数据脱敏。任何容量配置方案在应用于实际工程前都应经过仿真平台验证和专家评审。储能系统设计还需符合本地电气安全规范不能只依赖单次优化结果。9. 总结与下一步学习路线本文围绕风光储微电网容量规划重点做了三件事第一用通俗方式解释了混合不确定性的来源和数学刻画方法第二建立了包含风机、光伏、储能容量决策与运行策略协同的规划模型第三给出了基于 Python 和 cvxpy 的可运行示例并介绍了向两阶段鲁棒优化扩展的思路。如果你刚入门建议先把 5.2 节中的确定性模型跑通修改负荷、风光系数和电价数据观察模型输出如何变化。这一步能帮你建立对“源—荷—储”协同优化的直观认识。如果你已经有建模基础下一步可以尝试两阶段鲁棒优化把不确定集合从简单的区间形式扩展为带预算约束的多面体集合并对比不同保守程度下的规划方案。还可以进一步研究风光出力的时间相关性、储能寿命衰减模型以及多微电网之间的功率共享问题。容量规划只是微电网设计的开始后续还要做运行控制、能量管理、保护配置等工作。但一个建立在混合不确定性基础上的鲁棒协同容量方案能为后续所有环节提供可靠的数据边界这也是这类研究在工程中越来越受重视的原因。
返回列表