基于數據驅動的綜合能源系統多場景兩階段分布式魯棒優化模型
魯棒優化是應對數據不確定性的一種優化方法,但單階段魯棒優化過于保守。為了解決這一問題,引入了兩階段魯棒優化(Two-stage Robust Optimization)以及更一般的多階段魯棒優化,其核心思想是將決策問題分為兩個階段。第一階段是進行初步決策,第二階段是根據第一階段的決策結果制定更好的決策策略,應對數據不確定性的影響。這種方法可以降低保守性,提高魯棒性。
兩階段魯棒優化模型在含有風電、光伏、儲能的綜合能源系統以及主動配電網中均得到了很多應用。本文采用基于數據驅動的分布魯棒方法處理了?DG?和負荷的不確定性。
優化模型:
一、程序目標函數:
第一階段
Cs是啟停成本系數,一階段目標是微燃機啟停成本,u代表發電機狀態變量。
第二階段
分別是電網購電成本、發電機運行成本、蓄電池老化成本(或者運維)、棄風和棄光成本。
模型包含以下約束:
約束1:微燃機出力約束
約束2:爬坡約束。
約束3:儲能充放電約束
約束4:儲能初始能量和最終能量一致
約束5:儲能soc范圍約束
約束6.電功率平衡約束
約束7.熱功率平衡
二、部分程序實例:
%function [p_wt,p_pv,p_load,x,UB,p_ch,p_dis,p_g,p_buy,p_sell]=SP2(ee_bat_int, p_wt_int,p_pv_int,p_g_int,LB,yita)%決策變量% p_ch=sdpvar(24,4);p_dis=sdpvar(24,4);p_gl=sdpvar(24,4);%uu_ch=binvar(24,4);uu_dis=binvar(24,4);uu_m=binvar(24,4);%充放電狀態、發電機狀態% p_buy=sdpvar(24,4);%購電變量% p_wt=sdpvar(24,4);p_pv=sdpvar(24,4);%實際參與風、光% p_g=sdpvar(24,4);%不確定性變量psp=sdpvar(1,4);psd=sdpvar(1,4);sigmap=binvar(1,4);sigmad=binvar(1,4);ps=sdpvar(1,4);u_g=[uu_m(:,1)' uu_m(:,2)' uu_m(:,3)' uu_m(:,4)'];u_ch=[uu_ch(:,1)' uu_ch(:,2)' uu_ch(:,3)' uu_ch(:,4)'];u_dis=[uu_dis(:,1)' uu_dis(:,2)' uu_dis(:,3)' uu_dis(:,4)'];%風光出力和電價(以春季典型日為例)ps0=[22.7; 15.6; 38.05; 23.65]./100;%場景概率price=[0.48 0.48 0.48 0.48 0.48 0.48 0.48 0.9 1.35 1.35 1.35 0.9 0.9 0.9 0.9 0.9 0.9 0.9 1.35 1.35 1.35 1.35 1.35 0.48];%電價constraints=[];%約束開始load=p_l';%不確定約束constraints=[constraints,sum(psp+psd)<=theta1];constraints=[constraints,psp+psd<=thetaw];constraints=[constraints,sigmap+sigmad<=1];constraints=[constraints,0<=psp<=sigmap*theta1];constraints=[constraints,0<=psd<=sigmad*theta1];constraints=[constraints,ps==ps0'+psd+psp];lam1=sdpvar(96,1);lam11=sdpvar(96,1);lam12=sdpvar(96,1);lam120=sdpvar(96,1);lam2=sdpvar(192,1);lam21=sdpvar(192,1);lam3=sdpvar(4,1);lam4=sdpvar(96,1);lam41=sdpvar(96,1);lam5=sdpvar(96,1);lam51=sdpvar(96,1);lam6=sdpvar(96,1);%設定對偶變量beta1=sdpvar(96,1);beta11=sdpvar(96,1);beta12=sdpvar(96,1);beta120=sdpvar(96,1);beta2=sdpvar(192,1);beta21=sdpvar(192,1);beta3=sdpvar(4,1);beta4=sdpvar(96,1);beta41=sdpvar(96,1);beta5=sdpvar(96,1);beta51=sdpvar(96,1);beta6=sdpvar(96,1);beta7=binvar(672,1);beta8=binvar(288,1);%大m條件中的01變量x=[];P=[];pw=[];pv=[];for i=1:4x=[x,p_buy(:,i)' p_g(:,i)' p_ch(:,i)' p_dis(:,i)' p_gl(:,i)' p_wt(:,i)' p_pv(:,i)'];%x變量% P=[P,ps(i).*price ps(i)*cg.*ones(1,24) ps(i)*ccn.*ones(1,48) zeros(1,24) -ps(i)*cq.*ones(1,48)];P=[P,price cg.*ones(1,24) ccn.*ones(1,48) zeros(1,24) -cq.*ones(1,48)];pw=[pw,ps(i).*p0_wt(:,i)'];pv=[pv,ps(i).*p0_pv(:,i)'];endx=x';%下面相關的計算參數和參考資料一致%B=repmat([c_wt_om.*ones(1,24) c_pv_om.*ones(1,24) zeros(1,24)]',1,4);Q1=[zeros(24,24) eye(24) zeros(24,120) zeros(24,504);zeros(24,168) zeros(24,24) eye(24) zeros(24,120) zeros(24,336);zeros(24,336) zeros(24,24) eye(24) zeros(24,120) zeros(24,168);zeros(24,504) zeros(24,24) eye(24) zeros(24,120)];lint=zeros(tn);for i=1:tn-1lint(i,i)=-1;lint(i,i+1)=1;endlint(tn,tn)=-1;lint(tn,1)=1;obj_sp=-sum(Cz'.*ps);ops=sdpsettings('solver','gurobi');reuslt=optimize(constraints,obj_sp,ops);%ops.cplex.exportmodel='abcd.lp';%obj_o=double(obj_o);%p_ch=double(p_ch);p_dis=double(p_dis);p_buy=double(p_buy);;p_g=double(p_g);ps=value(ps);Q=value(obj_sp);UB1=LB-yita-Q;
運行結果:
兩階段分布式優化模型代碼詳情見原文:
https://mp.weixin.qq.com/s/WLhU1032VCM-YYJtQClurw