Matlab Code of GWO Minimize Constrained Objective Function PID Controller
Matlab Code of GWO Minimize Constrained Objective Function PID Controller
function out=fungwo(x)
y1=x(:,1);
y2=x(:,2);
fx= (2*sqrt(2).*y1+y2).*100;
% inequality constraints
g(:,1)=(2.*sqrt(2).*y1+y2)./(sqrt(2).*y1.^2+2.*y1.*y2)-2;
g(:,2)=(2.*y1)./(sqrt(2).*y1.^2+2.*y1.*y2)-2;
g(:,3)=(2./(y1+sqrt(2).*y2))-2;
pp=10^9; % penalty
for i=1:size(g:1)
j=1:size(g:2);
if g(i,j)>0
penalty(i,j)= pp+g(i,j);
else
penalty(i,j)=0;
end
end
%calculate objective function
out= fx+sum(penalty,2);
end
%GWO Initialization
for p =1:pop
for n=1:var
x(p,n)=al+rand*(au-al);
end
%Modelof pid controller parameters
kp=x(p,1);
ki=x(p,2);
kd=x(p,3);
% simulate model
Gc= pid(kp,ki,kd);
Gcf = feedback(Gc*G,1);
y= step(Gcf);
% ITAE (objective function)
ff1=0;
sim1=size(y);
for m1 = 1:sim1
ff1=ff1+((abs(y(m1)-1))*m1);
end
ITAE(p)=ff1;
end
% find best solution
[b_sol, b_loc]=min(ITAE);
best_ITAE=b_sol;
best_k=x(b_loc,:);
for tt=1:iter
a_gwo=2-((2*tt)/iter);
%find alph, beta,and delta
sol_cf=ITAE;
sol_var=x;
[b_sol1,loc1]=min(sol_cf);
alph_cf=b_sol1;
alph_var=sol_var(loc1,:);
sol_cf(loc1)=[];
sol_var(loc1,:)=[];
[b_sol1, loc1]=min(sol_cf);
beta_cf=b_sol1;
beta_var=sol_var(loc1,:);
sol_cf(loc1)=[];
sol_var(loc1,:)=[];
[b_sol1, loc1]=min(sol_cf);
delta_cf=b_sol1;
delta_var=sol_var(loc1,:);
c_cof=2*rand();
a_cof=a_gwo*((2*rand())-1);
for p=1:pop
for n=1:var
d_a=abs(c_cof*alph_var(n)-x(p,n));
xx1=alph_var(n)-(a_cof*d_a);
d_b=abs(c_cof*beta_var(n)-x(p,n));
xx2=beta_var(n)-(a_cof*d_b);
d_d=abs(c_cof*delta_var(n)-x(p,n));
xx3=delta_var(n)-(a_cof*d_d);
if x(p,n)>au
x(p,n)=au;
else
if x(p,n)<al
x(p,n)=al;
end
end
% Model parameters
kp=x(p,1);
ki=x(p,2);
kd=x(p,3);
% simulate model
Gc= pid(kp,ki,kd);
Gcf = feedback(Gc*G,1);
y= step(Gcf);
% ITAE (objective function)
ff1=0;
sim1=size(y);
for m1 = 1:sim1
ff1=ff1+((abs(y(m1)-1))*m1);
end
ITAE(p)=ff1;
end