├── testcost.asv ├── initial_velocity.m ├── find_boundary.asv ├── find_boundary.m ├── check_constraint.m ├── initial_velocity.asv ├── testcost.m ├── generate_initial.m ├── generate_neigbourhood.m ├── test_load_flow.m ├── Busout.m ├── Lfybus.m ├── find_cost_final.asv ├── Lineflow1.m ├── Lineflow.m ├── find_cost_final.m ├── find_cost.m ├── Lf_ieee30bus_bygauss.m ├── Lf_ieee30bus_bygauss1.m ├── Lf_ieee30bus_bygauss1.asv ├── Lfgauss.m ├── Decouple.m ├── Lfnewton.m ├── Lfnewton_Lid.m └── PSO.m /testcost.asv: -------------------------------------------------------------------------------- 1 | clc;clear; 2 | %p=[175.15;50.20;21.51;19.50;14;12] 3 | %p=[177.3;49.18;12.24;11.19;21.23;21.74] 4 | p=[176.04;48.76;21.56 5 | Gen_Cost_Total=find_cost(p) -------------------------------------------------------------------------------- /initial_velocity.m: -------------------------------------------------------------------------------- 1 | function V = initial_velocity(N,D); 2 | [a,b]= find_boundary(D); 3 | %a = -1; 4 | %b = 1; 5 | for i=1:N 6 | V(:,i)=(b-a).*rand(1,D)'*0.1; 7 | end 8 | 9 | -------------------------------------------------------------------------------- /find_boundary.asv: -------------------------------------------------------------------------------- 1 | function [B_low,B_up]= find_boundary(n); 2 | B_low=[50;20;15;10;10;12;0.95;0.95;0.95;0.95;0.95;0.95 3 | for i=1:n 4 | B_low(i) = 0; 5 | B_up(i) = a; 6 | end -------------------------------------------------------------------------------- /find_boundary.m: -------------------------------------------------------------------------------- 1 | function [B_low,B_up]= find_boundary(n) 2 | B_low=[20;15;10;10;12;0.95;0.95;0.95;0.95;0.95;0.95;0.90;0.90;0.90;0.90]; 3 | B_up=[80;50;35;30;40;1.05;1.10;1.10;1.10;1.10;1.10;1.10;1.10;1.10;1.10]; 4 | -------------------------------------------------------------------------------- /check_constraint.m: -------------------------------------------------------------------------------- 1 | function con = check_constraint(p,n); 2 | [B_low,B_up]=find_boundary(n); 3 | index = zeros(n,1); 4 | for i=1:n, 5 | if (p(i) > B_low(i))&( p(i)< B_up(i)) 6 | index(i)=1; 7 | end 8 | end 9 | con = prod(index); 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /initial_velocity.asv: -------------------------------------------------------------------------------- 1 | function V = initial_velocity(N,D); 2 | a=[20;15;10;10;12;0.95;0.95;0.95;0.95;0.95;0.95;0.90;0.90;0.90;0.90]; 3 | b=[80;50;35;30;40;1.05;1.10;1.10;1.10;1.10;1.10;1.10;1.10;1.10;1.10]; 4 | %a = -1; 5 | %b = 1; 6 | for i=1:N 7 | V=a+(b-a).*rand(D,N)'; 8 | end 9 | 10 | -------------------------------------------------------------------------------- /testcost.m: -------------------------------------------------------------------------------- 1 | clc;clear; 2 | %p=[175.15;50.20;21.51;19.50;14;12] 3 | %p=[177.3;49.18;12.24;11.19;21.23;21.74] 4 | %p=[176.04;48.76;21.56;22.05;12.44;12] 5 | %p=[175.974;48.884;21.51;22.24;12.251;12] 6 | pp=[170.32;53.45;20.81;19.61;13.45;14.51] 7 | %find cost 8 | F = zeros(6,1); 9 | c = [0;0;0;0;0;0]; 10 | b = [2;1.75;1;3.25;3;3]; 11 | a = [0.00375;0.0175;0.0625;0.00834;0.02500;0.02500]; 12 | for i=1:6, 13 | F(i)=(a(i)*pp(i)^2)+b(i)*pp(i)+c(i); 14 | end 15 | FT = sum(F) 16 | -------------------------------------------------------------------------------- /generate_initial.m: -------------------------------------------------------------------------------- 1 | function x = generate_initial(B_low,B_up,m,n); 2 | s = zeros(1,n); 3 | for k = 1:m, 4 | con=0; 5 | while con==0 6 | for i=1:n 7 | %s(i)= B_low(i) + ((B_up(i)-B_low(i))*k/m); 8 | %s(i)= B_low(i) + ((B_up(i)-B_low(i))*rand(1)*k/m); 9 | %s(i)= B_low(i) + ((B_up(i)-B_low(i))*k/m*(2*rand(1)-1)); 10 | s(i)= B_low(i) + ((B_up(i)-B_low(i))*rand(1)); 11 | end 12 | con=check_constraint(s,n); 13 | end 14 | x(:,k)= s; 15 | end 16 | -------------------------------------------------------------------------------- /generate_neigbourhood.m: -------------------------------------------------------------------------------- 1 | function x = generate_neigbourhood(N_size,xr,nep,n); 2 | s = zeros(1,n); 3 | [B_low,B_up]= find_boundary(n); 4 | %X_up = xr + N_size'.*rand(n,1); 5 | %X_low = xr - N_size'.*rand(n,1); 6 | for k = 1:nep, 7 | s = zeros(n,1); 8 | Xn=xr+N_size(:,1)*(2*rand(n,1)-ones(n,1)); 9 | for i=1:n, 10 | if Xn(i) >= B_up(i), 11 | Xn(i) = B_up(i); 12 | end 13 | if Xn(i) <= B_low(i), 14 | Xn(i)=B_low(i); 15 | end 16 | s(i)= Xn(i); 17 | x(:,k)= s; 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /test_load_flow.m: -------------------------------------------------------------------------------- 1 | clear;clc 2 | % Optimal Power Flow 3 | format short 4 | Lf_ieee30bus_bygauss 5 | %initial value 6 | %Voltage of Gen 7 | busdata(1,3)=1.05; 8 | busdata(2,3)=1.0462; 9 | busdata(5,3)=1.0459; 10 | busdata(8,3)=1.04165; 11 | busdata(11,3)=0.95231; 12 | busdata(13,3)=1.05; 13 | %Transformer Tap 14 | linedata(11,6)=1.01; 15 | linedata(12,6)=0.98; 16 | linedata(15,6)=1.01; 17 | linedata(36,6)=1.02; 18 | %Power generator 19 | busdata(2,7)=49.209; 20 | busdata(5,7)=21.5135; 21 | busdata(8,7)=22.648; 22 | busdata(11,7)=10.4146; 23 | busdata(13,7)=12; 24 | Lfybus; % form the bus admittance matrix 25 | % Lfnewton; % Load flow solution 26 | 27 | Lfnewton_Lid 28 | Busout; % Prints the power flow solution on the screen 29 | Lineflow; % Computes and displays the line flow and losses 30 | Lmax -------------------------------------------------------------------------------- /Busout.m: -------------------------------------------------------------------------------- 1 | % This program prints the power flow solution in a tabulated form 2 | % on the screen. 3 | % 4 | % Copyright (C) 1998 by H. Saadat. 5 | 6 | %clc 7 | disp(tech) 8 | fprintf(' Maximum Power Mismatch = %g \n', maxerror) 9 | fprintf(' No. of Iterations = %g \n\n', iter) 10 | head =[' Bus Voltage Angle ------Load------ ---Generation--- Injected' 11 | ' No. Mag. Degree MW Mvar MW Mvar Mvar ' 12 | ' ']; 13 | disp(head) 14 | for n=1:nbus 15 | fprintf(' %5g', n), fprintf(' %7.3f', Vm(n)), 16 | fprintf(' %8.3f', deltad(n)), fprintf(' %9.3f', Pd(n)), 17 | fprintf(' %9.3f', Qd(n)), fprintf(' %9.3f', Pg(n)), 18 | fprintf(' %9.3f ', Qg(n)), fprintf(' %8.3f\n', Qsh(n)) 19 | end 20 | fprintf(' \n'), fprintf(' Total ') 21 | fprintf(' %9.3f', Pdt), fprintf(' %9.3f', Qdt), 22 | fprintf(' %9.3f', Pgt), fprintf(' %9.3f', Qgt), fprintf(' %9.3f\n\n', Qsht) 23 | -------------------------------------------------------------------------------- /Lfybus.m: -------------------------------------------------------------------------------- 1 | % This program obtains th Bus Admittance Matrix for power flow solution 2 | % Copyright (c) 1998 by H. Saadat 3 | 4 | j=sqrt(-1); i = sqrt(-1); 5 | nl = linedata(:,1); nr = linedata(:,2); R = linedata(:,3); 6 | X = linedata(:,4); Bc = j*linedata(:,5); a = linedata(:, 6); 7 | nbr=length(linedata(:,1)); nbus = max(max(nl), max(nr)); 8 | Z = R + j*X; y= ones(nbr,1)./Z; %branch admittance 9 | for n = 1:nbr 10 | if a(n) <= 0 11 | a(n) = 1; 12 | else 13 | end 14 | Ybus=zeros(nbus,nbus); % initialize Ybus to zero 15 | % formation of the off diagonal elements 16 | for k=1:nbr; 17 | Ybus(nl(k),nr(k))=Ybus(nl(k),nr(k))-y(k)/a(k); 18 | Ybus(nr(k),nl(k))=Ybus(nl(k),nr(k)); 19 | end 20 | 21 | end 22 | % formation of the diagonal elements 23 | for n=1:nbus 24 | for k=1:nbr 25 | if nl(k)==n 26 | Ybus(n,n) = Ybus(n,n)+y(k)/(a(k)^2) + Bc(k); 27 | elseif nr(k)==n 28 | Ybus(n,n) = Ybus(n,n)+y(k) +Bc(k); 29 | else, end 30 | end 31 | end 32 | clear Pgg 33 | -------------------------------------------------------------------------------- /find_cost_final.asv: -------------------------------------------------------------------------------- 1 | function [FT,pp] = find_cost_final(p); 2 | Lf_ieee30bus_bygauss; 3 | %Power generator 4 | busdata(2,7)=p(1); 5 | busdata(5,7)=p(2); 6 | busdata(8,7)=p(3); 7 | busdata(11,7)=p(4); 8 | busdata(13,7)=p(5); 9 | %Voltage of Gen 10 | busdata(1,3)=p(6); 11 | busdata(2,3)=p(7); 12 | busdata(5,3)=p(8); 13 | busdata(8,3)=p(9); 14 | busdata(11,3)=p(10); 15 | busdata(13,3)=p(11); 16 | %Transformer Tap 17 | linedata(11,6)=p(12); 18 | linedata(12,6)=p(13); 19 | linedata(15,6)=p(14); 20 | linedata(36,6)=p(15); 21 | %load flow 22 | 23 | lfybus; % form the bus admittance matrix 24 | lfgauss; % Load flow solution by Gauss-Seidel method 25 | busout; % Prints the power flow solution on the screen 26 | lineflow; % Computes and displays the line flow and losses 27 | pp=[Pg(1);Pg(2);Pg(5);Pg(8);Pg(11);Pg(13);]; 28 | %find cost 29 | F = zeros(6,1); 30 | c = [0;0;0;0;0;0]; 31 | b = [2;1.75;1;3.25;3;3]; 32 | a = [0.00375;0.0175;0.0625;0.00834;0.02500;0.02500]; 33 | for i=1:6, 34 | F(i)=(a(i)*pp(i)^2)+b(i)*pp(i)+c(i); 35 | end 36 | FT = sum(F); 37 | if pp(1)<50|pp(1)>200 38 | FT=FT+10000; 39 | end 40 | 41 | -------------------------------------------------------------------------------- /Lineflow1.m: -------------------------------------------------------------------------------- 1 | % This program is used in conjunction with lfgauss or lf Newton 2 | % for the computation of line flow and line losses. 3 | % 4 | % Copyright (c) 1998 H. Saadat 5 | SLT = 0; 6 | fprintf('\n') 7 | fprintf(' Line Flow and Losses \n\n') 8 | fprintf(' --Line-- Power at bus & line flow --Line loss-- Transformer\n') 9 | fprintf(' from to MW Mvar MVA MW Mvar tap\n') 10 | ddd=0; 11 | for n = 1:nbus 12 | busprt = 0; 13 | for L = 1:nbr; 14 | if busprt == 0 15 | fprintf(' \n'), fprintf('%6g', n), fprintf(' %9.3f', P(n)*basemva) 16 | fprintf('%9.3f', Q(n)*basemva), fprintf('%9.3f\n', abs(S(n)*basemva)) 17 | 18 | busprt = 1; 19 | else, end 20 | if nl(L)==n 21 | k = nr(L); 22 | In = (V(n) - a(L)*V(k))*y(L)/a(L)^2 + Bc(L)/a(L)^2*V(n); 23 | Ik = (V(k) - V(n)/a(L))*y(L) + Bc(L)*V(k); 24 | Snk = V(n)*conj(In)*basemva; 25 | Skn = V(k)*conj(Ik)*basemva; 26 | SL = Snk + Skn; 27 | SLT = SLT + SL; 28 | elseif nr(L)==n k = nl(L); 29 | In = (V(n) - V(k)/a(L))*y(L) + Bc(L)*V(n); 30 | Ik = (V(k) - a(L)*V(n))*y(L)/a(L)^2 + Bc(L)/a(L)^2*V(k); 31 | Snk = V(n)*conj(In)*basemva; 32 | Skn = V(k)*conj(Ik)*basemva; 33 | SL = Snk + Skn; 34 | SLT = SLT + SL; 35 | else, end 36 | if nl(L)==n | nr(L)==n 37 | ddd=ddd+1; 38 | S_line(ddd)=abs(Snk); 39 | fprintf('%12g', k), 40 | fprintf('%9.3f', real(Snk)), fprintf('%9.3f', imag(Snk)) 41 | fprintf('%9.3f', abs(Snk)), 42 | fprintf('%9.3f', real(SL)), 43 | if nl(L) ==n & a(L) ~= 1 44 | fprintf('%9.3f', imag(SL)), fprintf('%9.3f\n', a(L)) 45 | else, fprintf('%9.3f\n', imag(SL)) 46 | end 47 | else, end 48 | end 49 | end 50 | SLT = SLT/2; 51 | fprintf(' \n'), fprintf(' Total loss ') 52 | fprintf('%9.3f', real(SLT)), fprintf('%9.3f\n', imag(SLT)) 53 | Transmissionloss=real(SLT); 54 | clear Ik In SL SLT Skn Snk 55 | -------------------------------------------------------------------------------- /Lineflow.m: -------------------------------------------------------------------------------- 1 | % This program is used in conjunction with lfgauss or lf Newton 2 | % for the computation of line flow and line losses. 3 | % 4 | % Copyright (c) 1998 H. Saadat 5 | SLT = 0; 6 | %fprintf('\n') 7 | %fprintf(' Line Flow and Losses \n\n') 8 | %fprintf(' --Line-- Power at bus & line flow --Line loss-- Transformer\n') 9 | %fprintf(' from to MW Mvar MVA MW Mvar tap\n') 10 | ddd=0; 11 | for n = 1:nbus 12 | busprt = 0; 13 | for L = 1:nbr; 14 | if busprt == 0 15 | %fprintf(' \n'), fprintf('%6g', n), fprintf(' %9.3f', P(n)*basemva) 16 | %fprintf('%9.3f', Q(n)*basemva), fprintf('%9.3f\n', abs(S(n)*basemva)) 17 | 18 | busprt = 1; 19 | else, end 20 | if nl(L)==n 21 | k = nr(L); 22 | In = (V(n) - a(L)*V(k))*y(L)/a(L)^2 + Bc(L)/a(L)^2*V(n); 23 | Ik = (V(k) - V(n)/a(L))*y(L) + Bc(L)*V(k); 24 | Snk = V(n)*conj(In)*basemva; 25 | Skn = V(k)*conj(Ik)*basemva; 26 | SL = Snk + Skn; 27 | SLT = SLT + SL; 28 | elseif nr(L)==n k = nl(L); 29 | In = (V(n) - V(k)/a(L))*y(L) + Bc(L)*V(n); 30 | Ik = (V(k) - a(L)*V(n))*y(L)/a(L)^2 + Bc(L)/a(L)^2*V(k); 31 | Snk = V(n)*conj(In)*basemva; 32 | Skn = V(k)*conj(Ik)*basemva; 33 | SL = Snk + Skn; 34 | SLT = SLT + SL; 35 | else, end 36 | if nl(L)==n | nr(L)==n 37 | ddd=ddd+1; 38 | S_line(ddd)=abs(Snk); 39 | %fprintf('%12g', k), 40 | %fprintf('%9.3f', real(Snk)), fprintf('%9.3f', imag(Snk)) 41 | %fprintf('%9.3f', abs(Snk)), 42 | %fprintf('%9.3f', real(SL)), 43 | %if nl(L) ==n & a(L) ~= 1 44 | %fprintf('%9.3f', imag(SL)), fprintf('%9.3f\n', a(L)) 45 | %else, fprintf('%9.3f\n', imag(SL)) 46 | %end 47 | else, end 48 | end 49 | end 50 | SLT = SLT/2; 51 | %fprintf(' \n'), fprintf(' Total loss ') 52 | %fprintf('%9.3f', real(SLT)), fprintf('%9.3f\n', imag(SLT)) 53 | Transmissionloss=real(SLT); 54 | clear Ik In SL SLT Skn Snk 55 | -------------------------------------------------------------------------------- /find_cost_final.m: -------------------------------------------------------------------------------- 1 | function [FT,pp,Trm_loss,MVA_line] = find_cost_final(p); 2 | Lf_ieee30bus_bygauss1; 3 | %Power generator 4 | busdata(2,7)=p(1); 5 | busdata(5,7)=p(2); 6 | busdata(8,7)=p(3); 7 | busdata(11,7)=p(4); 8 | busdata(13,7)=p(5); 9 | %Voltage of Gen 10 | busdata(1,3)=p(6); 11 | busdata(2,3)=p(7); 12 | busdata(5,3)=p(8); 13 | busdata(8,3)=p(9); 14 | busdata(11,3)=p(10); 15 | busdata(13,3)=p(11); 16 | %Transformer Tap 17 | linedata(11,6)=p(12); 18 | linedata(12,6)=p(13); 19 | linedata(15,6)=p(14); 20 | linedata(36,6)=p(15); 21 | %load flow 22 | 23 | Lfybus; % form the bus admittance matrix 24 | ss=3; 25 | switch ss 26 | case 1 27 | lfgauss; % Load flow solution by Gauss-Seidel method 28 | case 2 29 | decouple % Load flow solution by fast decoupled method 30 | case 3 31 | Lfnewton % Load flow solution by Newton-Raphson method 32 | end 33 | Busout; % Prints the power flow solution on the screen 34 | Lineflow; % Computes and displays the line flow and losses 35 | pp=[Pg(1);Pg(2);Pg(5);Pg(8);Pg(11);Pg(13)]; 36 | %find cost 37 | F = zeros(6,1); 38 | c = [0;0;0;0;0;0]; 39 | b = [2;1.75;1;3.25;3;3]; 40 | a = [0.00375;0.0175;0.0625;0.00834;0.02500;0.02500]; 41 | for i=1:6, 42 | F(i)=(a(i)*pp(i)^2)+b(i)*pp(i)+c(i); 43 | end 44 | FT = sum(F); 45 | % Gen1 constrain 46 | if pp(1)<50|pp(1)>200 47 | FT=FT+10000; 48 | end 49 | %line flow constrain 50 | MVA_line=S_line; 51 | if MVA_line(1)>130|MVA_line(2)>130|MVA_line(4)>65|MVA_line(8)>130|MVA_line(5)>130|MVA_line(6)>65|MVA_line(11)>90|... 52 | MVA_line(14)>70|MVA_line(17)>130|MVA_line(18)>32|MVA_line(19)>65|MVA_line(20)>32|MVA_line(27)>65|MVA_line(28)>65|MVA_line(12)>65|... 53 | MVA_line(37)>65|MVA_line(38)>32|MVA_line(39)>32|MVA_line(40)>32|MVA_line(43)>16|MVA_line(49)>16|MVA_line(46)>16|MVA_line(53)>16|... 54 | MVA_line(55)>32|MVA_line(31)>32|MVA_line(32)>32|MVA_line(33)>32|MVA_line(34)>32|MVA_line(59)>32|MVA_line(47)>16|MVA_line(62)>16|... 55 | MVA_line(64)>16|MVA_line(67)>16|MVA_line(69)>16|MVA_line(70)>16|MVA_line(76)>65|MVA_line(74)>16|MVA_line(75)>16|MVA_line(80)>16|MVA_line(25)>32|MVA_line(21)>32 56 | FT=FT+10000; 57 | end 58 | Trm_loss=Transmissionloss; 59 | %Line flow security 60 | 61 | %line loading constrain 62 | Trm_loss=Transmissionloss; 63 | if Trm_loss>100 64 | FT=FT+50*(Trm_loss-100); 65 | end 66 | % voltage contrain 67 | for kk=1:15 68 | if Vm(kk)>1.1|Vm(kk)<0.9 69 | FT=FT+1000; 70 | end 71 | 72 | end -------------------------------------------------------------------------------- /find_cost.m: -------------------------------------------------------------------------------- 1 | function FT = find_cost(p) 2 | Lf_ieee30bus_bygauss1; 3 | %Power generator 4 | busdata(2,7)=p(1); 5 | busdata(5,7)=p(2); 6 | busdata(8,7)=p(3); 7 | busdata(11,7)=p(4); 8 | busdata(13,7)=p(5); 9 | %Voltage of Gen 10 | busdata(1,3)=p(6); 11 | busdata(2,3)=p(7); 12 | busdata(5,3)=p(8); 13 | busdata(8,3)=p(9); 14 | busdata(11,3)=p(10); 15 | busdata(13,3)=p(11); 16 | %Transformer Tap 17 | linedata(11,6)=p(12); 18 | linedata(12,6)=p(13); 19 | linedata(15,6)=p(14); 20 | linedata(36,6)=p(15); 21 | 22 | 23 | Lfybus; % form the bus admittance matrix 24 | ss=3; 25 | switch ss 26 | case 1 27 | lfgauss; % Load flow solution by Gauss-Seidel method 28 | case 2 29 | decouple % Load flow solution by fast decoupled method 30 | case 3 31 | Lfnewton % Load flow solution by Newton-Raphson method 32 | end 33 | %busout; % Prints the power flow solution on the screen 34 | Lineflow; % Computes and displays the line flow and losses 35 | pp=[Pg(1);Pg(2);Pg(5);Pg(8);Pg(11);Pg(13)]; 36 | 37 | %find cost 38 | F = zeros(6,1); 39 | c = [0;0;0;0;0;0]; 40 | b = [2;1.75;1;3.25;3;3]; 41 | a = [0.00375;0.0175;0.0625;0.00834;0.02500;0.02500]; 42 | for i=1:6, 43 | F(i)=(a(i)*pp(i)^2)+b(i)*pp(i)+c(i); 44 | end 45 | FT = sum(F); 46 | % VAR constrain 47 | ppp=[Pg(1);Qg(1);Qg(2);Qg(5);Qg(8);Qg(11);Qg(13)]; 48 | if ppp(1)<50|ppp(1)>200|ppp(2)<-20|ppp(2)>200|ppp(3)<-20|ppp(3)>100|ppp(4)<-15|ppp(4)>80|ppp(5)<-15|ppp(5)>60|ppp(6)<-10|ppp(6)>50|ppp(7)<-15|ppp(7)>60 49 | FT=FT+10000; 50 | end 51 | %Line flow security 52 | 53 | %line loading constrain 54 | %Trm_loss=Transmissionloss; 55 | %if Trm_loss>100 56 | %FT=FT+50*(Trm_loss-100); 57 | %end 58 | 59 | MVA_line=S_line; 60 | if MVA_line(1)>130|MVA_line(2)>130|MVA_line(4)>65|MVA_line(8)>130|MVA_line(5)>130|MVA_line(6)>65|MVA_line(11)>90|... 61 | MVA_line(14)>70|MVA_line(17)>130|MVA_line(18)>32|MVA_line(19)>65|MVA_line(20)>32|MVA_line(27)>65|MVA_line(28)>65|MVA_line(12)>65|... 62 | MVA_line(37)>65|MVA_line(38)>32|MVA_line(39)>32|MVA_line(40)>32|MVA_line(43)>16|MVA_line(49)>16|MVA_line(46)>16|MVA_line(53)>16|... 63 | MVA_line(55)>32|MVA_line(31)>32|MVA_line(32)>32|MVA_line(33)>32|MVA_line(34)>32|MVA_line(59)>32|MVA_line(47)>16|MVA_line(62)>16|... 64 | MVA_line(64)>16|MVA_line(67)>16|MVA_line(69)>16|MVA_line(70)>16|MVA_line(76)>65|MVA_line(74)>16|MVA_line(75)>16|MVA_line(80)>16|MVA_line(25)>32|MVA_line(21)>32 65 | FT=FT+10000; 66 | % disp('Over LineFlow') 67 | end 68 | Vm_max=1.1; 69 | Vm_min=0.9; 70 | kv=10000; 71 | for kk=1:15 72 | if Vm(kk)>Vm_max 73 | FT=FT+kv*(Vm(kk)-Vm_max)^2; 74 | elseif Vm(kk) 1 or < 1 tr. tap at bus nl 40 | linedata=[1 2 0.0192 0.0575 0.02640 1 41 | 1 3 0.0452 0.1852 0.02040 1 42 | 2 4 0.0570 0.1737 0.01840 1 43 | 3 4 0.0132 0.0379 0.00420 1 44 | 2 5 0.0472 0.1983 0.02090 1 45 | 2 6 0.0581 0.1763 0.01870 1 46 | 4 6 0.0119 0.0414 0.00450 1 47 | 5 7 0.0460 0.1160 0.01020 1 48 | 6 7 0.0267 0.0820 0.00850 1 49 | 6 8 0.0120 0.0420 0.00450 1 50 | 6 9 0.0 0.2080 0.0 0.978 51 | 6 10 0 .5560 0 0.969 52 | 9 11 0 .2080 0 1 53 | 9 10 0 .1100 0 1 54 | 4 12 0 .2560 0 0.932 55 | 12 13 0 .1400 0 1 56 | 12 14 .1231 .2559 0 1 57 | 12 15 .0662 .1304 0 1 58 | 12 16 .0945 .1987 0 1 59 | 14 15 .2210 .1997 0 1 60 | 16 17 .0824 .1923 0 1 61 | 15 18 .1073 .2185 0 1 62 | 18 19 .0639 .1292 0 1 63 | 19 20 .0340 .0680 0 1 64 | 10 20 .0936 .2090 0 1 65 | 10 17 .0324 .0845 0 1 66 | 10 21 .0348 .0749 0 1 67 | 10 22 .0727 .1499 0 1 68 | 21 22 .0116 .0236 0 1 69 | 15 23 .1000 .2020 0 1 70 | 22 24 .1150 .1790 0 1 71 | 23 24 .1320 .2700 0 1 72 | 24 25 .1885 .3292 0 1 73 | 25 26 .2544 .3800 0 1 74 | 25 27 .1093 .2087 0 1 75 | 28 27 0 .3960 0 0.968 76 | 27 29 .2198 .4153 0 1 77 | 27 30 .3202 .6027 0 1 78 | 29 30 .2399 .4533 0 1 79 | 8 28 .0636 .2000 0.0214 1 80 | 6 28 .0169 .0599 0.065 1]; 81 | 82 | -------------------------------------------------------------------------------- /Lf_ieee30bus_bygauss1.m: -------------------------------------------------------------------------------- 1 | basemva = 100; accuracy = 0.001; accel = 1.8; maxiter = 200; 2 | 3 | % IEEE 30-BUS TEST SYSTEM (American Electric Power) 4 | % Bus Bus Voltage Angle ---Load---- -------Generator----- Static Mvar 5 | % No code Mag. Degree MW Mvar MW Mvar Qmin Qmax +Qc/-Ql 6 | busdata=[1 1 1.06 0.0 0.0 0.0 0.0 0.0 -20 200 0 7 | 2 2 1.043 0.0 21.70 12.7 40.0 0.0 -20 100 0 8 | 3 0 1.0 0.0 2.4 1.2 0.0 0.0 0 0 0 9 | 4 0 1.06 0.0 7.6 1.6 0.0 0.0 0 0 0 10 | 5 2 1.01 0.0 94.2 19.0 0.0 0.0 -15 80 0 11 | 6 0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 12 | 7 0 1.0 0.0 22.8 10.9 0.0 0.0 0 0 0 13 | 8 2 1.01 0.0 30.0 30.0 0.0 0.0 -15 60 0 14 | 9 0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 15 | 10 0 1.0 0.0 5.8 2.0 0.0 0.0 0 0 19 16 | 11 2 1.082 0.0 0.0 0.0 0.0 0.0 -10 50 0 17 | 12 0 1.0 0 11.2 7.5 0 0 0 0 0 18 | 13 2 1.071 0 0 0.0 0 0 -15 60 0 19 | 14 0 1 0 6.2 1.6 0 0 0 0 0 20 | 15 0 1 0 8.2 2.5 0 0 0 0 0 21 | 16 0 1 0 3.5 1.8 0 0 0 0 0 22 | 17 0 1 0 9.0 5.8 0 0 0 0 0 23 | 18 0 1 0 3.2 0.9 0 0 0 0 0 24 | 19 0 1 0 9.5 3.4 0 0 0 0 0 25 | 20 0 1 0 2.2 0.7 0 0 0 0 0 26 | 21 0 1 0 17.5 11.2 0 0 0 0 0 27 | 22 0 1 0 0 0.0 0 0 0 0 0 28 | 23 0 1 0 3.2 1.6 0 0 0 0 0 29 | 24 0 1 0 8.7 6.7 0 0 0 0 4.3 30 | 25 0 1 0 0 0.0 0 0 0 0 0 31 | 26 0 1 0 3.5 2.3 0 0 0 0 0 32 | 27 0 1 0 0 0.0 0 0 0 0 0 33 | 28 0 1 0 0 0.0 0 0 0 0 0 34 | 29 0 1 0 2.4 0.9 0 0 0 0 0 35 | 30 0 1 0 10.6 1.9 0 0 0 0 0]; 36 | 37 | % Line code 38 | % Bus bus R X 1/2 B = 1 for lines 39 | % nl nr p.u. p.u. p.u. > 1 or < 1 tr. tap at bus nl 40 | linedata=[1 2 0.0192 0.0575 0.02640 1 41 | 1 3 0.0452 0.1852 0.02040 1 42 | 2 4 0.0570 0.1737 0.01840 1 43 | 3 4 0.0132 0.0379 0.00420 1 44 | 2 5 0.0472 0.1983 0.02090 1 45 | 2 6 0.0581 0.1763 0.01870 1 46 | 4 6 0.0119 0.0414 0.00450 1 47 | 5 7 0.0460 0.1160 0.01020 1 48 | 6 7 0.0267 0.0820 0.00850 1 49 | 6 8 0.0120 0.0420 0.00450 1 50 | 6 9 0.0 0.2080 0.0 0.978 51 | 6 10 0 .5560 0 0.969 52 | 9 11 0 .2080 0 1 53 | 9 10 0 .1100 0 1 54 | 4 12 0 .2560 0 0.932 55 | 12 13 0 .1400 0 1 56 | 12 14 .1231 .2559 0 1 57 | 12 15 .0662 .1304 0 1 58 | 12 16 .0945 .1987 0 1 59 | 14 15 .2210 .1997 0 1 60 | 16 17 .0824 .1923 0 1 61 | 15 18 .1073 .2185 0 1 62 | 18 19 .0639 .1292 0 1 63 | 19 20 .0340 .0680 0 1 64 | 10 20 .0936 .2090 0 1 65 | 10 17 .0324 .0845 0 1 66 | 10 21 .0348 .0749 0 1 67 | 10 22 .0727 .1499 0 1 68 | 21 22 .0116 .0236 0 1 69 | 15 23 .1000 .2020 0 1 70 | 22 24 .1150 .1790 0 1 71 | 23 24 .1320 .2700 0 1 72 | 24 25 .1885 .3292 0 1 73 | 25 26 .2544 .3800 0 1 74 | 25 27 .1093 .2087 0 1 75 | 28 27 0 .3960 0 0.968 76 | 27 29 .2198 .4153 0 1 77 | 27 30 .3202 .6027 0 1 78 | 29 30 .2399 .4533 0 1 79 | 8 28 .0636 .2000 0.0214 1 80 | 6 28 .0169 .0599 0.065 1]; 81 | 82 | -------------------------------------------------------------------------------- /Lf_ieee30bus_bygauss1.asv: -------------------------------------------------------------------------------- 1 | basemva = 100; accuracy = 0.001; accel = 1.8; maxiter = 200; 2 | 3 | % IEEE 30-BUS TEST SYSTEM (American Electric Power) 4 | % Bus Bus Voltage Angle ---Load---- -------Generator----- Static Mvar 5 | % No code Mag. Degree MW Mvar MW Mvar Qmin Qmax +Qc/-Ql 6 | busdata=[1 1 1.06 0.0 0.0 0.0 0.0 0.0 -20 200 0 7 | 2 2 1.043 0.0 21.70 12.7 40.0 0.0 -20 100 0 8 | 3 0 1.0 0.0 2.4 1.2 0.0 0.0 0 0 0 9 | 4 0 1.06 0.0 7.6 1.6 0.0 0.0 0 0 0 10 | 5 2 1.01 0.0 94.2 19.0 0.0 0.0 -15 80 0 11 | 6 0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 12 | 7 0 1.0 0.0 22.8 10.9 0.0 0.0 0 0 0 13 | 8 2 1.01 0.0 30.0 30.0 0.0 0.0 -15 60 0 14 | 9 0 1.0 0.0 0.0 0.0 0.0 0.0 0 0 0 15 | 10 0 1.0 0.0 5.8 2.0 0.0 0.0 -6 24 19 16 | 11 2 1.082 0.0 0.0 0.0 0.0 0.0 0 0 0 17 | 12 0 1.0 0 11.2 7.5 0 0 0 0 0 18 | 13 2 1.071 0 0 0.0 0 0 -6 24 0 19 | 14 0 1 0 6.2 1.6 0 0 0 0 0 20 | 15 0 1 0 8.2 2.5 0 0 0 0 0 21 | 16 0 1 0 3.5 1.8 0 0 0 0 0 22 | 17 0 1 0 9.0 5.8 0 0 0 0 0 23 | 18 0 1 0 3.2 0.9 0 0 0 0 0 24 | 19 0 1 0 9.5 3.4 0 0 0 0 0 25 | 20 0 1 0 2.2 0.7 0 0 0 0 0 26 | 21 0 1 0 17.5 11.2 0 0 0 0 0 27 | 22 0 1 0 0 0.0 0 0 0 0 0 28 | 23 0 1 0 3.2 1.6 0 0 0 0 0 29 | 24 0 1 0 8.7 6.7 0 0 0 0 4.3 30 | 25 0 1 0 0 0.0 0 0 0 0 0 31 | 26 0 1 0 3.5 2.3 0 0 0 0 0 32 | 27 0 1 0 0 0.0 0 0 0 0 0 33 | 28 0 1 0 0 0.0 0 0 0 0 0 34 | 29 0 1 0 2.4 0.9 0 0 0 0 0 35 | 30 0 1 0 10.6 1.9 0 0 0 0 0]; 36 | 37 | % Line code 38 | % Bus bus R X 1/2 B = 1 for lines 39 | % nl nr p.u. p.u. p.u. > 1 or < 1 tr. tap at bus nl 40 | linedata=[1 2 0.0192 0.0575 0.02640 1 41 | 1 3 0.0452 0.1852 0.02040 1 42 | 2 4 0.0570 0.1737 0.01840 1 43 | 3 4 0.0132 0.0379 0.00420 1 44 | 2 5 0.0472 0.1983 0.02090 1 45 | 2 6 0.0581 0.1763 0.01870 1 46 | 4 6 0.0119 0.0414 0.00450 1 47 | 5 7 0.0460 0.1160 0.01020 1 48 | 6 7 0.0267 0.0820 0.00850 1 49 | 6 8 0.0120 0.0420 0.00450 1 50 | 6 9 0.0 0.2080 0.0 0.978 51 | 6 10 0 .5560 0 0.969 52 | 9 11 0 .2080 0 1 53 | 9 10 0 .1100 0 1 54 | 4 12 0 .2560 0 0.932 55 | 12 13 0 .1400 0 1 56 | 12 14 .1231 .2559 0 1 57 | 12 15 .0662 .1304 0 1 58 | 12 16 .0945 .1987 0 1 59 | 14 15 .2210 .1997 0 1 60 | 16 17 .0824 .1923 0 1 61 | 15 18 .1073 .2185 0 1 62 | 18 19 .0639 .1292 0 1 63 | 19 20 .0340 .0680 0 1 64 | 10 20 .0936 .2090 0 1 65 | 10 17 .0324 .0845 0 1 66 | 10 21 .0348 .0749 0 1 67 | 10 22 .0727 .1499 0 1 68 | 21 22 .0116 .0236 0 1 69 | 15 23 .1000 .2020 0 1 70 | 22 24 .1150 .1790 0 1 71 | 23 24 .1320 .2700 0 1 72 | 24 25 .1885 .3292 0 1 73 | 25 26 .2544 .3800 0 1 74 | 25 27 .1093 .2087 0 1 75 | 28 27 0 .3960 0 0.968 76 | 27 29 .2198 .4153 0 1 77 | 27 30 .3202 .6027 0 1 78 | 29 30 .2399 .4533 0 1 79 | 8 28 .0636 .2000 0.0214 1 80 | 6 28 .0169 .0599 0.065 1]; 81 | 82 | -------------------------------------------------------------------------------- /Lfgauss.m: -------------------------------------------------------------------------------- 1 | % Power flow solution by Gauss-Seidel method 2 | % Copyright (c) 1998 by H. Saadat 3 | % Revision 1 (Aug. 99) Modified to include two or more parallel lines 4 | Vm=0; delta=0; yload=0; deltad =0; 5 | nbus = length(busdata(:,1)); 6 | kb=[];Vm=[]; delta=[]; Pd=[]; Qd=[]; Pg=[]; Qg=[]; Qmin=[]; Qmax=[]; % Added (6-8-00) 7 | Pk=[]; P=[]; Qk=[]; Q=[]; S=[]; V=[]; % Added (6-8-00) 8 | for k=1:nbus 9 | n=busdata(k,1); 10 | kb(n)=busdata(k,2); Vm(n)=busdata(k,3); delta(n)=busdata(k, 4); 11 | Pd(n)=busdata(k,5); Qd(n)=busdata(k,6); Pg(n)=busdata(k,7); Qg(n) = busdata(k,8); 12 | Qmin(n)=busdata(k, 9); Qmax(n)=busdata(k, 10); 13 | Qsh(n)=busdata(k, 11); 14 | if Vm(n) <= 0 Vm(n) = 1.0; V(n) = 1 + j*0; 15 | else delta(n) = pi/180*delta(n); 16 | V(n) = Vm(n)*(cos(delta(n)) + j*sin(delta(n))); 17 | P(n)=(Pg(n)-Pd(n))/basemva; 18 | Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva; 19 | S(n) = P(n) + j*Q(n); 20 | end 21 | DV(n)=0; 22 | end 23 | num = 0; AcurBus = 0; converge = 1; 24 | Vc = zeros(nbus,1)+j*zeros(nbus,1); Sc = zeros(nbus,1)+j*zeros(nbus,1); 25 | 26 | while exist('accel')~=1 27 | accel = 1.3; 28 | end 29 | while exist('accuracy')~=1 30 | accuracy = 0.001; 31 | end 32 | while exist('basemva')~=1 33 | basemva= 100; 34 | end 35 | while exist('maxiter')~=1 36 | maxiter = 100; 37 | end 38 | %%%% added for parallel lines (Aug. 99) 39 | mline=ones(nbr,1); 40 | for k=1:nbr 41 | for m=k+1:nbr 42 | if((nl(k)==nl(m)) & (nr(k)==nr(m))); 43 | mline(m)=2; 44 | elseif ((nl(k)==nr(m)) & (nr(k)==nl(m))); 45 | mline(m)=2; 46 | else, end 47 | end 48 | end 49 | %%% end of statements for parallel lines (Aug. 99) 50 | iter=0; 51 | maxerror=10; 52 | while maxerror >= accuracy & iter <= maxiter 53 | iter=iter+1; 54 | for n = 1:nbus; 55 | YV = 0+j*0; 56 | for L = 1:nbr; 57 | if (nl(L) == n & mline(L) == 1), k=nr(L); %modified to handle parallel lines (Aug. 99) 58 | YV = YV + Ybus(n,k)*V(k); 59 | elseif (nr(L) == n & mline(L)==1), k=nl(L); %modified to handle parallel lines (Aug. 99) 60 | YV = YV + Ybus(n,k)*V(k); 61 | end 62 | end 63 | Sc = conj(V(n))*(Ybus(n,n)*V(n) + YV) ; 64 | Sc = conj(Sc); 65 | DP(n) = P(n) - real(Sc); 66 | DQ(n) = Q(n) - imag(Sc); 67 | if kb(n) == 1 68 | S(n) =Sc; P(n) = real(Sc); Q(n) = imag(Sc); DP(n) =0; DQ(n)=0; 69 | Vc(n) = V(n); 70 | elseif kb(n) == 2 71 | Q(n) = imag(Sc); S(n) = P(n) + j*Q(n); 72 | 73 | if Qmax(n) ~= 0 74 | Qgc = Q(n)*basemva + Qd(n) - Qsh(n); 75 | if abs(DQ(n)) <= .005 & iter >= 10 % After 10 iterations 76 | if DV(n) <= 0.045 % the Mvar of generator buses are 77 | if Qgc < Qmin(n), % tested. If not within limits Vm(n) 78 | Vm(n) = Vm(n) + 0.005; % is changed in steps of 0.005 pu 79 | DV(n) = DV(n)+.005; % up to .05 pu in order to bring 80 | elseif Qgc > Qmax(n), % the generator Mvar within the 81 | Vm(n) = Vm(n) - 0.005; % specified limits. 82 | DV(n)=DV(n)+.005; end 83 | else, end 84 | else,end 85 | else,end 86 | end 87 | if kb(n) ~= 1 88 | Vc(n) = (conj(S(n))/conj(V(n)) - YV )/ Ybus(n,n); 89 | else, end 90 | if kb(n) == 0 91 | V(n) = V(n) + accel*(Vc(n)-V(n)); 92 | elseif kb(n) == 2 93 | VcI = imag(Vc(n)); 94 | VcR = sqrt(Vm(n)^2 - VcI^2); 95 | Vc(n) = VcR + j*VcI; 96 | V(n) = V(n) + accel*(Vc(n) -V(n)); 97 | end 98 | end 99 | maxerror=max( max(abs(real(DP))), max(abs(imag(DQ))) ); 100 | if iter == maxiter & maxerror > accuracy 101 | %fprintf('\nWARNING: Iterative solution did not converged after ') 102 | %fprintf('%g', iter), fprintf(' iterations.\n\n') 103 | %fprintf('Press Enter to terminate the iterations and print the results \n') 104 | converge = 0; 105 | else 106 | end 107 | 108 | end 109 | if converge ~= 1 110 | tech= (' ITERATIVE SOLUTION DID NOT CONVERGE'); else, 111 | tech=(' Power Flow Solution by Gauss-Seidel Method'); 112 | end 113 | k=0; 114 | for n = 1:nbus 115 | Vm(n) = abs(V(n)); deltad(n) = angle(V(n))*180/pi; 116 | if kb(n) == 1 117 | S(n)=P(n)+j*Q(n); 118 | Pg(n) = P(n)*basemva + Pd(n); 119 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 120 | k=k+1; 121 | Pgg(k)=Pg(n); 122 | elseif kb(n) ==2 123 | k=k+1; 124 | Pgg(k)=Pg(n); 125 | S(n)=P(n)+j*Q(n); 126 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 127 | end 128 | yload(n) = (Pd(n)- j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2); 129 | end 130 | Pgt = sum(Pg); Qgt = sum(Qg); Pdt = sum(Pd); Qdt = sum(Qd); Qsht = sum(Qsh); 131 | busdata(:,3)=Vm'; busdata(:,4)=deltad'; 132 | clear AcurBus DP DQ DV L Sc Vc VcI VcR YV converge delta 133 | -------------------------------------------------------------------------------- /Decouple.m: -------------------------------------------------------------------------------- 1 | % Fast Decoupled Power Flow Solution 2 | % Copyright (c)1998 by Hadi Saadat. 3 | % Revision 1 (Aug. 99 ) Modified to include two or more parallel lines 4 | ns=0; Vm=0; delta=0; yload=0; deltad=0; 5 | nbus = length(busdata(:,1)); 6 | kb=[];Vm=[]; delta=[]; Pd=[]; Qd=[]; Pg=[]; Qg=[]; Qmin=[]; Qmax=[]; % Added (6-8-00) 7 | Pk=[]; P=[]; Qk=[]; Q=[]; S=[]; V=[]; % Added (6-8-00) 8 | for k=1:nbus 9 | n=busdata(k,1); 10 | kb(n)=busdata(k,2); Vm(n)=busdata(k,3); delta(n)=busdata(k, 4); 11 | Pd(n)=busdata(k,5); Qd(n)=busdata(k,6); Pg(n)=busdata(k,7); Qg(n) = busdata(k,8); 12 | Qmin(n)=busdata(k, 9); Qmax(n)=busdata(k, 10); 13 | Qsh(n)=busdata(k, 11); 14 | if Vm(n) <= 0 Vm(n) = 1.0; V(n) = 1 + j*0; 15 | else delta(n) = pi/180*delta(n); 16 | V(n) = Vm(n)*(cos(delta(n)) + j*sin(delta(n))); 17 | P(n)=(Pg(n)-Pd(n))/basemva; 18 | Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva; 19 | S(n) = P(n) + j*Q(n); 20 | end 21 | if kb(n) == 1, ns = ns+1; else, end 22 | nss(n) = ns; 23 | end 24 | Ym = abs(Ybus); t = angle(Ybus); 25 | ii=0; 26 | for ib=1:nbus 27 | if kb(ib) == 0 | kb(ib) == 2 28 | ii = ii+1; 29 | jj=0; 30 | for jb=1:nbus 31 | if kb(jb) == 0 | kb(jb) == 2 32 | jj = jj+1; 33 | B1(ii,jj)=imag(Ybus(ib,jb)); 34 | else,end 35 | end 36 | else, end 37 | end 38 | 39 | ii=0; 40 | for ib=1:nbus 41 | if kb(ib) == 0 42 | ii = ii+1; 43 | jj=0; 44 | for jb=1:nbus 45 | if kb(jb) == 0 46 | jj = jj+1; 47 | B2(ii,jj)=imag(Ybus(ib,jb)); 48 | else,end 49 | end 50 | else, end 51 | end 52 | B1inv=inv(B1); B2inv = inv(B2); 53 | 54 | maxerror = 1; converge = 1; 55 | iter = 0; 56 | %%%% added for parallel lines (Aug. 99) 57 | mline=ones(nbr,1); 58 | for k=1:nbr 59 | for m=k+1:nbr 60 | if((nl(k)==nl(m)) & (nr(k)==nr(m))); 61 | mline(m)=2; 62 | elseif ((nl(k)==nr(m)) & (nr(k)==nl(m))); 63 | mline(m)=2; 64 | else, end 65 | end 66 | end 67 | %%% end of statements for parallel lines (Aug. 99) 68 | 69 | % Start of iterations 70 | while maxerror >= accuracy & iter <= maxiter % Test for max. power mismatch 71 | iter = iter+1; 72 | id=0; iv=0; 73 | for n=1:nbus 74 | nn=n-nss(n); 75 | J11=0; J33=0; 76 | for ii=1:nbr 77 | if mline(ii)==1 % Added to include parallel lines (Aug. 99) 78 | if nl(ii) == n | nr(ii) == n 79 | if nl(ii) == n, l = nr(ii); end 80 | if nr(ii) == n, l = nl(ii); end 81 | J11=J11+ Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 82 | J33=J33+ Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l)); 83 | else , end 84 | else, end 85 | end 86 | Pk = Vm(n)^2*Ym(n,n)*cos(t(n,n))+J33; 87 | Qk = -Vm(n)^2*Ym(n,n)*sin(t(n,n))-J11; 88 | if kb(n) == 1 P(n)=Pk; Q(n) = Qk; end % Swing bus P 89 | if kb(n) == 2 Q(n)=Qk; 90 | Qgc = Q(n)*basemva + Qd(n) - Qsh(n); 91 | if Qmax(n) ~= 0 92 | if iter <= 20 % Between the 1th & 6th iterations 93 | if iter >= 10 % the Mvar of generator buses are 94 | if Qgc < Qmin(n), % tested. If not within limits Vm(n) 95 | Vm(n) = Vm(n) + 0.005; % is changed in steps of 0.05 pu to 96 | elseif Qgc > Qmax(n), % bring the generator Mvar within 97 | Vm(n) = Vm(n) - 0.005;end % the specified limits. 98 | else, end 99 | else,end 100 | else,end 101 | end 102 | if kb(n) ~= 1 103 | id = id+1; 104 | DP(id) = P(n)-Pk; 105 | DPV(id) = (P(n)-Pk)/Vm(n); 106 | end 107 | if kb(n) == 0 108 | iv=iv+1; 109 | DQ(iv) = Q(n)-Qk; 110 | DQV(iv) = (Q(n)-Qk)/Vm(n); 111 | end 112 | end 113 | Dd=-B1\DPV'; 114 | DV=-B2\DQV'; 115 | id=0;iv=0; 116 | for n=1:nbus 117 | if kb(n) ~= 1 118 | id = id+1; 119 | delta(n) = delta(n)+Dd(id); end 120 | if kb(n) == 0 121 | iv = iv+1; 122 | Vm(n)=Vm(n)+DV(iv); end 123 | end 124 | maxerror=max(max(abs(DP)),max(abs(DQ))); 125 | if iter == maxiter & maxerror > accuracy 126 | %fprintf('\nWARNING: Iterative solution did not converged after ') 127 | % fprintf('%g', iter), fprintf(' iterations.\n\n') 128 | %fprintf('Press Enter to terminate the iterations and print the results \n') 129 | % converge = 0; pause, 130 | else, end 131 | 132 | end 133 | if converge ~= 1 134 | tech= (' ITERATIVE SOLUTION DID NOT CONVERGE'); else, 135 | tech=(' Power Flow Solution by Fast Decoupled Method'); 136 | end 137 | k=0; 138 | V = Vm.*cos(delta)+j*Vm.*sin(delta); 139 | deltad=180/pi*delta; 140 | clear A; clear DC; clear DX 141 | i=sqrt(-1); 142 | for n = 1:nbus 143 | if kb(n) == 1 144 | S(n)=P(n)+j*Q(n); 145 | Pg(n) = P(n)*basemva + Pd(n); 146 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 147 | k=k+1; 148 | Pgg(k)=Pg(n); 149 | elseif kb(n) ==2 150 | S(n)=P(n)+j*Q(n); 151 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 152 | k=k+1; 153 | Pgg(k)=Pg(n); 154 | end 155 | yload(n) = (Pd(n)- j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2); 156 | end 157 | busdata(:,3)=Vm'; busdata(:,4)=deltad'; 158 | Pgt = sum(Pg); Qgt = sum(Qg); Pdt = sum(Pd); Qdt = sum(Qd); Qsht = sum(Qsh); 159 | clear Pk Qk DP DQ J11 J33 B1 B1inv B2 B2inv DPV DQV Dd delta ib id ii iv jb jj 160 | -------------------------------------------------------------------------------- /Lfnewton.m: -------------------------------------------------------------------------------- 1 | % Power flow solution by Newton-Raphson method 2 | % Copyright (c) 1998 by H. Saadat 3 | % Revision 1 (Aug. 99) To include two or more parallel lines 4 | ns=0; ng=0; Vm=0; delta=0; yload=0; deltad=0; 5 | nbus = length(busdata(:,1)); 6 | kb=[];Vm=[]; delta=[]; Pd=[]; Qd=[]; Pg=[]; Qg=[]; Qmin=[]; Qmax=[]; % Added (6-8-00) 7 | Pk=[]; P=[]; Qk=[]; Q=[]; S=[]; V=[]; % Added (6-8-00) 8 | for k=1:nbus 9 | n=busdata(k,1); 10 | kb(n)=busdata(k,2); Vm(n)=busdata(k,3); delta(n)=busdata(k, 4); 11 | Pd(n)=busdata(k,5); Qd(n)=busdata(k,6); Pg(n)=busdata(k,7); Qg(n) = busdata(k,8); 12 | Qmin(n)=busdata(k, 9); Qmax(n)=busdata(k, 10); 13 | Qsh(n)=busdata(k, 11); 14 | if Vm(n) <= 0 Vm(n) = 1.0; V(n) = 1 + j*0; 15 | else delta(n) = pi/180*delta(n); 16 | V(n) = Vm(n)*(cos(delta(n)) + j*sin(delta(n))); 17 | P(n)=(Pg(n)-Pd(n))/basemva; 18 | Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva; 19 | S(n) = P(n) + j*Q(n); 20 | end 21 | end 22 | for k=1:nbus 23 | if kb(k) == 1, ns = ns+1; else, end 24 | if kb(k) == 2 ng = ng+1; else, end 25 | ngs(k) = ng; 26 | nss(k) = ns; 27 | end 28 | Ym=abs(Ybus); t = angle(Ybus); 29 | m=2*nbus-ng-2*ns; 30 | maxerror = 1; converge=1; 31 | iter = 0; 32 | %%%% added for parallel lines (Aug. 99) 33 | mline=ones(nbr,1); 34 | for k=1:nbr 35 | for m=k+1:nbr 36 | if((nl(k)==nl(m)) & (nr(k)==nr(m))); 37 | mline(m)=2; 38 | elseif ((nl(k)==nr(m)) & (nr(k)==nl(m))); 39 | mline(m)=2; 40 | else, end 41 | end 42 | end 43 | %%% end of statements for parallel lines (Aug. 99) 44 | 45 | % Start of iterations 46 | clear A DC J DX 47 | while maxerror >= accuracy & iter <= maxiter % Test for max. power mismatch 48 | for ii=1:m 49 | for k=1:m 50 | A(ii,k)=0; %Initializing Jacobian matrix 51 | end, end 52 | iter = iter+1; 53 | for n=1:nbus 54 | nn=n-nss(n); 55 | lm=nbus+n-ngs(n)-nss(n)-ns; 56 | J11=0; J22=0; J33=0; J44=0; 57 | for ii=1:nbr 58 | if mline(ii)==1 % Added to include parallel lines (Aug. 99) 59 | if nl(ii) == n | nr(ii) == n 60 | if nl(ii) == n , l = nr(ii); end 61 | if nr(ii) == n , l = nl(ii); end 62 | J11=J11+ Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 63 | J33=J33+ Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l)); 64 | if kb(n)~=1 65 | J22=J22+ Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l)); 66 | J44=J44+ Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 67 | else, end 68 | if kb(n) ~= 1 & kb(l) ~=1 69 | lk = nbus+l-ngs(l)-nss(l)-ns; 70 | ll = l -nss(l); 71 | % off diagonalelements of J1 72 | A(nn, ll) =-Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 73 | if kb(l) == 0 % off diagonal elements of J2 74 | A(nn, lk) =Vm(n)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l));end 75 | if kb(n) == 0 % off diagonal elements of J3 76 | A(lm, ll) =-Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n)+delta(l)); end 77 | if kb(n) == 0 & kb(l) == 0 % off diagonal elements of J4 78 | A(lm, lk) =-Vm(n)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l));end 79 | else end 80 | else , end 81 | else, end 82 | end 83 | Pk = Vm(n)^2*Ym(n,n)*cos(t(n,n))+J33; 84 | Qk = -Vm(n)^2*Ym(n,n)*sin(t(n,n))-J11; 85 | if kb(n) == 1 P(n)=Pk; Q(n) = Qk; end % Swing bus P 86 | if kb(n) == 2 Q(n)=Qk; 87 | if Qmax(n) ~= 0 88 | Qgc = Q(n)*basemva + Qd(n) - Qsh(n); 89 | if iter <= 7 % Between the 2th & 6th iterations 90 | if iter > 2 % the Mvar of generator buses are 91 | if Qgc < Qmin(n), % tested. If not within limits Vm(n) 92 | Vm(n) = Vm(n) + 0.01; % is changed in steps of 0.01 pu to 93 | elseif Qgc > Qmax(n), % bring the generator Mvar within 94 | Vm(n) = Vm(n) - 0.01;end % the specified limits. 95 | else, end 96 | else,end 97 | else,end 98 | end 99 | if kb(n) ~= 1 100 | A(nn,nn) = J11; %diagonal elements of J1 101 | DC(nn) = P(n)-Pk; 102 | end 103 | if kb(n) == 0 104 | A(nn,lm) = 2*Vm(n)*Ym(n,n)*cos(t(n,n))+J22; %diagonal elements of J2 105 | A(lm,nn)= J33; %diagonal elements of J3 106 | A(lm,lm) =-2*Vm(n)*Ym(n,n)*sin(t(n,n))-J44; %diagonal of elements of J4 107 | DC(lm) = Q(n)-Qk; 108 | end 109 | end 110 | DX=A\DC'; 111 | for n=1:nbus 112 | nn=n-nss(n); 113 | lm=nbus+n-ngs(n)-nss(n)-ns; 114 | if kb(n) ~= 1 115 | delta(n) = delta(n)+DX(nn); end 116 | if kb(n) == 0 117 | Vm(n)=Vm(n)+DX(lm); end 118 | end 119 | maxerror=max(abs(DC)); 120 | if iter == maxiter & maxerror > accuracy 121 | % fprintf('\nWARNING: Iterative solution did not converged after ') 122 | %fprintf('%g', iter), fprintf(' iterations.\n\n') 123 | %fprintf('Press Enter to terminate the iterations and print the results \n') 124 | %converge = 0; pause, 125 | else, end 126 | 127 | end 128 | 129 | if converge ~= 1 130 | tech= (' ITERATIVE SOLUTION DID NOT CONVERGE'); else, 131 | tech=(' Power Flow Solution by Newton-Raphson Method'); 132 | end 133 | V = Vm.*cos(delta)+j*Vm.*sin(delta); 134 | deltad=180/pi*delta; 135 | i=sqrt(-1); 136 | k=0; 137 | for n = 1:nbus 138 | if kb(n) == 1 139 | k=k+1; 140 | S(n)= P(n)+j*Q(n); 141 | Pg(n) = P(n)*basemva + Pd(n); 142 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 143 | Pgg(k)=Pg(n); 144 | Qgg(k)=Qg(n); %june 97 145 | elseif kb(n) ==2 146 | k=k+1; 147 | S(n)=P(n)+j*Q(n); 148 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 149 | Pgg(k)=Pg(n); 150 | Qgg(k)=Qg(n); % June 1997 151 | end 152 | yload(n) = (Pd(n)- j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2); 153 | end 154 | busdata(:,3)=Vm'; busdata(:,4)=deltad'; 155 | Pgt = sum(Pg); Qgt = sum(Qg); Pdt = sum(Pd); Qdt = sum(Qd); Qsht = sum(Qsh); 156 | 157 | %clear A DC DX J11 J22 J33 J44 Qk delta lk ll lm 158 | %clear A DC DX J11 J22 J33 Qk delta lk ll lm 159 | -------------------------------------------------------------------------------- /Lfnewton_Lid.m: -------------------------------------------------------------------------------- 1 | % Power flow solution by Newton-Raphson method 2 | % Copyright (c) 1998 by H. Saadat 3 | % Revision 1 (Aug. 99) To include two or more parallel lines 4 | 5 | 6 | ns=0; ng=0; Vm=0; delta=0; yload=0; deltad=0; 7 | nbus = length(busdata(:,1)); 8 | kb=[];Vm=[]; delta=[]; Pd=[]; Qd=[]; Pg=[]; Qg=[]; Qmin=[]; Qmax=[]; % Added (6-8-00) 9 | Pk=[]; P=[]; Qk=[]; Q=[]; S=[]; V=[]; % Added (6-8-00) 10 | for k=1:nbus 11 | n=busdata(k,1); 12 | kb(n)=busdata(k,2); Vm(n)=busdata(k,3); delta(n)=busdata(k, 4); 13 | Pd(n)=busdata(k,5); Qd(n)=busdata(k,6); Pg(n)=busdata(k,7); Qg(n) = busdata(k,8); 14 | Qmin(n)=busdata(k, 9); Qmax(n)=busdata(k, 10); 15 | Qsh(n)=busdata(k, 11); 16 | if Vm(n) <= 0 Vm(n) = 1.0; V(n) = 1 + j*0; 17 | else delta(n) = pi/180*delta(n); 18 | V(n) = Vm(n)*(cos(delta(n)) + j*sin(delta(n))); 19 | P(n)=(Pg(n)-Pd(n))/basemva; 20 | Q(n)=(Qg(n)-Qd(n)+ Qsh(n))/basemva; 21 | S(n) = P(n) + j*Q(n); 22 | end 23 | end 24 | for k=1:nbus 25 | if kb(k) == 1, ns = ns+1; else, end 26 | if kb(k) == 2 ng = ng+1; else, end 27 | ngs(k) = ng; 28 | nss(k) = ns; 29 | end 30 | Ym=abs(Ybus); t = angle(Ybus); 31 | m=2*nbus-ng-2*ns; 32 | maxerror = 1; converge=1; 33 | iter = 0; 34 | %%%% added for parallel lines (Aug. 99) 35 | mline=ones(nbr,1); 36 | for k=1:nbr 37 | for m=k+1:nbr 38 | if((nl(k)==nl(m)) & (nr(k)==nr(m))); 39 | mline(m)=2; 40 | elseif ((nl(k)==nr(m)) & (nr(k)==nl(m))); 41 | mline(m)=2; 42 | else, end 43 | end 44 | end 45 | %%% end of statements for parallel lines (Aug. 99) 46 | 47 | % Start of iterations 48 | clear A DC J DX 49 | while maxerror >= accuracy & iter <= maxiter % Test for max. power mismatch 50 | for ii=1:m 51 | for k=1:m 52 | A(ii,k)=0; %Initializing Jacobian matrix 53 | end, end 54 | iter = iter+1; 55 | for n=1:nbus 56 | nn=n-nss(n); 57 | lm=nbus+n-ngs(n)-nss(n)-ns; 58 | J11=0; J22=0; J33=0; J44=0; 59 | for ii=1:nbr 60 | if mline(ii)==1 % Added to include parallel lines (Aug. 99) 61 | if nl(ii) == n | nr(ii) == n 62 | if nl(ii) == n , l = nr(ii); end 63 | if nr(ii) == n , l = nl(ii); end 64 | J11=J11+ Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 65 | J33=J33+ Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l)); 66 | if kb(n)~=1 67 | J22=J22+ Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l)); 68 | J44=J44+ Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 69 | else, end 70 | if kb(n) ~= 1 & kb(l) ~=1 71 | lk = nbus+l-ngs(l)-nss(l)-ns; 72 | ll = l -nss(l); 73 | % off diagonalelements of J1 74 | A(nn, ll) =-Vm(n)*Vm(l)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l)); 75 | if kb(l) == 0 % off diagonal elements of J2 76 | A(nn, lk) =Vm(n)*Ym(n,l)*cos(t(n,l)- delta(n) + delta(l));end 77 | if kb(n) == 0 % off diagonal elements of J3 78 | A(lm, ll) =-Vm(n)*Vm(l)*Ym(n,l)*cos(t(n,l)- delta(n)+delta(l)); end 79 | if kb(n) == 0 & kb(l) == 0 % off diagonal elements of J4 80 | A(lm, lk) =-Vm(n)*Ym(n,l)*sin(t(n,l)- delta(n) + delta(l));end 81 | else end 82 | else , end 83 | else, end 84 | end 85 | Pk = Vm(n)^2*Ym(n,n)*cos(t(n,n))+J33; 86 | Qk = -Vm(n)^2*Ym(n,n)*sin(t(n,n))-J11; 87 | if kb(n) == 1 P(n)=Pk; Q(n) = Qk; end % Swing bus P 88 | if kb(n) == 2 Q(n)=Qk; 89 | if Qmax(n) ~= 0 90 | Qgc = Q(n)*basemva + Qd(n) - Qsh(n); 91 | if iter <= 7 % Between the 2th & 6th iterations 92 | if iter > 2 % the Mvar of generator buses are 93 | if Qgc < Qmin(n), % tested. If not within limits Vm(n) 94 | Vm(n) = Vm(n) + 0.01; % is changed in steps of 0.01 pu to 95 | elseif Qgc > Qmax(n), % bring the generator Mvar within 96 | Vm(n) = Vm(n) - 0.01;end % the specified limits. 97 | else, end 98 | else,end 99 | else,end 100 | end 101 | if kb(n) ~= 1 102 | A(nn,nn) = J11; %diagonal elements of J1 103 | DC(nn) = P(n)-Pk; 104 | end 105 | if kb(n) == 0 106 | A(nn,lm) = 2*Vm(n)*Ym(n,n)*cos(t(n,n))+J22; %diagonal elements of J2 107 | A(lm,nn)= J33; %diagonal elements of J3 108 | A(lm,lm) =-2*Vm(n)*Ym(n,n)*sin(t(n,n))-J44; %diagonal of elements of J4 109 | DC(lm) = Q(n)-Qk; 110 | end 111 | end 112 | DX=A\DC'; 113 | for n=1:nbus 114 | nn=n-nss(n); 115 | lm=nbus+n-ngs(n)-nss(n)-ns; 116 | if kb(n) ~= 1 117 | delta(n) = delta(n)+DX(nn); end 118 | if kb(n) == 0 119 | Vm(n)=Vm(n)+DX(lm); end 120 | end 121 | maxerror=max(abs(DC)); 122 | if iter == maxiter & maxerror > accuracy 123 | % fprintf('\nWARNING: Iterative solution did not converged after ') 124 | %fprintf('%g', iter), fprintf(' iterations.\n\n') 125 | %fprintf('Press Enter to terminate the iterations and print the results \n') 126 | %converge = 0; pause, 127 | else, end 128 | 129 | end 130 | 131 | if converge ~= 1 132 | tech= (' ITERATIVE SOLUTION DID NOT CONVERGE'); else, 133 | tech=(' Power Flow Solution by Newton-Raphson Method'); 134 | end 135 | V = Vm.*cos(delta)+j*Vm.*sin(delta); 136 | deltad=180/pi*delta; 137 | i=sqrt(-1); 138 | k=0; 139 | for n = 1:nbus 140 | if kb(n) == 1 141 | k=k+1; 142 | S(n)= P(n)+j*Q(n); 143 | Pg(n) = P(n)*basemva + Pd(n); 144 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 145 | Pgg(k)=Pg(n); 146 | Qgg(k)=Qg(n); %june 97 147 | elseif kb(n) ==2 148 | k=k+1; 149 | S(n)=P(n)+j*Q(n); 150 | Qg(n) = Q(n)*basemva + Qd(n) - Qsh(n); 151 | Pgg(k)=Pg(n); 152 | Qgg(k)=Qg(n); % June 1997 153 | end 154 | yload(n) = (Pd(n)- j*Qd(n)+j*Qsh(n))/(basemva*Vm(n)^2); 155 | end 156 | busdata(:,3)=Vm'; busdata(:,4)=deltad'; 157 | Pgt = sum(Pg); Qgt = sum(Qg); Pdt = sum(Pd); Qdt = sum(Qd); Qsht = sum(Qsh); 158 | 159 | %clear A DC DX J11 J22 J33 J44 Qk delta lk ll lm 160 | %clear A DC DX J11 J22 J33 Qk delta lk ll lm 161 | linedt= linedata; % calling the line data for the system 162 | busdt= busdata; % calling the bus data for the system 163 | nb= max(busdt(:,1)); % gives the total number of buses in the system 164 | type =busdt(:,2); % identify the type of bus i.e. ref., generator, and load 165 | pv = find(type==2 | type==1); % identify the PV bus 166 | npv = length(pv); % gives the number of PV buses 167 | pq = find(type==0); % identify the PQ bus 168 | npq = length(pq); % gives the number of PQ buses 169 | 170 | for m=1:npq 171 | for n= 1:npq 172 | YLL (m,n) = Ybus(pq(m), pq(n)); 173 | end 174 | end 175 | for m=1:npq, 176 | for n = 1:npv, 177 | YLG(m,n)= Ybus(pq(m), pv(n)); 178 | end 179 | end 180 | F = -(inv(YLL))*YLG; 181 | for jj=1:npq 182 | Ld=0; 183 | for i=1:npv 184 | Ld=Ld+F(jj,i)*V(pv(i)); 185 | end 186 | L(jj)=abs(1-Ld/V(pq(jj))); 187 | end 188 | Lmax=max(L); 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | -------------------------------------------------------------------------------- /PSO.m: -------------------------------------------------------------------------------- 1 | clear all; clc; 2 | 3 | fprintf(' Seed Best Cost Iteration cpu time\n') 4 | percent=0; 5 | seed=3; 6 | n = 15;% number of variable 7 | Sbest = zeros(n,seed); 8 | maxtimerun=500; 9 | for loop=1:seed, 10 | fprintf(' %d',loop) 11 | start_time = cputime; 12 | use_time=0; 13 | find_time=0; 14 | iteration=0; 15 | Fmin = 1; 16 | clear x F Fbest Fb cbest C W V gbest 17 | %Initialization of PSO parameters 18 | wmax=0.9; 19 | wmin=0.4; 20 | itmax=30; %Maximum iteration number 21 | c1 = 1.4;% constant of acceletion 22 | c2 = 1.4; 23 | for iter=1:itmax 24 | W(iter)=wmax-((wmax-wmin)/itmax)*iter; % Inertial weight factor 25 | end 26 | iter=1; 27 | %B = zeros(1,1,itmax+1) 28 | %********************************************************** 29 | %Initialization of positions of agents 30 | % agents are initialized between -5,+5 randomly 31 | m = 100;% number of agents 32 | [B_low,B_up] = find_boundary(n); 33 | x = generate_initial(B_low,B_up,m,n); 34 | %Initialization of velocities of agents 35 | V = initial_velocity(m,n); 36 | %********************************************************** 37 | %Function to be minimized. 38 | for i=1:m; 39 | con = check_constraint(x(:,i,1),n); 40 | if con == 1, 41 | F(i,1,1)=find_cost(x(:,i,1)); 42 | else 43 | F(i,1,1)= 50000; 44 | end 45 | end 46 | %********************************************************** 47 | [C,I]=min(abs(F(:,1,1))); 48 | B(1,1,1)=C;% min value 49 | XX(1,1,1)=I; % position of min value 50 | gbest(:,1,1)=x(:,I,1);% x at min value 51 | %******************************************************** 52 | %Matrix composed of gbest vector 53 | for p=1:m 54 | G(:,p,1)=gbest(:,1,1); 55 | end 56 | Fbest(1,1,1)=find_cost(G(:,1,1)); 57 | for i=1:m; 58 | pbest(:,i,1)=x(:,i,1); 59 | end 60 | V(:,:,2)=W(1)*V(:,:,1)+c1*rand*(pbest(:,:,1)-x(:,:,1))+c2*rand*(G(:,:,1)-x(:,:,1)); 61 | x(:,:,2)=x(:,:,1)+V(:,:,2); 62 | Fb(1,1,1)=find_cost(gbest(:,1,1)); 63 | gx = 0; 64 | %****************************************************** 65 | while (iter < itmax) 66 | iter = iter+1; 67 | iteration=iteration+1; 68 | j=iter; 69 | % Calculation of new positions 70 | for i=1:m; 71 | con = check_constraint(x(:,i,j),n); 72 | if con==1, 73 | F(i,1,j)=find_cost(x(:,i,j)); 74 | else 75 | F(i,1,j)= 50000; 76 | end 77 | end 78 | [C,I]=min(abs(F(:,:,j))); 79 | %best position 80 | B(1,1,j)=C; %lowest cost in round 81 | gbest(:,1,j)=x(:,I,j); %best position of lowest cost in round 82 | % 83 | Fb(1,1,j)=find_cost(gbest(:,1,j)); 84 | [C,I]=min(Fb(1,1,:)); 85 | iterplot(iteration)=iteration; 86 | BestCplot(iteration)=C; 87 | if Fb(1,1,j)<=C 88 | gbest(:,1,j)=gbest(:,1,j); 89 | else 90 | gbest(:,1,j)=gbest(:,1,I); 91 | end 92 | cbest = C; 93 | if mod(iter,1)==0 94 | sprintf('%d move, Best cost = %g',iter,C); 95 | end 96 | %Matrix composed of gbest vector 97 | for p=1:m 98 | for r=1:n 99 | G(:,p,j)=gbest(:,1,j); 100 | end 101 | end 102 | Fbest(1,1,j)=find_cost(G(:,1,j)); 103 | for i=1:m; 104 | [C,I]=min(F(i,1,:)); 105 | if F(i,1,j)<=C 106 | pbest(:,i,j)=x(:,i,j); 107 | else 108 | pbest(:,i,j)=x(:,i,I); 109 | end 110 | end 111 | V(:,:,j+1)=W(j)*V(:,:,j)+c1*rand*(pbest(:,:,j)-x(:,:,j))+c2*rand*(G(:,:,j)-x(:,:,j)); 112 | for t=1:m, 113 | x(:,t,j+1)=x(:,t,j)+V(:,t,j+1); 114 | con=check_constraint(x(:,t,j+1),n); 115 | if con == 0 116 | x(:,t,j+1)=x(:,t,j); 117 | end 118 | end 119 | 120 | error = abs(cbest-Fmin); 121 | if gx==0, 122 | if error <= 1e-6, 123 | stop_time = cputime; 124 | find_time = stop_time - start_time; 125 | percent=percent+1; 126 | gx = 1; 127 | end 128 | end 129 | check_time = cputime; 130 | count_time = check_time - start_time; 131 | if count_time >= maxtimerun, 132 | iter = itmax; 133 | end 134 | 135 | 136 | end % while loop 137 | end_time = cputime; 138 | use_end_time = end_time - start_time; 139 | a=size(gbest); 140 | s_best = gbest(:,1,a(3)); 141 | Sbest(:,loop)=s_best; 142 | best_c = find_cost(s_best); 143 | fprintf(' %g',best_c) 144 | error = abs(best_c-Fmin); 145 | if error <= 1e-6, 146 | use_time = find_time; 147 | else 148 | use_time=use_end_time; 149 | end 150 | %use_time=use_end_time; 151 | fprintf(' %g',iteration) 152 | fprintf(' %g\n',use_time) 153 | %Record 154 | cost_r(loop)=best_c; 155 | iter_r(loop)=iteration; 156 | usetime_r(loop)=use_time; 157 | end % for loop=1:seed 158 | Percent=percent*100/seed; 159 | [min_cost,min_p]=min(cost_r); 160 | mean_cost=mean(cost_r); 161 | max_cost=max(cost_r); 162 | std_cost=std(cost_r); 163 | cof_cost=std_cost/mean_cost; 164 | mean_iter=mean(iter_r); 165 | mean_cpu=mean(usetime_r); 166 | 167 | fprintf('Cost min =%g , average =%g, max = %g , cof.variation = %g\n',min_cost,mean_cost,max_cost,cof_cost) 168 | fprintf('Iteration average =%g \n',mean_iter) 169 | %fprintf('Search space average =%g \n',mean_ss) 170 | fprintf('CPU time average =%g \n',mean_cpu) 171 | fprintf('Percent get optimal =%g \n',Percent) 172 | [Minimum_Cost,Pg,Trm_loss,MVA_line]=find_cost_final(Sbest(:,min_p)); 173 | Result_caseieee30bus=[Pg(1);Sbest(:,min_p)]; 174 | 175 | fprintf('Variable Value \n') 176 | fprintf('PG1(MW) %7.3f\n', Result_caseieee30bus(1)) 177 | fprintf('PG2(MW) %7.3f\n', Result_caseieee30bus(2)) 178 | fprintf('PG5(MW) %7.3f\n', Result_caseieee30bus(3)) 179 | fprintf('PG8(MW) %7.3f\n', Result_caseieee30bus(4)) 180 | fprintf('PG11(MW) %7.3f\n', Result_caseieee30bus(5)) 181 | fprintf('PG13(MW) %7.3f\n', Result_caseieee30bus(6)) 182 | fprintf('VG1(pu) %7.3f\n', Result_caseieee30bus(7)) 183 | fprintf('VG2(pu) %7.3f\n', Result_caseieee30bus(8)) 184 | fprintf('VG5(pu) %7.3f\n', Result_caseieee30bus(9)) 185 | fprintf('VG8(pu) %7.3f\n', Result_caseieee30bus(10)) 186 | fprintf('VG11(pu) %7.3f\n', Result_caseieee30bus(11)) 187 | fprintf('VG13(pu) %7.3f\n', Result_caseieee30bus(12)) 188 | fprintf('T11 %7.3f\n', Result_caseieee30bus(13)) 189 | fprintf('T12 %7.3f\n', Result_caseieee30bus(14)) 190 | fprintf('T15 %7.3f\n', Result_caseieee30bus(15)) 191 | fprintf('T36 %7.3f\n', Result_caseieee30bus(15)) 192 | fprintf('Fuel cost($/h) %7.3f\n', min_cost) 193 | fprintf('Transmissionloss(MW) %7.3f\n', Trm_loss) 194 | fprintf('CPU time(s) %7.3f\n', usetime_r(:,min_p)) 195 | plot(iterplot,BestCplot) 196 | --------------------------------------------------------------------------------