
写这篇文章之前我其实犹豫了一下。多微网优化调度这个方向知网上的论文一抓一大把但绝大多数停留在模型很漂亮、算例很完美的层面上真正能把代码落地、把模型跑通、把结果解释清楚的内容少之又少。这篇博文想换个角度——不讲太多虚的理论重点把面向低碳经济运行目标的多微网能量互联优化调度这个题目从问题定义、数学模型、Matlab实现到结果解读一条线完整串下来。如果你正在做微电网、综合能源系统或者电力系统优化调度方向的研究正准备用Matlab实现一个多微网互联的低碳调度模型那这篇文章应该能帮你省下不少摸索的时间。1. 问题定义多微网互联到底在优化什么1.1 为什么单微网要升级为多微网互联先聊一个基础的逻辑。单个微网内部有光伏、储能、燃气轮机、负荷理论上可以自给自足但实际上运行起来很憋屈白天光照强的时候光伏出力猛增负荷却可能很低多余的电力要么送给大电网售电价格往往不划算要么被储能吃掉储能容量有限到了傍晚负荷高峰光伏出力骤降只能从大电网高价购电。这就是单微网运行的尴尬处境——发多用不完发少不够用。多微网互联解决的就是这个时空互补性问题。打个比方三个微网挨在一起A是商业区微网白天负荷高B是居民区微网晚上负荷高C是工业区微网光伏装得多。如果三个微网各干各的A白天买高价电C白天白白送电但只要拉起一条互联线路C白天的富余电力可以直接卖给AB晚上的高峰负荷可以由A的储能来支援。整体算下来大电网的购电量减少了弃光率下降了系统的运行成本和碳排放都降了——这就是能量互联的核心价值。所以这个优化调度本质上解决的是在一个由多个微网通过联络线组成的互联系统里每个时刻该怎么安排各微网内部的光伏出力、储能充放电、燃气轮机出力以及微网之间的功率交换和微网与大电网之间的购售电使得全天24小时的总运行成本最低、碳排放最少。1.2 低碳经济运行目标成本和碳怎么折中传统优化调度只盯着经济性——运行成本最小从来没算过碳排放这笔账。但现在做微网调度低碳已经是硬约束了所以目标函数里必须把碳排放放进去。问题来了成本和碳排放是两个量纲完全不同的指标一个是万元一个是吨怎么一起优化主流做法有三种。第一种是碳交易机制政府给每个微网分配碳排放配额实际碳排放低于配额的部分可以在碳市场出售获利超出部分要花钱购买这样碳排放就被折算成了经济成本直接加进目标函数里第二种是碳惩罚系数法给单位碳排放量乘一个惩罚价格加入目标函数第三种是双目标优化用帕累托前沿找出成本和碳排放的折中解但计算量偏大工程上用得不多。我在实现时选择的是碳交易机制原因很简单它和经济成本天然同量纲目标函数直接相加即可物理含义清晰而且现在国内碳市场已经实际运行了这个假设在工程上说得通。碳交易价格的典型取值在100~300元/吨配额分配方式可以做免费分配也可以做基准线法分配具体看你要研究的场景。这个选择直接决定了后面Matlab代码中目标函数的写法所以先在开头说清楚。2. 数学模型搭建目标函数与约束条件2.1 目标函数三个微网的成本和碳排放统一建模我用一个三层级的架构来描述这个系统顶层是调度中心负责全局优化中间层是各个微网通过联络线互联底层是微网内部的分布式电源、储能和负荷。决策变量我按微网分组定义每个微网m在时段t的决策变量包括燃气轮机出力 P_MT(m,t)储能充电功率 P_ch(m,t) 和放电功率 P_dis(m,t)与大电网的购电功率 P_buy(m,t) 和售电功率 P_sell(m,t)与其他微网之间的交互功率 P_ex(m,n,t)从微网m流向微网n目标函数写成min F Σ_m Σ_t [ C_fuel(m,t) C_grid(m,t) C_om(m,t) C_carbon(m,t) - C_sell(m,t) ]其中各项的含义拆开来说。C_fuel是燃气轮机的燃料成本通常表示为出力的二次函数C_fuel a * P_MT^2 b * P_MT c但在Matlab里处理二次函数对求解器有要求Cplex能处理linprog不行。为了用线性规划求解我一般做分段线性化处理或者直接用线性近似——毕竟燃气轮机在微网里通常是基荷运行出力范围不大线性近似的误差完全可接受。C_grid是向大电网购电的成本就是分时电价乘以购电量典型的分时电价设置是峰时1.1元/kWh、平时0.6元/kWh、谷时0.3元/kWh。C_sell是向大电网售电的收入售电电价通常比购电电价低比如统一按0.3元/kWh这样微网才没有低买高卖赚差价的套利空间。C_om是运行维护成本光伏、储能、燃气轮机都有维护费用单位电量的维护成本乘上各自的出力即可数值不大但必须纳入模型因为这会影响到光伏和储能的使用意愿。C_carbon是碳交易成本也就是前面说的低碳目标落地的关键项。计算公式是C_carbon λ * ( E_total - E_quota )其中λ是碳交易价格E_total是系统总碳排放E_quota是碳配额。总碳排放包括两个来源从大电网购电对应的间接碳排放购电量乘以电网碳排放因子和燃气轮机发电的直接碳排放天然气消耗量乘以碳排放因子。这里有个细节值得注意如果总碳排放低于配额C_carbon就是负值等于系统通过低碳运行赚到了卖碳的钱。2.2 约束条件功率平衡、储能状态与联络线限制模型的核心约束有四组我在写代码时最常被问到的就是约束太多求解器报错所以这部分的逻辑要理清楚。第一组是各微网内部的功率平衡约束这是硬约束中的硬约束P_PV(m,t) P_MT(m,t) P_dis(m,t) P_buy(m,t) Σ_n P_ex(n,m,t) P_load(m,t) P_ch(m,t) P_sell(m,t) Σ_n P_ex(m,n,t)这个式子的含义很简单微网m在时刻t的所有电能输入等于所有电能输出。很多初学者在这里容易搞混微网间交互功率的方向我建议统一约定P_ex(m,n,t)表示从m流向n的功率那么对微网m来说流出到其他微网的Σ P_ex(m,n,t)是负荷项从其他微网流入的Σ P_ex(n,m,t)是电源项。第二组是储能系统的约束包括充放电功率上限、SOC状态更新和SOC上下限0 ≤ P_ch(m,t) ≤ u_ch(m,t) * P_ch_max 0 ≤ P_dis(m,t) ≤ u_dis(m,t) * P_dis_max u_ch u_dis ≤ 1不能同时充放电 SOC(m,t1) SOC(m,t) (P_ch * η_ch - P_dis / η_dis) * Δt / E_bat SOC_min ≤ SOC(m,t) ≤ SOC_max这里容易出问题的是SOC更新公式里的效率系数。我见过不少代码把充电效率直接乘在功率上结果SOC的数值怎么算都不对。记住关键一点充电时是存进去的电量除以储能容量所以SOC增加量 P_ch * η_ch * Δt / E放电时是放出来的电量除以储能容量所以SOC减少量 P_dis / η_dis * Δt / E。效率η_ch和η_dis的典型值都在0.9~0.95之间。第三组是联络线功率约束包括微网与大电网之间的购售电约束以及微网之间的交互功率约束0 ≤ P_buy(m,t) ≤ u_buy * P_buy_max 0 ≤ P_sell(m,t) ≤ u_sell * P_sell_max u_buy u_sell ≤ 1 -P_ex_max ≤ P_ex(m,n,t) ≤ P_ex_max购售电不能同时进行这个逻辑和储能充放电不能同时进行是一样的否则模型会利用电价差做无意义的套利。微网间交互功率的上下限一般取联络线容量比如500kW。第四组是燃气轮机的出力上下限和爬坡约束P_MT_min ≤ P_MT(m,t) ≤ P_MT_max -ΔP_MT ≤ P_MT(m,t1) - P_MT(m,t) ≤ ΔP_MT爬坡约束很多初学者会忘但实际系统中燃气轮机不可能瞬间从0跳到满发必须考虑这个物理限制。2.3 模型中的关键参数设置与数据准备模型要想跑出合理的结果参数设置必须贴近实际。我的习惯是先建立一个基础参数表再根据研究目标微调。光伏出力数据可以用某地夏季典型日的实际数据也可以根据光照强度模型生成。如果是做案例研究我常用Matlab的rand函数生成一组带波动性的光伏出力曲线再用smoothdata做一下平滑处理模拟出力波动。负荷数据一般用典型日负荷曲线同样可以按实际数据或合成数据。燃气轮机参数额定功率350kW最小出力70kW20%额定爬坡速率60kW/h燃料成本系数取a0.002、b0.18、c0单位按元/kWh换算碳排放因子0.2kg/kWh。储能参数容量500kWh最大充放电功率100kW效率η_chη_dis0.92SOC范围0.1~0.9初始SOC取0.3。电网交互参数购电价采用峰平谷三段分时电价峰时(10~15, 18~21时)为1.0元/kWh平时(7~10, 15~18, 21~23时)为0.6元/kWh谷时(23~次日7时)为0.3元/kWh售电价统一为0.35元/kWh。购电碳排放因子0.9kg/kWh。碳交易参数配额可以按每个微网负荷的某个比例分配比如配额 负荷量 * 0.8 * 0.9kg表示允许80%的用电量按电网平均碳排放水平排放碳价取150元/吨。网络流行的话语