Dưới đây là chương trình được viết trên m_file của phần mềm matlab:
%% Toi uu tham so bo dieu khien PID bang giai thuat bay dan
%% Chuong trinh duoc xay dung boi Ngo Thi Kieu Oanh %% Email: Oanh.tnut.na@gmail.com
%% Dien thoai: 0948110966 %% Khoi tao cho PSO
clc
clear all
n = 50; % Kich thuoc quan the
Kmax =150; % So buoc lap
d = 2; % So chieu khong gian tim kiem
c2 =1.2; % Tham so C1 (He so gia toc)
c1 = 0.12; % Tham so C2
w =0.9; % Trong so quan tinh
f=0*ones(n,Kmax) % Ham muc tieu
%=============================%
% Khoi tao tham so %
%=============================%
R1 = rand(d, n); %Tao ma tran ngau nhien gom d hang va n cot
R2 = rand(d, n);
fc =0*ones(n,1); % Muc tieu hien tai
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
% Khoi tao vi tri va van toc cua cac ca the %
%================================================%
Xik = 10*(rand(d, n)-0.7); % Vi tri ca the thu i tai the he thu k
Vik = 0.2*randn(d, n); % Van toc ca the thu i tai the he thu k
Pbest = Xik; % Vi tri tot nhat cua ca the thu i
%================================================%
% Uoc luong tham so %
%================================================% for i = 1:n fc(i) = Oanh_K14(Xik(:,i)) end
flb = fc; % Muc tieu tot nhat cua ca the thu i
for i=1:n Gbest(:,i) = Pbest(:,g); end %=================================================%
% Cap nhat van toc cua moi ca the %
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Vik = w *Vik + c1*(R1.*(Pbest-Xik)) + c2*(R2.*(Gbest- Xik));
%=================================================%
% Cap nhat vi tri cua moi ca the %
%=================================================%
Xik = Xik + Vik;
%=================================================%
% Tieu chuan uoc luong %
%=================================================%
%% Vong lap chinh
J = 0 ; % Buoc lap dau tien
while ( J < Kmax ) J = J + 1; for i = 1:n, fc(i) = Oanh_K14(Xik(:,i)) ; end for i = 1:n if fc(i) < flb(i) flb(i) = fc(i); Pbest(:,i) = Xik(:,i) ; end end
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
[fcgb,g] = min(flb); % fcgb: Muc tieu tot nhat hien tai cua
%ca the trong quan the
if fcgb < fgb
fgb = fcgb; % Muc tieu tot nhat cua ca the trong quan the
for i=1:n
Gbest(:,i) = Pbest(:,g); end
end
Vik = w *Vik + c1*(R1.*(Pbest-Xik)) + c2*(R2.*(Gbest- Xik));
Xik = Xik + Vik;
sprintf('Buoc lap thu %3.0f ', J )
end % Ket thuc vong lap while
xx=f(:,50); [Y,I] = min(xx); Xik(:,I); Kp = Xik(1) Kd = Xik(2)
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/