Unrecognized function or variable 'GEPP'.
3 次查看(过去 30 天)
显示 更早的评论
clear
clc
%%Required input data
Busdata = xlsread('Gepdata.xlsx', 'Busdata');
Linedata = xlsread('Gepdata.xlsx', 'Linedata');
Candidatesdata = xlsread('Gepdata.xlsx', 'Candidatesdata');
%Maximum capacity that line i can be enhanced:
Biu = xlsread('Gepdata.xlsx', 'Biu');
%Investment cost for transmission lines enhancement(R/p.u.km)
Ga = xlsread('Gepdata.xlsx', 'Gama');
%% Data retrieval from input data
%Candidate buses for generation expansion:
Candidates = Candidatesdata(:,1);
%Beta(i):Investment factor cost of generation expansion
%in bus i
Beta = Candidatesdata(:,2);
%PGmax(i):Maximum generation expansion limit of bus i
PGmax = Candidatesdata(:,3);
%PGmin(i):Minimum generation expansion limit of bus i
PGmin = Busdata(:,3);
Nlin = Linedata(:,1); %Line number
Nl = Linedata(:,2); %Nl:From bus
Nr = Linedata(:,3); %Nr:To bus
R = Linedata(:,4); %R(i):Line resistance
X = Linedata(:,5); %X(i):Line reactance
%Smax(i):Maximum thermal rating of line i
Smax = Linedata(:,6);
%Length(i):Path length of line i
Length = Linedata(:,7);
Busn = Busdata(:,1); %Bus number
Btype = Busdata(:,2); %Type of bus 1-Slack, 2-PV, 3-PQ
Pg = Busdata(:,3); %Pg(i):Generation of bus i
Pl = Busdata(:,4); %Pl(i):Load of bus i
Nc = setxor(Busn,Candidates); %Nc:Non-candidate buses
[Ybus] = ybus(Busdata, Linedata); %Computing Ybus
%%
[Gi,Ol,To,Ef] = GEPP(Candidates,Nc,Beta,PGmax,PGmin,X,Btype,Nl,Nr,Smax,Length,Biu,Ga,Pg,Pl,Ybus);
%Gi:Generation of candidate buses after expansion
%Ol:Overloaded lines after expansion
%To:Total overload after expansion
%%
%Ef:Exit flag, integer identifying the reason the algorithm
%is terminated. Ef is 1, if there is a feasible solution
if Ef==1
Print_Gep
else
end
fprintf('There is no feasible solution.\n');
function [Ybus] = ybus (Busdata, Linedata)
nbus = size(Busdata,1);
nl = Linedata(:,2);
nr = Linedata(:,3);
Ld = Linedata;
%%
j = sqrt(-1);
X = Ld(:,5);
nbr = length(Ld(:,1));
%Z = R + j*X;
Z = (j*X);
y = ones(nbr,1)./Z; %Branch admittance
%for n = 1:nbr
Ybus = zeros(nbus,nbus);%Initialize Ybus to zero
%%
%Formation of the off diagonal elements
for k = 1:nbr
Ybus(nl(k),nr(k)) = Ybus(nl(k),nr(k))-y(k);
Ybus(nr(k),nl(k)) = Ybus(nl(k),nr(k));
end
%%
%Formation of the diagonal elements
for n = 1:nbus
for m = (n+1):nbus
Ybus(n,n) = Ybus(n,n)-Ybus(n,m);
end
for m = 1:n-1
Ybus(n,n) = Ybus(n,n)-Ybus(n,m);
end
end
function [Gi, Ol, To, Ef]= GEPP (Candidates, Nc, Beta ,PGmax ,PGmin, X, Btype, Nl, Nr, Smax, Length, Biu, Ga , Pg, Pl, Ybus);
if isempty(Ybus)
error('Input argument "Ybus" is undefined.');
end
if isempty(Pg)
fprintf('Input argument "Pl" determining');
fprintf(' load demand of buses.\n');
error('"Pl" is undefined and must be determined.');
end
if isempty(Pg)
fprintf('Input argument "Pg" determining');
fprintf(' generation of buses.\n');
error('"Pg" is undefined and must be determined.');
end
if isempty(Ga)
fprintf('Input argument "Ga" determining Investment ');
fprintf('cost of transmission lines enhancement.\n');
warning('"Ga" is undefined and is set to a default value.');
Ga = 20;
end
if isempty(Biu)
fprintf('Input argument "Biu" determining ');
fprintf('maximum capacity of lines enhancement.\n');
warning('"Biu" is undefined & is set to a default value.');
Biu = 1.1;
end
if isempty(Length)
fprintf('Input argument "Length" determining');
fprintf(' path length of lines.\n');
error('"Length" is undefined and must be determined.');
end
if isempty(Smax)
fprintf('Input argument "Smax" defining');
fprintf(' lines thermal loading before expansion.\n');
error('"Smax" is undefined and must be determined.');
end
if isempty(Nr) || isempty(Nl)
fprintf('Input argument "NL" & "Nr" defining');
fprintf(' lines sending and ending buses.\n');
error('"NL" & "Nr" are undefined and must be determined.');
end
if isempty(Btype)
fprintf('Input argument "Btype" defining');
fprintf(' information of bus types.\n');
error('"Btype" is undefined and must be determined.');
end
if isempty(X)
fprintf('Input argument "X" containing');
fprintf(' data of lines reactance.\n');
error('"X" is undefined and must be determined.');
end
if isempty(PGmin)
fprintf('Input argument "PGmin" defining minimum ');
fprintf('generation expansion limit of candidate buses.\n');
error('"PGmin" is undefined and must be determined.');
end
if isempty(PGmax)
fprintf('Input argument "PGmax" defining maximum ');
fprintf('generation expansion limit of candidate buses.\n');
error('"PGmax" is undefined and must be determined.');
end
if isempty(Beta)
fprintf('Input argument "Beta" defining investment cost');
fprintf('of generation expansion in candidate buses.\n');
error('"Beta" is undefined and must be determined.');
end
if isempty(Candidates)
fprintf('Input argument "Candidates" defining');
fprintf('candidate buses.\n');
error('"Candidates" is undefined and must be determined.');
end
%% Problem outputs
%Gi:Generation of candidate buses after expansion
%Ol:Overloaded lines after expansion
%To:Total overload after expansion
%Ef:Exit flag, integer identifying the reason the algorithm
%is terminated. Ef is 1, if there is a feasible solution
%% Problem Inputs
%Candidates:Candidate buses for generation expansion
%Beta(i):investment cost of generation expansion in bus i
%PGmax(i):Maximum generation expansion limit of bus i
%PGmin(i):Minimum generation expansion limit of bus i
%Nlin:Line number
%Nl:Line from bus
%Nr:Line to bus
%R(i):Line resistance
%X(i):Line reactance
%Smax(i):Maximum thermal rating of line i
%Length(i):Path Length of Line i
%Busn:Bus number
%Btype:Type of bus 1-Slack, 2-PV, 3-PQ
%Pg(i):Generation of bus i
%Pl(i):load of bus i
%Nc:Non-candidate buses
%%Obtaining Ybus matrix
%%
Ps = (Pg-Pl);
Na = size (Pg, 1);
M = size (X, 1);
%%%%
[Nons] = find(Btype~=1);
Nx = length(Nons);
B = zeros (Nx,Nx);
for k = 1:Nx
for j = 1:Nx
Ymn = Ybus(Nons(k),Nons(j));
B(k,j) = -imag(Ymn);
end
end
E = inv (B);
Binv = zeros (Na,Na);
for k = 1:Nx
an = Nons(k);
for j = 1:Nx
am = Nons(j);
Binv(an,am) = E(k,j);
end
end
%% Computing branch admittance calculation (b)
%The admittance matrix in which bii is the admittance
% of line i and non-diagonal elements are zero
jay = sqrt(-1);
Z = (jay*X);
Y = ones(M,1)./Z;
b = zeros (M,M);
for i = 1:M
b(i,i) = -imag(Y(i));
end
%% Computing connection matrix (A)
% The connection matrix (M*N) in which aij is 1, if a
% line exists from bus i to bus j; otherwise zero.
A = zeros (M, Na);
for i = 1:M
nl = Nl(i);
nr = Nr(i);
A(i, nl) = 1;
A(i, nr) = -1;
end
%% Computing sensitivity matrix (a)
theta = Binv*Ps;
a = b*A*Binv;
%% The line flows are calculated as follows:
Pli = zeros (M,1);
for i = 1:M
for k = 1:Na
Pli(i,1) = Pli(i,1)+(a(i,k)*(Pg(k,1)-Pl(k,1)));
end
end
%% Generation expansion cost of each bus
Pmax = zeros (Na,1);
beta = zeros (Na,1);
for j = 1:length (Nc)
Inc = Nc(j);
beta(Inc) = 10^10;
Pmax(Inc) = 0.000001;
end
for j = 1:length (Candidates)
Ica = Candidates(j);
beta(Ica) = Beta(j);
Pmax(Ica) = PGmax(j);
end
Beta = beta;
PGmax = Pmax;
%% Investment cost for transmission lines enhancement (R/MW)
Gama = Ga*Length;
%% Maximum possible capacity expansion of each line
Biu = Biu.*ones(M,1);
%% Thermal rating of each line
Pcu = Smax; %Upper bound of thermal rating of each line
Pcl = -Pcu; %Lower bound of thermal rating of each line
%% Defining objective function
for k = 1:Na
OF(k) = Beta(k);
end
for i = 1:M
I = i+Na;
OF(I) = Gama (i);
end
%% First set of inequality constraints: determining
%% minimum permissible thermal rating of each line
for i = 1:M
C(i) = (-a(i,:)*Pg)+Pli(i);
end
GH1 = zeros (M, M+Na);
bGH1 = zeros (M,1);
for i = 1:M
for k = 1:Na
GH1(i,k) = -a(i,k);
end
I = i+Na;
GH1(i,I) = Pcl(i);
bGH1(i,1) = C(i);
end
%% Second set of inequality constraints: determining
%% maximum permissible thermal rating of each line
GH2 = zeros (M, M+Na);
bGH2 = zeros (M,1);
for i = 1:M
for k = 1:Na
GH2(i,k) = a(i,k);
end
I = i+Na;
GH2(i,I) = -Pcu(i);
bGH2(i,1) = -C(i);
end
%% Integrating all inequality constraints
%% to one matrix, called An & bn here
for i = 1:M
An(i,:) = GH1(i,:);
bn(i) = bGH1(i);
I = i+M;
An(I,:) = GH2(i,:);
bn(I) = bGH2(i);
end
%% Determining upper and lower bounds of
%% decision variables, called lb & ub here
lb = zeros (M+Na,1);
ub = zeros (M+Na,1);
for k = 1:Na
lb(k,1) = PGmin(k);
ub(k,1) = PGmax(k);
end
for i = 1:M
I = i+Na;
lb(I,1) = 1;
ub(I,1) = Biu(i);
end
%% Defining equality constraint
%% (Total generation = Total demand)
Aeq = zeros (1, Na+M);
for k = 1:Na
Aeq(1,k) = 1;
end
beq = sum (Pl);
%% Solving the problem and finding the optimal point
[Dv, Fval, Ef] = linprog(OF,An,bn,Aeq,beq,lb,ub);
To = 0;
if Ef~=1
fprintf('\nWARNING: No feasible solution was found.')
Gi = zeros(size(Candidates,1),1);
Ol = zeros(M,1);
else
for k = 1:size(Candidates,1)
Gi (k,1) = Candidates(k,1);
Gi (k,2) = Dv(k);
end
for i = 1:M
I = i+Na;
Ol (i,1) = Nl(i);
Ol (i,2) = Nr(i);
Ol (i,3) = Dv(I,1)-1;
To = To+(Dv(I)-1);
end
end
Print_Gep
clc
fprintf('*************************************************');
fprintf('***************\n');
fprintf('Generation of each candidate bus after expansion');
fprintf(' is as follows: \n');
fprintf('*************************************************');
fprintf('***************\n');
fprintf(' |Bus number| |Gi (p.u.)|');
for i = 1:size(Gi,1)
fprintf('\n %18.0f % 22.2f', Gi(i,1), Gi(i,2));
end
fprintf('\n\n********************************************');
fprintf('********************\n');
fprintf(' Total overload value and enhanced lines ');
fprintf('are as follows\n');
fprintf('************************************************');
fprintf('****************\n');
fprintf(' |Total overload| \n');
fprintf('%31.2f \n', To);
if To>=0.0001
El = find (Ol(:,3)>=0.0001);
Sel = length(El);
fprintf('********************************************');
fprintf('********************\n');
fprintf(' |Enhanced lines| ');
fprintf(' \n');
fprintf(' |From bus| |To bus| ');
fprintf('|Enhancement(%%)|');
for i = 1:Sel
fprintf('\n %10i %18i % 19.2f \n',...
Ol(El(i),1), Ol(El(i),2), Ol(El(i),3)*100);
end
fprintf('\n********************************************');
fprintf('********************\n');
else
fprintf('\n No enhanced line ');
fprintf(' \n');
end
%% Printing the results in results.txt
fid = fopen('results.txt', 'wt');
fprintf(fid,'*********************************************');
fprintf(fid,'*******************\n');
fprintf(fid,...
'Generation of each candidate bus after expansion');
fprintf(fid,'is as follows: \n');
fprintf(fid,'**********************************************');
fprintf(fid,'******************\n');
fprintf(fid,' |Bus number| |Gi (p.u.)|');
for i = 1:size(Gi,1)
fprintf(fid,'\n %18.0f % 22.2f', Gi(i,1), Gi(i,2));
end
fprintf(fid,'\n\n*****************************************');
fprintf(fid,'***********************\n');
fprintf(fid,' Total overload value and enhanced lines');
fprintf(fid,' are as follows\n');
fprintf(fid,'*********************************************');
fprintf(fid,'*******************\n');
fprintf(fid,' |Total overload| \n');
fprintf(fid,'%31.2f \n', To);
if To>=0.0001
El = find (Ol(:,3)>=0.0001);
Sel = length(El);
fprintf(fid,'******************************************');
fprintf(fid,'**********************\n');
fprintf(fid,' |Enhanced lines| ');
fprintf(fid,' \n');
fprintf(fid,' |From bus| |To bus| ');
fprintf(fid,' |Enhancement(%%)|');
for i = 1:Sel
fprintf(fid,'\n %10i %18i % 19.2f \n',...
Ol(El(i),1), Ol(El(i),2), Ol(El(i),3)*100);
end
fprintf(fid,'\n***************************************');
fprintf(fid,'*************************\n');
else
fprintf(fid,'\n No enhanced line ');
fprintf(fid,' \n');
end
end
end
my problem Ihave the following error message
Unrecognized function or variable 'GEPP'.
anybody can help to solve this problem
2 个评论
Walter Roberson
2021-8-5
Is it possible you are using R2015a or earlier?
We do not have the data files so we cannot test your code.
采纳的回答
Walter Roberson
2021-8-5
function [Gi, Ol, To, Ef]= GEPP (Candidates, Nc, Beta ,PGmax ,PGmin, X, Btype, Nl, Nr, Smax, Length, Biu, Ga , Pg, Pl, Ybus);
Insert a line containing
end
immediately before that function line.
Delete the final
end
right at the bottom of your code.
3 个评论
Walter Roberson
2021-8-5
I do not know. In the source you posted, the only call to ybus() is at line 35, not anywhere near line 289, so you must be looking at a different program.
Walter Roberson
2021-8-6
I have attached adjusted code. You did not put in the end in the place I told you to :(
I also fixed several other problems.
However, there a problem that I do not know the solution to. On the (new) line 247 there is
Gama = Ga*Length;
At that point, Ga and Length are both column vectors, but they are different sizes. Ga is 5 x 1, having to do with the 5 busses you defined. Length is 10 x 1, dealing with the 10 lines that you defined. You cannot use * between them because the inner dimensions must agree for the * operator. You cannot use .* because the non-scalar dimensions must agree to use .*
What size is expected for the result? The next section does
for i = 1:M
I = i+Na;
OF(I) = Gama (i);
end
and that tells us that a vector is expected. But when you combine busses with lines it would make more sense for the result to be either 2D or scalar.
更多回答(2 个)
Wael Atiyah
2021-8-6
2 个评论
Walter Roberson
2021-8-6
We do not have your current version of the code, and we do not have your data files to test with.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Author Block Masks 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!