二阶锥潮流Distfolw(OPF)
最优潮流问题(OPF)引言本文将介绍以下几点内容:1.什么是最优潮流。2.什么直流潮流,什么是交流潮流。3.支路潮流法的相角松弛。4.支路潮流法的二阶锥松弛。5.支路潮流法的适用范围。6.举于matlab的代码实现。正文什么是最优潮流?有学过电力系统分析的同学,对这个概念都有了解。一言以蔽之,就是通过调整发电机出力,电容器投入退出等操作,使得电力系统网络发生改变。以达到发电成本最低,或者网络损耗最
·
二阶锥潮流Distfolw(OPF)
引言
本文将介绍以下几点内容:
1.什么是最优潮流。
2.什么直流潮流,什么是交流潮流。
3.支路潮流法的相角松弛。
4.支路潮流法的二阶锥松弛。
5.支路潮流法的适用范围。
6.举于matlab的代码实现。
正文
什么是最优潮流?
有学过电力系统分析的同学,对这个概念都有了解。一言以蔽之,就是通过调整发电机出力,电容器投入退出等操作,使得电力系统网络潮流发生改变。以达到发电成本最低,或者网络损耗最低。
什么是直流潮流,什么是交流潮流?
由于正常写出得交流潮流方程组是非凸的,所以要对其进行一定的松弛才能保证模型可解。在输电网中由于电阻远小于电抗,因此松弛过程中忽略了,电阻的影响,也不考虑无功分布的影响,因此把这种松弛后的潮流方程叫做直流潮流。在配电网中电阻与电抗接近,因此不能忽略电阻的影响,同时考虑电阻和电抗的影响的潮流方程叫做交流潮流。具体的,更详细的定义,建议查看专业书籍。.
支路潮流法的推导过程
适用的例子
U_B=12.66*10^3;%额定电压为12.66kV
S_B=100*10^6;%转换为标幺值
I_B=S_B/(1.73*U_B); %带有根号3
MAX_I=100/I_B;%每条支路的最大电流为100A
_B = U_B ^ 2 / S_B;
D_G = xlsread('IEEE32', '分布式电源信息'); %第一列为分布式电源所在位置,第二列为有功出力上限,第三列为无功出力上限(kW,kVar)
Banch_info = xlsread('IEEE32', '系统支路信息'); %一二列为首端节点和末端节点,三四列为电阻和电抗
Nodes_load = xlsread('IEEE32', '系统节点信息'); %第一列表示节点,第二三列表示有功无功负荷(kW,kVar)
D_G(:,2:3)=10^3*D_G(:,2:3)./S_B;
Banch_info(:,3:4)=Banch_info(:,3:4)./Z_B;
Nodes_load(:,2:3)=10^3*Nodes_load(:,2:3)./S_B;
error = 0.05; %电压允许的波动范围
V = sdpvar(32, 1, 'full'); %节点电压
l = sdpvar(31, 1, 'full'); %支路电流
P_G = sdpvar(8, 1, 'full'); %分布式电源有功出力
Q_G = sdpvar(8, 1, 'full'); %分布式电源无功出力
P_line = sdpvar(31, 1, 'full'); %线路有功潮流
Q_line = sdpvar(31, 1, 'full'); %线路无功潮流
%%----------约束------------%
st = [];
%功率平衡约束
for j = 1 : 32
[r_out, ~] = find(Banch_info(:, 1) == j); %找出从节点j流出的功率,P_line_jx;
[r_in, ~] = find(Banch_info(:, 2) == j); %找出流入节点j的功率,P_line_xj;
[r_G, ~] = find(D_G(:, 1) == j);
st = [st, -Nodes_load(j, 2)== sum(P_line(r_out)) - sum(P_line(r_in) -Banch_info(r_in, 3) .* l(r_in)) - sum(P_G(r_G))];
st = [st, -Nodes_load(j, 3) == sum(Q_line(r_out)) - sum(Q_line(r_in) -Banch_info(r_in, 4) .* l(r_in)) - sum(Q_G(r_G))];
end
%电压约束
for j = 1 : 32
if j == 1
st = [st, V(j) ==1]; %选择平衡节点
else
[r_in, ~] = find(Banch_info(:, 2) == j); %找出以为节点j作为末端节点,首段节点
st = [st, V(j) == V(Banch_info(r_in, 1)) - 2 .* (Banch_info(r_in, 3) .* P_line(r_in) + Banch_info(r_in, 4) .* Q_line(r_in)) + (Banch_info(r_in, 3) .^ 2 + Banch_info(r_in, 4) .^ 2) .* l(r_in)];
end
end
%二阶锥松弛
for j = 1 : 32
[r_in, ~] = find(Banch_info(:, 2) == j); %找出以为节点j作为末端节点,首段节点
st = [st, norm([2 .* P_line(r_in); 2 .* Q_line(r_in); (V(j) - l(r_in))], 2) <= V(j) + l(r_in)];
end
%电压约束
for j = 1 : 32
st = [st, (1 - error) ^ 2 <= V(j) <= (1 + error) ^ 2];
end
%功率上下界约束
for j = 1 : 8
st = [st, 0 <= P_G(j) <= D_G(j, 2), 0 <= Q_G(j) <= D_G(j, 3)];
end
%电流的上下界
for j = 1 : 31
st = [st, 0 <= l(j) <= MAX_I ^ 2];
end
% %%----------目标函数---------%%
% %%最小网损
obj = 0;
for j = 1 : 32
[r_in, ~] = find(Banch_info(:, 2) == j); %找出流入节点j的功率,P_line_xj;
obj = obj + sum(Banch_info(r_in, 3) .* l(r_in));
end
%%---------求解------------%%
ops = sdpsettings('solver', 'gurobi');
[model,recoverymode,diagnostic,interalmodel]=export(st,obj);
result = solvesdp(st, obj, ops);
value(obj)
求解的软件是matlab+yalmip+gurobi。
支路潮流法适用于辐射状的网络。
相应的节点参数会上传到资源库,供大家免费下载
更多推荐
已为社区贡献1条内容
所有评论(0)