Lập trình tìm tham số bộ điều khiển PID bằng giải thuật bầy đàn

Một phần của tài liệu Nghiên cứu giải thuật bày đàn và ứng dụng tìm thông số tối ưu cho bộ điều khiển (Trang 48 - 52)

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/

Một phần của tài liệu Nghiên cứu giải thuật bày đàn và ứng dụng tìm thông số tối ưu cho bộ điều khiển (Trang 48 - 52)

Tải bản đầy đủ (PDF)

(77 trang)