开源代码分享(23)-基于混合整数二阶锥规划(MISOCP)的主动配电网最优潮流计算

参考文献:

  • [1]乔珊. 主动配电网多源协同运行优化研究[D]. 山东大学, 2021. 
  • [2]高红均,刘俊勇,沈晓东,等. 主动配电网最优潮流研究及其应用实例 [J]. 中国电机工程学报, 2017, 37 (06): 1634-1645. DOI:10.13334/j.0258-8013.pcsee.152839.

1.引言

        主动配电网技术的发展已成为大势所趋,如何协调主动配电网中的各元件进行协同和优化,使可再生能源充分被消纳,是亟待解决的问题。本文针对主动配电网中的主要组成部分,包括分布式电源、储能系统、电动汽车、无功补偿装置等,分析其出力特性及可调潜力,对其进行数学建模,从保障配电网安全稳定运行角度出发,尽量降低运行成本,构建多时间尺度优化调度模型。在优化调度过程中,在满足经济效益最优的同时实现对分布式电源出力的最大化消纳,尽量缩减潮流分布的峰谷差,实现“源”、“荷”、“储”的多方面协同优化运行。

2.主动配电网模型

        在主动配电网框架下,主动管理包括: 1)OLTC调节;2)无功装置调节,包括离散无功补偿和连续无功调节;3)有功调节,包括储能调节以及电动汽车调节;4)分布式电源自身调节。同样,需求响应作为主动配电网的重要参与元素也应充分利用。此外,为适应模型的通用性,文中也增加了综合负荷模型。由于最优潮流的目标函数基本为线性或二次形式,二次形式也能通过分段线性等方式进行转化,且效果均较满意,因此本文主要侧重于对各主动管理设备相关的约束条件进行线性建模处理。此外根据文献[2]知,网络灵活性在主动配电网规划运行中举足轻重,其主要思想为网络重构(开关调节)。本文对网络重构相关约束限制也进行了探讨,如辐射性约束等。

2.1 OLTC建模

2.2 无功调节装置建模

2.3 储能装置建模

        电动汽车作为一种新的主动管理手段 ,得到了广泛的研究。由于充放 电功率也仅为有功功率, 其基本模型与 ESS基本类似,只是每个节点连接有大量的可控电动汽车,因此,对于配 电网各母线节点的等效注入功率可表征为所有单个电动汽车的聚类效果。

2.4 分布式电源建模

2.5 需求响应、综合负荷等建模

        需求响应作为用户侧主动管理方式在很多文献中进行了研究,如文献[2],将需求响应分为基于电价的响应模式和基于激励的响应模式,无论采用何种方式,其对电网的作用仍可表征为节点注入功率的增量,即:

        上式为最简单的负荷响应与电网交互方式,认为无功等比例变化于有功功率,实际上,无功需求也是一个较为复杂的问题,本文不予讨论。

3.运行结果展示

4.matlab代码

%多时段+SVC+CB+OLTC+DG SOCP_OPF   Sbase=1MVA,   Ubase=12.66KV
%目标函数如果只有网损,那么OLTC永远是高挡位,电压越高,网损越小,因此需进一步考虑目标函数如主网购电,或者电压平衡          

%%
%有载调压变压器的位置在那个节点

%%
clear 
clc 
tic 
warning off
%% 1.设参
mpc = IEEE33BW;
wind = mpc.wind;    
pload = mpc.pload;    
pload_prim = mpc.pload_prim/1000;  %化为标幺值
qload_prim = mpc.qload_prim/1000;
a = 3.715;   %单时段所有节点有功容量,MW
b = 2.3;     %单时段所有节点无功容量,MW
pload = pload/a;%得到各个时段与单时段容量的比例系数
qload = pload/b;%假设有功负荷曲线与无功负荷变化曲线相同
pload = pload_prim*pload;   %得到33*24的负荷值,每一个时间段每个节点的负荷
qload = qload_prim*qload;      

branch = mpc.branch;       
branch(:,3) = branch(:,3)*1/(12.66^2);%求阻抗标幺值      
R = real(branch(:,3));            
X = imag(branch(:,3));             
T = 24;%时段数为24小时             
nb = 33;%节点数            
nl = 32;%支路数           
nsvc = 3;%SVC数      静止无功补偿器 Static Var compensator
ncb = 2;%CB数        分组投切电容器组 (capacitorbanks,CB)
noltc = 1;%OLTC数    有载调压变压器 ( on—load tap changer,OLTC )  transformer   
nwt = 2;%2个风机     
ness = 2;%ESS数      
upstream = zeros(nb,nl);
dnstream = zeros(nb,nl);
for i = 1:nl
    upstream(i,i)=1;
end
for i = [1:16,18:20,22:23,25:31]
    dnstream(i,i+1)=1;
end
dnstream(1,18) = 1;
dnstream(2,22) = 1;
dnstream(5,25) = 1;
dnstream(33,1) = 1;
Vmax = [1.06*1.06*ones(nb-1,T)
        1.06*1.06*ones(1,T)];
Vmin = [0.94*0.94*ones(nb-1,T)
        0.94*0.94*ones(1,T)];%加入变压器后,根节点前移,因此不是恒定值1.06
Pgmax = [zeros(nb-1,T)
         5*ones(1,T)];
Pgmin = [zeros(nb-1,T)
         0*ones(1,T)];
Qgmax = [zeros(nb-1,T)
         3*ones(1,T)];
Qgmin = [zeros(nb-1,T)
         -1*ones(1,T)];
QCB_step = 100/1000;       %单组CB无功,100Kvar 转标幺值     
%% 2.设变量
V = sdpvar(nb,T);%电压的平方
I = sdpvar(nl,T);%支路电流的平方
P = sdpvar(nl,T);%线路有功(是不是平方我就不清楚了,应该不是)
Q = sdpvar(nl,T);%线路无功
Pg = sdpvar(nb,T);%发电机有功
Qg = sdpvar(nb,T);%发电机无功
theta_CB = binvar(ncb,T,5); %CB档位选择,最大档为5
theta_IN = binvar(ncb,T);%CB档位增大标识位
theta_DE = binvar(ncb,T);%CB档位减小标识位   

q_SVC = sdpvar(nsvc,T);%SVC无功    
p_wt = sdpvar(nwt,T);%风机有功     


p_dch = sdpvar(ness,T);   %ESS放电功率
p_ch = sdpvar(ness,T);   %ESS充电功率
u_dch = binvar(ness,T);%ESS放电状态
u_ch = binvar(ness,T);%ESS充电状态
E_ess = sdpvar(ness,25);%ESS的电量,这个25的原因要搞懂才能理解储能一天开始结束时刻(首末)功率相等的意思   

r1 = sdpvar(noltc,T);     
theta_OLTC = binvar(noltc,T,12);%OLTC档位选择,最大档为12
theta1_IN = binvar(noltc,T);%OLTC档位增大标识位
theta1_DE = binvar(noltc,T);%OLTC档位减小标识位
%% 3.设约束
C = [];        

.....省略......

%% 4.设目标函数
objective = sum(Pg(33,:))  +  0.3*sum(sum(I.*(R*ones(1,T))));   %子配电网向主网购电量 + 0.3*子配电网有功损耗
toc%建模时间
%% 5.设求解器
ops = sdpsettings('verbose', 1, 'solver', 'cplex');
ops.cplex= cplexoptimset('cplex');%这两句修改收敛间隙,使MIP问题跑的更快,酌情使用
ops.cplex.mip.tolerances.absmipgap = 0.01;

sol = optimize(C,objective,ops);

objective = value(objective)

toc%求解时间
% clear branch C dnstream upstream i kk mpc nb nl ncb ness noltc npv nwt nsvc...
%       QCB_step ops Pgmax Pgmin pload qload t T theta_DE theta_IN ...
%       Vmax Vmin R X P_ch P_dch P_pv P_wt Q_SVC Qgmax Qgmin Pin Qin...
%       Q_CB k r rjs theta1_DE theta1_IN 

%% 6.分析错误标志
if sol.problem == 0
    disp('succcessful solved');
else
    disp('error');
    yalmiperror(sol.problem)
end



% B = [1 2 3 ;
%     4 5 6 ;
%     7 8 9 ]
V = value(V);        
% for  i = 1 : 33   
%      VV(24*i - 23 : 24*i)   =  V(i,: );   
%      XX(24*i - 23 : 24*i) =   i;
%      YY(24*i - 23 : 24*i ) =  1:24;
% end  
% plot3(XX,YY,VV,'*');
figure(1)
[XX,YY] =meshgrid(1:24,1:33 );
mesh(XX,YY,V);
xlabel('时刻(h)');
ylabel('节点序号');
zlabel('电压幅值(pu)');
title('24小时节点电压图');

figure(2)
[XX,YY] =meshgrid(1:24,1:33 );
mesh(XX,YY,pload);     % pload需要进一步归算(利用pload_prim,a,b反推 )
xlabel('时刻(h)');
ylabel('节点序号');
zlabel('有功负荷(pu)');
title('24小时有功负荷图');

figure(3)
[XX,YY] =meshgrid(1:24,1:33 );
mesh(XX,YY,qload);
xlabel('时刻(h)');
ylabel('节点序号');
zlabel('无功负荷(pu)');
title('24小时无功负荷图');


figure(4)
p_wt= value(p_wt);
plot(wind,'k-*');
hold on 
plot(p_wt',':ro');
xlabel('时刻(h)');
ylabel('风机出力(pu)');
title('24小时风机出力图');


figure(5)
k= value(k);
Q_cb= value(Q_cb);
plot(Q_cb(1,:));
hold on 
plot(Q_cb(2,:));
xlabel('时刻(h)');
ylabel('无功补偿电容器组CB出力(pu)');
title('24小时无功补偿电容器组CB出力图');


figure(6)
q_SVC = value(q_SVC);    
plot(q_SVC(1,:));
hold on 
plot(q_SVC(2,:));
hold on 
plot(q_SVC(3,:));
xlabel('时刻(h)');
ylabel('静止(连续)无功补偿电容器SVC出力(pu)');
title('24小时静止(连续)无功补偿电容器SVC出力图');


figure(7)
r1 = value(r1);    
plot(r1);
xlabel('时刻(h)');
ylabel('有载调压变压器OLTC变比(pu)');
title('24小时有载调压变压器OLTC变比图');


% p_dch = sdpvar(ness,T);   %ESS放电功率                
% p_ch = sdpvar(ness,T);   %ESS充电功率               
BA_dch = value(p_dch)*1.11;     
BA_ch = value(p_ch)*0.9;    
% BA_dch = value(p_dch);     
% BA_ch = value(p_ch);    
BA1 = BA_ch(1,:) - BA_dch(1,:);
BA2 = BA_ch(2,:) - BA_dch(2,:);
figure(8)  
plot(BA1,'-*');
hold on
plot(BA2,'-o');
xlabel('时刻(h)');
ylabel('ESS电池充放电功率(pu)');     
title('24小时ESS电池充放电功率图');       
BA1_P_Sum=sum(BA1);             
BA2_P_Sum=sum(BA2);  


E_ess=value(E_ess);
figure(9)
plot(E_ess','-o');
xlabel('时刻(h)');
ylabel('ESS电池电量Soc(pu)');     
title('24小时ESS电池电量Soc图');     

        以上仅为部分matlab代码,完整代码获取方式如下:

开源代码分享(23)-基于混合整数二阶锥规划(MISOCP)的主动配电网最优潮流matlab代码资源-CSDN文库

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

配电网和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值