含风电-光伏-光热电站电力系统N-k安全优化调度模型 关键词:N-K安全约束 光热电站 优化调度 参考文档:参考《光热电站促进风电消纳的电力系统优化调度》光热电站模型; 仿真软件: matlab+yalmip+cplex(gurobi) 研究内容:代码主要做的是考虑N-k安全约束的含义风电-光伏-光热电站的电力系统优化调度模型,从而体现光热电站在调度灵活性以及经济性方面的优势。 同时代码还考虑了光热电站对风光消纳的作用,对比了含义光热电站和不含光热电站下的弃风弃光问题,同时还对比了考虑N-k约束下的调度策略区别。 以14节点和118节点算例为例,对模型进行了系统性的测试,复现效果良好,是学习N-k约束以及光热电站调度的必备程序 注意事项:代码注释详细,软件模块运行稳定,仿真结果如下截图所示
风电和光伏的波动性让电力系统调度头疼不已,这时候光热电站带着它的"充电宝"属性进场了。今天咱们就拆解一个含N-k安全约束的风光光热联合调度模型,顺便看看怎么用Matlab+YALMIP把这事儿给撸明白了。
先说说N-k安全约束这个硬核概念。简单来说就是系统在任意k个元件故障时还能保持稳定运行。在代码里,我们得给所有可能的故障组合上保险。比如处理线路N-1约束时,得把每条线路断开的场景都遍历一遍。这里有个取巧的写法:
for cont = 1:num_lines P_line_post = P_line; P_line_post(cont,:) = 0; % 把第cont条线路功率置零 Constraints = [Constraints, -line_limit <= P_line_post <= line_limit]; end这种向量化操作比写多重循环清爽多了,特别是处理118节点这种大系统时,省下的计算时间够泡两杯咖啡。
光热电站的建模是重头戏。它的牛掰之处在于既能像火电那样调节,又能储能。参考那篇文献,我们把集热场、储热罐、汽轮机三个部分拆开建模:
% 光热电站决策变量 CSP_collect = sdpvar(T,1); % 集热功率 CSP_storage = sdpvar(T,1); % 储热状态 CSP_generate = sdpvar(T,1); % 发电功率 % 能量守恒约束 Constraints = [Constraints, CSP_storage(2:end) == CSP_storage(1:end-1) + CSP_collect(2:end) - CSP_generate(2:end)/0.4];注意最后那个0.4是热电转换效率,这个参数直接关系到光热电站的"档位切换"速度。在实际系统中,这个值的高低决定了光热电站能不能及时吃掉突增的风电。
目标函数里藏着调度模型的灵魂:
Objective = sum(coal_cost.*P_coal) + 1000*sum(spill_wind) + 800*sum(spill_pv);1000和800这两个惩罚系数设置是门艺术。设低了系统会无脑弃风弃光,设高了可能影响常规机组经济运行。建议的做法是先跑几轮试算,看看弃风率的拐点在哪。
当我们在118节点系统测试时,发现个有趣现象:加上N-1约束后,光热电站的调度模式从"跟风光走"变成了"看线路脸色"。比如这段线路越限判断:
line_loading = P_line ./ line_limit * 100; if max(line_loading) > 85 % 触发安全约束调整 CSP_generate(t) = CSP_generate(t) + (max(line_loading)-85)*0.2; end这种动态调整策略让光热电站成了系统里的"消防员",哪里有过载风险就往哪调度。
最后上点干货对比:在同一个风电出力尖峰时段,不含光热的系统弃风率高达18.7%,而光热接入后压到6.3%。更骚的是,光热机组通过储热把晚高峰的光伏出力挪到了夜间风电低谷时段用,相当于自带了一个时间平移buff。
代码里有个防坑指南必须提:处理储热罐的爬坡约束时,千万别直接用diff()函数,会出时间对齐问题。正确姿势是:
for t = 2:T Constraints = [Constraints, -ramp_rate <= CSP_storage(t)-CSP_storage(t-1) <= ramp_rate]; end这种逐个时间步的处理虽然代码量多点,但避免了很多诡异的越限bug。
跑完仿真最大的感触是:光热电站就像电力系统的瑞士军刀——风光出力大时它是充电宝,线路吃紧时它是稳压器,还要兼职做备用的搬运工。这种灵活性在N-k安全约束下尤其珍贵,毕竟多一个灵活调节单元,就少建一条备用线路的成本。