function [load_shed, EXIT] = load_shedding(mpc)
%该函数根据输入的系统数据mpc,计算得到各节点切负荷情况
%mpc:系统数据,其中包括线路、发电机状态
%load_shed:两列的矩阵,第一列为节点编号,第二列为对应切负荷量,单位MW
%EXIT:优化算法收敛标志,如果为1则表明找到最优解
[PQ, PV, REF, NONE, BUS_I, ~, PD, QD, GS, BS, BUS_AREA, VM, ...
VA, BASE_KV, ZONE, VMAX, VMIN, LAM_P, LAM_Q, MU_VMAX, MU_VMIN] = idx_bus;
[F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, RATE_B, ...
RATE_C, TAP, SHIFT, BR_STATUS, PF, QF, PT, QT, MU_SF, MU_ST, ...
ANGMIN, ANGMAX, MU_ANGMIN, MU_ANGMAX] = idx_brch;
[GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN, ...
MU_PMAX, MU_PMIN, MU_QMAX, MU_QMIN, ~, PC2, QC1MIN, QC1MAX, ...
QC2MIN, QC2MAX, RAMP_AGC, RAMP_10, RAMP_30, RAMP_Q, APF] = idx_gen;
%% 形成节点、线路、发电机参数,定义基准功率
bus = mpc.bus;
gen = mpc.gen;
branch = mpc.branch;
baseMVA = mpc.baseMVA;
%修改线路,去掉停运线路
index = find(branch(:, BR_STATUS) == 0);
branch(index ,:) = [];
%节点数和当前支路数
Nb = size(bus, 1);
Nl = size(branch, 1);
%% 形成B0导纳矩阵
stat = branch(:, BR_STATUS); %% ones at in-service branches支路状态
b = stat ./ branch(:, BR_X); %% series susceptance电纳
tap = ones(Nl, 1); %% default tap ratio = 1
i = find(branch(:, TAP)); %% indices of non-zero tap ratios (TAP=RATIO)ratio~=0的序号
tap(i) = branch(i, TAP); %% assign non-zero tap ratios
b = b ./ tap;
%构建支路节点关联矩阵
f = branch(:, F_BUS); %% list of "from" buses
t = branch(:, T_BUS); %% list of "to" buses
i = [(1:Nl)'; (1:Nl)']; %% double set of row indices
Cft = sparse(i, [f;t], [ones(Nl, 1); -ones(Nl, 1)], Nl, Nb); %% connection matrix %支路-节点关联矩阵
Bf = sparse(i, [f; t], [b; -b], Nl, Nb); % = spdiags(b, 0, nl, nl) * Cft;
Bbus = Cft' * Bf;
B0 = full(Bbus);
%% 形成线性规划模型
PGmax=gen(:,PMAX).*gen(:,GEN_STATUS);%将故障发电机出力设为0
PGmin=gen(:,PMIN).*gen(:,GEN_STATUS);
gen_bus=gen(:,GEN_BUS);
Ng = length(gen_bus);
Tmax = branch(:,RATE_A);
PD = bus(:, PD);
% 形成Aeq矩阵和beq向量
X_l = diag(1 ./ branch(:, BR_X));
T = X_l * Cft;
TP = zeros(Nb, Ng);
TP(gen_bus, :) = eye(Ng);%发电机节点所在的位置
Aeq=zeros(Nb + Nl + 1, 2 * Nb + Nl + Ng);
Aeq(1 : Nb, 1 : 2 * Nb + Ng) = [eye(Nb) TP -B0*baseMVA];
Aeq(Nb + 1, 1 : Nb + Ng) = 1;
Aeq(Nb + 2 : Nb + Nl + 1, Nb + Ng + 1 : 2 * Nb + Ng + Nl) = [-T*baseMVA eye(Nl)];
beq = sparse([PD; sum(PD); zeros(Nl,1)]);
%形成上下限约束
LB = sparse([zeros(Nb, 1); PGmin; -2 * pi * ones(Nb, 1); -Tmax]);
UB = sparse([PD .* (PD >= 0); PGmax; 2 * pi * ones(Nb, 1); Tmax]);
%目标函数
f = sparse([ones(1, Nb) zeros(1, Ng + Nb + Nl)]);
%% 求解线性规划模型
% options = optimset('TolFun', 1e-4, 'LargeScale', 'on');
[X, F, EXIT] = cplexlp(f, [], [], Aeq, beq, LB, UB);
if EXIT == 1 %如果找到最优解则输出最优解
load_shed = [(1 : Nb)' X(1 : Nb) .* (X(1 : Nb) >= 0)];
else %如果没有找到最优解则不输出结果,本次计算无效
load_shed = [(1 : Nb)' zeros(Nb, 1)];
end
while(load_shed(:,2)==0)
bus(1,3)=bus(1,3)+5;
end
fprint(bus(1,3))
没有合适的资源?快使用搜索试试~ 我知道了~
load_shedding - 副本.rar_matpower切负荷_电网可靠性_电网负荷_规划可靠性_负荷
共1个文件
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 185 浏览量
2022-07-14
05:18:08
上传
评论 3
收藏 2KB RAR 举报
温馨提示
基于matpower实现最优切负荷,实现电网规划可靠性
资源详情
资源评论
资源推荐
收起资源包目录
load_shedding - 副本.rar (1个子文件)
load_shedding - 副本.m 3KB
共 1 条
- 1
JaniceLu
- 粉丝: 78
- 资源: 1万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3