MATLAB代码:配网节点电价 DLMP
关键词:DLMP SOCP lindistflow
参考文档:《Distribution Locational Marginal Pricing (DLMP) for Congestion Management and Voltage Support》2018 SCI一区 IEEE Transactions on Power System 非完美复现
仿真平台:MATLAB+Gurobi
主要内容:
- 考虑网损,电压,阻塞的配电网二阶锥节点电价 (DLMP)需要gurobi求解器;
2.在原本lindistflow上使用了二阶锥,精确了模型;
3。
可以轻松加东西,全网唯一
4.PDF为参考文献,并非完美复现。
这段代码是一个用于优化配电网运行的算法。以下是对代码的解释:
首先,代码进行了一些初始化操作,如清除变量、设置格式和警告等。
然后,定义了一些常量和数据,包括优化时刻(NT)、基准功率(SB)、基准电压(VBase)等。
接下来,定义了配电网的拓扑结构和参数,包括线路号、首节点、末节点、阻抗、电流等。
代码中还定义了一些预测数据,如负荷值、风机出力等。
然后,定义了一些决策变量,如线路功率、节点电压、风机出力等。
接下来,定义了一些约束条件,如潮流约束、电压约束、无功补偿约束等。
最后,定义了目标函数,即最小化购电成本或最小化网损。
使用优化求解器对约束条件和目标函数进行求解。
这段代码是一个用Matlab编写的配电网优化问题的求解程序。它主要通过优化算法来确定配电网的运行策略,以最小化成本和确保系统的安全运行。以下是对代码的分析:
首先,代码定义了一些常量和变量,包括优化时刻(NT)、基准功率(SB)、基准电压(VBase)等。这些常量和变量用于计算和约束配电网的各项参数。
接下来,代码定义了一个包含配电网数据的矩阵PDN_Data。该矩阵包含了每条线路的起始节点、终止节点、电阻、电抗等信息。这些数据用于计算潮流方程和约束条件。
代码接着定义了一些变量,包括负荷功率(P_load、Q_load)、电压幅值(U2)、线路功率(P、Q)、风机出力(P_Wind)等。这些变量用于表示配电网的状态和决策变量。
代码定义了一系列约束条件,包括潮流方程、节点电压上下限、线路电流约束等。这些约束条件用于确保配电网的安全运行和满足系统要求。
代码定义了一个目标函数,即最小化成本。成本包括从上级电网购电的成本和网损的成本。通过优化算法,代码寻找最优的运行策略,以最小化成本。
最后,代码使用优化算法对定义的目标函数和约束条件进行求解。如果求解成功,将输出最优解的成本和其他相关信息。
该代码的优势在于它通过优化算法来求解配电网的运行策略,以最小化成本和确保系统的安全运行。它考虑了各种约束条件,如潮流方程、节点电压上下限、线路电流约束等,以保证系统的稳定性和可靠性。此外,代码还考虑了风机出力和无功补偿等因素,以进一步优化系统的运行效果。通过对目标函数和约束条件的优化求解,代码可以找到最优的运行策略,从而降低配电网的运行成本。
这段代码是一个MATLAB程序,主要用于配电网的优化调度问题。下面是对代码的逐行解释:
tic:开始计时,用于计算程序的运行时间。
clc; clear; close all;:清除命令行窗口的内容,清除所有变量,并关闭所有图形窗口。
format short:设置输出格式为短格式,即小数点后保留4位。
warning off:关闭警告信息的显示。
NT = 24;:定义优化时刻的数量为24。
SB = 10;:定义基准功率为10 MVA。
VBase = 12.66;:定义基准电压为12.66 kV。
ZB = VBase^2 SB;:计算基准电阻抗。
IB = SB (sqrt(3)*VBase);:计算基准电流。
PDN_Data = […:定义一个包含配电网数据的矩阵,包括线路号、首节点、末节点、阻抗、抗抗、线路最大潮流和线路最小潮流等信息。
NL = size(PDN_Data,1); NB = NL + 1 ;:计算线路数量和节点数量。
L_i = PDN_Data(:,2);:提取PDN_Data矩阵中的首节点信息。
L_j = PDN_Data(:,3);:提取PDN_Data矩阵中的末节点信息。
P_load = PDN_Data(:,4);:提取PDN_Data矩阵中的有功负荷信息。
Q_load = PDN_Data(:,5);:提取PDN_Data矩阵中的无功负荷信息。
R = PDN_Data(:,6) ZB;:计算线路阻抗的标幺值。
X = PDN_Data(:,7) ZB;:计算线路抗抗的标幺值。
Pmax = PDN_Data(:,8) SB;:计算线路最大潮流的标幺值。
Pmin = PDN_Data(:,9) SB;:计算线路最小潮流的标幺值。
U2_min = 0.90^2;:定义电压的最小值的平方。
U2_max = 1.05^2;:定义电压的最大值的平方。
Ind_SubLine = zeros(NL,2);:创建一个大小为NL×2的零矩阵,用于存储各条线路的子线路编号。
for i = 1: NL:循环遍历所有线路。
temp = find(L_i == L_j(i));:找到首节点等于当前末节点的线路索引。
if ~isempty(temp):如果找到了子线路。
Ind_SubLine(i,1:length(temp)) = temp;:将子线路的索引存储到Ind_SubLine矩阵中。
end:结束if语句。
Pd_total = [63 62 60 58 59 65 72 85 95 99 100 99 93 92 90 88 90 92 96 98 96 90 80 70];:定义24小时的负荷值。
Qd_total = [63 62 60 58 59 65 72 85 95 99 100 99 93 92 90 88 90 92 96 98 96 90 80 70];:定义24小时的无功负荷值。
Pd = P_load * Pd_total 1000000;:计算潮流方程右侧的有功负荷值。
Qd = Q_load * Qd_total 1000000;:计算潮流方程右侧的无功负荷值。
Pd=[zeros(1,24);Pd];:在Pd矩阵的第一行添加一个全零行。
Qd=[zeros(1,24);Qd];:在Qd矩阵的第一行添加一个全零行。
Ind_DG = [33];:定义分布式发电机节点的索引。
Ind_SVC = [12 7 ];:定义无功补偿器节点的索引。
Winddata = [2 1];:定义风机节点的信息。
P_WT_ratio = 0.5;:定义风机的额定功率。
P_WT_level = [0.57 0.69 0.74 0.77 0.80 0.56 0.45 0.27 0.10 0.15 0.29 0.36 …:定义风机的预测出力百分比。
P_WT_pre = P_WT_level SB;:将风机的预测出力转换为标幺值。
P_WT_min = zeros(NB,24);:创建一个大小为NB×24的零矩阵,用于存储风机的最小出力。
P_WT_max = zeros(NB,24);:创建一个大小为NB×24的零矩阵,用于存储风机的最大出力。
P_WT_min(Ind_DG,:) = 0;:将分布式发电机节点的最小出力设置为零。
P_WT_max(Ind_DG,:) = P_WT_pre;:将分布式发电机节点的最大出力设置为预测出力。
SVC = [0.2 -0.2; 0.15 -0.15];:定义连续无功补偿器的最大和最小出力。
SVC(:,2:3) = SVC(:,1:2) SB;:将连续无功补偿器的出力转换为标幺值。
SVC_max = SVC(:,1);:提取连续无功补偿器的最大出力。
SVC_min = SVC(:,2);:提取连续无功补偿器的最小出力。
P = sdpvar(NL,NT);:定义一个大小为NL×NT的决策变量P,表示线路首端的有功功率。
Q = sdpvar(NL,NT);:定义一个大小为NL×NT的决策变量Q,表示线路首端的无功功率。
P_kidLine = sdpvar(NL,NT);:定义一个大小为NL×NT的决策变量P_kidLine,表示各条线路紧邻的下游子线路首端的功率。
Q_kidLine = sdpvar(NL,NT);:定义一个大小为NL×NT的决策变量Q_kidLine,表示各条线路紧邻的下游子线路首端的无功功率。
U2 = sdpvar(NB,NT);:定义一个大小为NB×NT的决策变量U2,表示节点的电压幅值的平方。
I2 = sdpvar(NL,24);:定义一个大小为NL×24的决策变量I2,表示线路的电流幅值的平方。
P_Wind = sdpvar(NB,NT);:定义一个大小为NB×NT的决策变量P_Wind,表示风机的出力。
Qg_SVC = sdpvar(NB,NT);:定义一个大小为NB×NT的决策变量Qg_SVC,表示连续无功补偿器的出力。
P_buy = sdpvar(1,NT);:定义一个大小为1×NT的决策变量P_buy,表示从上级电网购电的功率。
Q_buy = sdpvar(1,NT);:定义一个大小为1×NT的决策变量Q_buy,表示从上级
ID:77800680968629908