clear allclcticiter=0;iteration=200;nvars = 12; %Number of variablesN = 50; %Number of Particles or Swarm size%Acceleration constantsc1 = 2.05;c2 = 2.05;%Inertia Weightw_max=0.9;w_min=0.4;w_temp(1)=w_max;%Load IEEE 30-bus data[baseMVA, bus, gen, branch]=loadcase(case_ieee30);%% Initialization of Swarm & velocity Swarm=[unifrnd(0.95,1.10,N,6),unifrnd(0.90,1.10,N,4),unifrnd(0.00,0.20,N,2)]; %Initialize velocityVelocity =[unifrnd(-0.003,0.003,N,6),unifrnd(-0.003,0.003,N,4), unifrnd(- 0.003,0.003,N,2)];for i=1:Nv1=Swarm(i,1);bus(1,8)=v1;gen(1,6)=v1;v2=Swarm(i,2);bus(2,8)=v2;gen(2,6)=v2;v5=Swarm(i,3);%v1%Vm, column 8 is voltage magnitude (p.u.)%Vg, column 6 is voltage magnitude setpoint (p.u.) %v2%v585bus(5,8)=v5;gen(3,6)=v5;v8=Swarm(i,4);bus(8,8)=v8;gen(4,6)=v8;v11=Swarm(i,5);bus(11,8)=v11;gen(5,6)=v11;v13=Swarm(i,6);bus(13,8)=v13;gen(6,6)=v13;t1=Swarm(i,7);branch(11,9)=t1;t2=Swarm(i,8);branch(12,9)=t2;t3=Swarm(i,9);branch(15,9)=t3;t4=Swarm(i,10);branch(36,9)=t4;qc10=Swarm(i,11);bus(10,6)=qc10;qc24=Swarm(i,12);bus(24,6)=qc24;%v8%v11%v13%tp1 6-9, column 9 is tap position%tp2 6-10%tp3 4-12%tp4 27-28%Shunt capacitor 10, column 6 is BS%Shunt capacitor 10, column 6 is BSeval(['savecase (''case_ieee30_test', num2str(i), '.mat'', baseMVA, bus, gen, branch)']);eval(['initial_results_',num2str(i),'=runpf(''case_ieee30_test', num2str(i) '.mat'')']);eval(['initial_losses_',num2str(i),'=sum(real(get_losses(initial_results_', num2str(i),')))']); %Penalty for bus voltage violation bus_inf=bus(:,8); for bus_num=1:30if bus_inf(bus_num)>1.10 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-1.10)^2;elseif bus_inf(bus_num)<0.95 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-0.95)^2;elseend endendpenalty_Vl(bus_num)=0;penalty_Vl_violation=sum(penalty_Vl);%Penalty for shunt violationbuus_inf=bus(:,6);for bus_num=1:30if buus_inf(bus_num)>0.20 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.20)^2;elseif buus_inf(bus_num)<0.00 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.00)^2;elseend endpenalty_Qc(bus_num)=0;penalty_Qc_violation=sum(penalty_Qc);%Penalty for tap position violationbrch_inf=[branch(11,9); branch(12,9); branch(15,9); branch(36,9)]; for brch_num=1:4if brch_inf(brch_num)>1.10 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-1.10)^2;elseif brch_inf(brch_num)<0.90 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-0.90)^2;elsepenalty_Tk(brch_num)=0;86endpenalty_Tk_violation=sum(penalty_Tk);%objective function=sum of active power losses of the transmission lineslosses(i)=eval(['initial_losses_',num2str(i)]); %sum of real power losses of all branchesObj_fun_initial(i)=losses(i)+penalty_Vl_violation+penalty_Qc_violation+penalty_T k_violation; %augumented objective function with penalty functionend%% Initialize best position (Pbest) and global best postion (Gbest) matrix Pbest=Swarm;Val_Pbest=Obj_fun_initial;%finding best particle in initial population[Val_Gbest,m]=min(Val_Pbest);Gbest=Swarm(m,:); %used to keep track of the best particle ever Gbest_calc=repmat(Swarm(m,:),N,1);%% PSO LOOPfigure('NumberTitle', 'off', 'Name', 'PSO Algorithm Based Optimal Reactive Power Dispatch');title('ACTIVE POWER LOSS MINIMIZATION');ylabel('Total Active Power Loss (MW)');xlabel('Iteration Number');grid on;hold onfor iter=1:iteration % Update the value of the inertia weight wif iter <= iterationw_temp(iter)=w_max + (((w_min-w_max)/iteration)*iter); %Change inertiaweightend %generate random numbers R1=rand(N,nvars); R2=rand(N,nvars);% constriction factor%2.05+2.05=4.1;%2/abs(2-4.1-sqrt(4.1*4.1-4*4.1))=0.729%calculate velocity Velocity=(w_temp(iter)*Velocity+c1*R1.*(Pbest-Swarm)+c2*R2.*(Gbest_calc-Swarm)); for v_iter=1:nvarsif v_iter==nvars Outstep=Velocity(:,v_iter)>0.003; Velocity(find(Outstep),v_iter)=0.003; Outstep=Velocity(:,v_iter)<-0.003; Velocity(find(Outstep),v_iter)=-0.003;elseend end %update positions of particles Swarm=Swarm+0.729*Velocity; for k=1:NOutstep=Velocity(:,v_iter)>0.01; Velocity(find(Outstep),v_iter)=0.01; Outstep=Velocity(:,v_iter)<-0.01; Velocity(find(Outstep),v_iter)=-0.01;v1=Swarm(k,1);bus(1,8)=v1;gen(1,6)=v1;v2=Swarm(k,2);bus(2,8)=v2;gen(2,6)=v2;v5=Swarm(k,3);bus(5,8)=v5;gen(3,6)=v5;%v1%Vm, column 8 is voltage magnitude (p.u.)%Vg, column 6 is voltage magnitude setpoint (p.u.) %v2%v5%evaluate a new swarm87v8=Swarm(k,4);bus(8,8)=v8;gen(4,6)=v8;v11=Swarm(k,5);bus(11,8)=v11;gen(5,6)=v11;v13=Swarm(k,6);bus(13,8)=v13;gen(6,6)=v13;t1=Swarm(k,7);branch(11,9)=t1;t2=Swarm(k,8);branch(12,9)=t2;t3=Swarm(k,9);branch(15,9)=t3;t4=Swarm(k,10);branch(36,9)=t4;qc10=Swarm(k,11);bus(10,6)=qc10;qc24=Swarm(k,12);bus(24,6)=qc24;%v8%v11%v13%tp1 6-9, column 9 is tap position%tp2 6-10%tp3 4-12%tp4 27-28%Shunt capacitor 10, column 6 is BS%Shunt capacitor 10, column 6 is BSeval(['savecase (''case_ieee30_test', num2str(k), '.mat'', baseMVA, bus, gen, branch)']);eval(['final_results_',num2str(k),'=runpf(''case_ieee30_test', num2str(k) '.mat'')']);eval(['final_losses_',num2str(k),'=sum(real(get_losses(final_results_',num2str(k ),')))']); %Penalty for bus voltage violation bus_inf=bus(:,8); for bus_num=1:30if bus_inf(bus_num)>1.10 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-1.10)^2;elseif bus_inf(bus_num)<0.95 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-0.95)^2;elseend endpenalty_Vl(bus_num)=0;penalty_Vl_violation=sum(penalty_Vl);%Penalty for shunt violationbuus_inf=bus(:,6);for bus_num=1:30if buus_inf(bus_num)>0.20 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.20)^2;elseif buus_inf(bus_num)<0.00 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.00)^2;elseend endpenalty_Qc(bus_num)=0;penalty_Qc_violation=sum(penalty_Qc);%Penalty for tap position violationbrch_inf=[branch(11,9); branch(12,9); branch(15,9); branch(36,9)]; for brch_num=1:4if brch_inf(brch_num)>1.10 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-1.10)^2;elseif brch_inf(brch_num)<0.90 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-0.90)^2;elseend endpenalty_Tk(brch_num)=0;88penalty_Tk_violation=sum(penalty_Tk);%objective function=sum of active power losses of the transmission lineslosses_temp(k)=eval(['final_losses_',num2str(k)]); %sum of real power losses of all branchesObj_fun_temp(k)=losses_temp(k)+penalty_Vl_violation+penalty_Qc_violation+penalty _Tk_violation; %augumented objective function with penalty function % Final EvaluationVal_Pbest_temp(k)=Obj_fun_temp(k); end if Val_Pbest_temp<Val_Pbest losses=losses_temp; Val_Pbest=Val_Pbest_temp; Pbest=Swarm;end[Val_Gbest_temp,n]=min(Val_Pbest); if Val_Gbest_temp<Val_GbestVal_Gbest=Val_Gbest_temp; Gbest=Swarm(n,:); Gbest_calc=repmat(Swarm(n,:),N,1);end Val_Gbest_rec(iter)=Val_Gbest; plot(Val_Gbest_rec); drawnow; tocend
clear all
clc
tic
iter=0;
iteration=200;
nvars = 12; %Number of variables
N = 50; %Number of Particles or Swarm size
%Acceleration constants
c1 = 2.05;
c2 = 2.05;
%Inertia Weight
w_max=0.9;
w_min=0.4;
w_temp(1)=w_max;
%Load IEEE 30-bus data
[baseMVA, bus, gen, branch]=loadcase(case_ieee30);
%% Initialization of Swarm & velocity Swarm=[unifrnd(0.95,1.10,N,6),unifrnd(0.90,1.10,N,4),unifrnd(0.00,0.20,N,2)]; %Initialize velocity
Velocity =[unifrnd(-0.003,0.003,N,6),unifrnd(-0.003,0.003,N,4), unifrnd(- 0.003,0.003,N,2)];
for i=1:N
v1=Swarm(i,1);
bus(1,8)=v1;
gen(1,6)=v1;
v2=Swarm(i,2);
bus(2,8)=v2;
gen(2,6)=v2;
v5=Swarm(i,3);
%v1
%Vm, column 8 is voltage magnitude (p.u.)
%Vg, column 6 is voltage magnitude setpoint (p.u.) %v2
%v5
85
bus(5,8)=v5;
gen(3,6)=v5;
v8=Swarm(i,4);
bus(8,8)=v8;
gen(4,6)=v8;
v11=Swarm(i,5);
bus(11,8)=v11;
gen(5,6)=v11;
v13=Swarm(i,6);
bus(13,8)=v13;
gen(6,6)=v13;
t1=Swarm(i,7);
branch(11,9)=t1;
t2=Swarm(i,8);
branch(12,9)=t2;
t3=Swarm(i,9);
branch(15,9)=t3;
t4=Swarm(i,10);
branch(36,9)=t4;
qc10=Swarm(i,11);
bus(10,6)=qc10;
qc24=Swarm(i,12);
bus(24,6)=qc24;
%v8
%v11
%v13
%tp1 6-9, column 9 is tap position
%tp2 6-10
%tp3 4-12
%tp4 27-28
%Shunt capacitor 10, column 6 is BS
%Shunt capacitor 10, column 6 is BS
eval(['savecase (''case_ieee30_test', num2str(i), '.mat'', baseMVA, bus, gen, branch)']);
eval(['initial_results_',num2str(i),'=runpf(''case_ieee30_test', num2str(i) '.mat'')']);
eval(['initial_losses_',num2str(i),'=sum(real(get_losses(initial_results_', num2str(i),')))']);
%Penalty for bus voltage violation
bus_inf=bus(:,8);
for bus_num=1:30
if bus_inf(bus_num)>1.10 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-1.10)^2;
elseif bus_inf(bus_num)<0.95 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-0.95)^2;
else
end end
end
penalty_Vl(bus_num)=0;
penalty_Vl_violation=sum(penalty_Vl);
%Penalty for shunt violation
buus_inf=bus(:,6);
for bus_num=1:30
if buus_inf(bus_num)>0.20 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.20)^2;
elseif buus_inf(bus_num)<0.00 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.00)^2;
else
end end
penalty_Qc(bus_num)=0;
penalty_Qc_violation=sum(penalty_Qc);
%Penalty for tap position violation
brch_inf=[branch(11,9); branch(12,9); branch(15,9); branch(36,9)]; for brch_num=1:4
if brch_inf(brch_num)>1.10 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-1.10)^2;
elseif brch_inf(brch_num)<0.90 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-0.90)^2;
else
penalty_Tk(brch_num)=0;
86
end
penalty_Tk_violation=sum(penalty_Tk);
%objective function=sum of active power losses of the transmission lines
losses(i)=eval(['initial_losses_',num2str(i)]); %sum of real power losses of all branches
Obj_fun_initial(i)=losses(i)+penalty_Vl_violation+penalty_Qc_violation+penalty_T k_violation; %augumented objective function with penalty function
end
%% Initialize best position (Pbest) and global best postion (Gbest) matrix Pbest=Swarm;
Val_Pbest=Obj_fun_initial;
%finding best particle in initial population
[Val_Gbest,m]=min(Val_Pbest);
Gbest=Swarm(m,:); %used to keep track of the best particle ever Gbest_calc=repmat(Swarm(m,:),N,1);
%% PSO LOOP
figure('NumberTitle', 'off', 'Name', 'PSO Algorithm Based Optimal Reactive Power Dispatch');
title('ACTIVE POWER LOSS MINIMIZATION');
ylabel('Total Active Power Loss (MW)');
xlabel('Iteration Number');
grid on;
hold on
for iter=1:iteration
% Update the value of the inertia weight w
if iter <= iteration
w_temp(iter)=w_max + (((w_min-w_max)/iteration)*iter); %Change inertia
weight
end
%generate random numbers
R1=rand(N,nvars);
R2=rand(N,nvars);
% constriction factor
%2.05+2.05=4.1;
%2/abs(2-4.1-sqrt(4.1*4.1-4*4.1))=0.729
%calculate velocity Velocity=(w_temp(iter)*Velocity+c1*R1.*(Pbest-Swarm)+c2*R2.*(Gbest_calc-
Swarm));
for v_iter=1:nvars
if v_iter==nvars Outstep=Velocity(:,v_iter)>0.003; Velocity(find(Outstep),v_iter)=0.003; Outstep=Velocity(:,v_iter)<-0.003; Velocity(find(Outstep),v_iter)=-0.003;
else
end end
%update positions of particles
Swarm=Swarm+0.729*Velocity;
for k=1:N
Outstep=Velocity(:,v_iter)>0.01; Velocity(find(Outstep),v_iter)=0.01; Outstep=Velocity(:,v_iter)<-0.01; Velocity(find(Outstep),v_iter)=-0.01;
v1=Swarm(k,1);
bus(1,8)=v1;
gen(1,6)=v1;
v2=Swarm(k,2);
bus(2,8)=v2;
gen(2,6)=v2;
v5=Swarm(k,3);
bus(5,8)=v5;
gen(3,6)=v5;
%v1
%Vm, column 8 is voltage magnitude (p.u.)
%Vg, column 6 is voltage magnitude setpoint (p.u.) %v2
%v5
%evaluate a new swarm
87
v8=Swarm(k,4);
bus(8,8)=v8;
gen(4,6)=v8;
v11=Swarm(k,5);
bus(11,8)=v11;
gen(5,6)=v11;
v13=Swarm(k,6);
bus(13,8)=v13;
gen(6,6)=v13;
t1=Swarm(k,7);
branch(11,9)=t1;
t2=Swarm(k,8);
branch(12,9)=t2;
t3=Swarm(k,9);
branch(15,9)=t3;
t4=Swarm(k,10);
branch(36,9)=t4;
qc10=Swarm(k,11);
bus(10,6)=qc10;
qc24=Swarm(k,12);
bus(24,6)=qc24;
%v8
%v11
%v13
%tp1 6-9, column 9 is tap position
%tp2 6-10
%tp3 4-12
%tp4 27-28
%Shunt capacitor 10, column 6 is BS
%Shunt capacitor 10, column 6 is BS
eval(['savecase (''case_ieee30_test', num2str(k), '.mat'', baseMVA, bus, gen, branch)']);
eval(['final_results_',num2str(k),'=runpf(''case_ieee30_test', num2str(k) '.mat'')']);
eval(['final_losses_',num2str(k),'=sum(real(get_losses(final_results_',num2str(k ),')))']);
%Penalty for bus voltage violation
bus_inf=bus(:,8);
for bus_num=1:30
if bus_inf(bus_num)>1.10 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-1.10)^2;
elseif bus_inf(bus_num)<0.95 penalty_Vl(bus_num)=10000*(bus_inf(bus_num)-0.95)^2;
else
end end
penalty_Vl(bus_num)=0;
penalty_Vl_violation=sum(penalty_Vl);
%Penalty for shunt violation
buus_inf=bus(:,6);
for bus_num=1:30
if buus_inf(bus_num)>0.20 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.20)^2;
elseif buus_inf(bus_num)<0.00 penalty_Qc(bus_num)=10000*(buus_inf(bus_num)-0.00)^2;
else
end end
penalty_Qc(bus_num)=0;
penalty_Qc_violation=sum(penalty_Qc);
%Penalty for tap position violation
brch_inf=[branch(11,9); branch(12,9); branch(15,9); branch(36,9)]; for brch_num=1:4
if brch_inf(brch_num)>1.10 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-1.10)^2;
elseif brch_inf(brch_num)<0.90 penalty_Tk(brch_num)=10000*(brch_inf(brch_num)-0.90)^2;
else
end end
penalty_Tk(brch_num)=0;
88
penalty_Tk_violation=sum(penalty_Tk);
%objective function=sum of active power losses of the transmission lines
losses_temp(k)=eval(['final_losses_',num2str(k)]); %sum of real power losses of all branches
Obj_fun_temp(k)=losses_temp(k)+penalty_Vl_violation+penalty_Qc_violation+penalty _Tk_violation; %augumented objective function with penalty function
% Final Evaluation
Val_Pbest_temp(k)=Obj_fun_temp(k);
end
if Val_Pbest_temp<Val_Pbest
losses=losses_temp;
Val_Pbest=Val_Pbest_temp;
Pbest=Swarm;
end
[Val_Gbest_temp,n]=min(Val_Pbest); if Val_Gbest_temp<Val_Gbest
Val_Gbest=Val_Gbest_temp; Gbest=Swarm(n,:); Gbest_calc=repmat(Swarm(n,:),N,1);
end
Val_Gbest_rec(iter)=Val_Gbest;
plot(Val_Gbest_rec);
drawnow;
toc
end
clear allclcticiter=0;iteration=200;nvars = 12; %Number of variablesN = 50; %Number of Particles or Swarm size%Accelerat
-
- Site Admin
- Posts: 899603
- Joined: Mon Aug 02, 2021 8:13 am