程序参考文献:《Virtual power plant mid-term dispatch optimization》参考其燃气轮机、以及储能部分模型,另外随机优化算法和该文档一致;《交直流混合配电网多阶段随机优化调度模型》,主要参考其随机优化模型和相关数据。程序中算例丰富,注释清晰,干货满满,下面对文章和程序做简要介绍!
仿真平台:MATLAB+Yalmip+Cplex
程序主要做的是一个虚拟电厂OR微电网OR综合能源系统的日前优化调度模型(模型具有较强的适应性,仿真对象可以随意调换),考虑了光伏出力和负荷功率的双重不确定性,采用随机规划法处理不确定性变量。
优化调度结果:
部分程序:
%% 非预期运行约束,随机优化的核心
for p=1:5
for f=1:5
for t=1:24
C=[C,
umospf(p,f,t)==umos(t),
umobpf(p,f,t)==umob(t),
pmgbpf(p,f,t)==pmgb(t),
pmgspf(p,f,t)==pmgs(t),
xconvpf(p,f,t)==xconv(t),
yconvpf(p,f,t)==yconv(t),
pmtpf(p,f,t)==pmt(t),
gescpf(p,f,t)==gesc(t),
gesdpf(p,f,t)==gesd(t),
sesspf(p,f,t)==sess(t),
];
end
end
end
%% 计算随机调度燃气轮机运行的成本
for t=1:24
f2(t)=0.2*sum(0.2*(a*xconvpf(1,:,t)+kcp*pmtpf(1,:,t)+yconvpf(1,:,t)*sconv))+...
0.2*sum(0.2*(a*xconvpf(2,:,t)+kcp*pmtpf(2,:,t)+yconvpf(2,:,t)*sconv))+...
0.2*sum((0.2*a*xconvpf(3,:,t)+kcp*pmtpf(3,:,t)+yconvpf(3,:,t)*sconv))+...
0.2*sum(0.2*(a*xconvpf(4,:,t)+kcp*pmtpf(4,:,t)+yconvpf(4,:,t)*sconv))+...
0.2*sum(0.2*(a*xconvpf(5,:,t)+kcp*pmtpf(5,:,t)+yconvpf(5,:,t)*sconv)),
end
%% %% 计算随机调度市场购售电的成本
for t=1:24
f1(t)=0.04*sum((pmgbpf(1,:,t).*xb(t)-pmgspf(1,:,t).*xs(t)))+...
0.04*sum((pmgbpf(2,:,t).*xb(t)-pmgspf(2,:,t).*xs(t)))+...
0.04*sum((pmgbpf(3,:,t).*xb(t)-pmgspf(3,:,t).*xs(t)))+...
0.04*sum((pmgbpf(4,:,t).*xb(t)-pmgspf(4,:,t).*xs(t)))+...
0.04*sum((pmgbpf(5,:,t).*xb(t)-pmgspf(5,:,t).*xs(t))),
end
%% 费用计算
F21=sum(f2)%燃气轮机费用
F11=sum(f1);%购售电费用
F2=sum(a*xconv+kcp*pmt+yconv*sconv)%燃气轮机费用
F1=sum(pmgb.*xb-pmgs.*xs);%购售电费用
F=F21+F11
ops=sdpsettings('solver','cplex','verbose',2,'usex0',0);
ops.cplex.mip.tolerances.mipgap=1e-6;
result=optimize(C,F,ops);
if result.problem == 0 % problem =0 代表求解成功
else
error('求解出错');
end
程序采用蒙特卡洛算法对预测的光伏以及负荷曲线进行场景生成,利用概率距离快速消除法进行削减,直至削减至5个场景,然后采用随机调度的方法,对多场景下的虚拟电厂调度策略进行优化,程序实现效果良好!
场景生成结果:
%% 光伏场景生成以及削减
%生成负荷场景并削减%
%负荷出力预测均值E
Ww=[0 0 0 0 0 0 3.8 3.9 4.5 5.2 6.5 7.3 7.4 7.2 7.4 6.5 5.5 4.8 0 0 0 0 0 0];
% Ww=[0,0,0,0,0,1,2.5,4,5,5.5,5.8,5.7,5.5,5.3,5.1,5,3.8,2.5,1.2,0,0,0,0,0];
W=0.3*Ww
%取标准差为负荷出力预测值E的5%-20%,这里x=E*10%
l=W*0.1;
Ws=[];
%生成一个负荷场景,E+x*randn(1,24),其中randn(1,24)为生成随机数的标准正态分布
m=200; %生成m个场景
for i=1:m
s=W+l.*randn(1,24);
Ws=[Ws;s];
end
%不断削减场景,直到剩余5个场景
while(k>5)
d=find(y==min(y)); %选定与剩余场景的概率距离之和最小的场景
x_2=x+100*eye(k); %构造新的x,以便找出风电场景Ws中与场景d几何距离最小的场景r
r=find(x_2(d,:)==min(x_2(d,:)));
pi(r)=pi(r)+pi(d); %将d场景的概率加到r场景上
%在负荷场景中删除d场景
pi(d)=[];
Ws_d(d,:)=[];
x(d,:)=[];
x(:,d)=[];
y(d)=[];
k=length(y);
end
以上就是本次介绍的主要内容,欢迎感兴趣的小伙伴关注并后台留言获取完整版代码,小编会继续推送更有质量的学习资料、文章和程序代码,为您的科研加油助力!