Hướng phát triển trong tương la

Một phần của tài liệu ỨNG DỤNG THUẬT TOÁN DE vào GIẢI bài TOÁN PHÂN bố CÔNG SUẤT tối ưu TRONG hệ THỐNG điện (Trang 114 - 135)

CHƯƠNG 5: TỔNG KẾT VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀ

5.2 Hướng phát triển trong tương la

Thuật toán DE vẫn đang được xem là thuật toán tối ưu hoàn thiện, hiện đại nhất đang được quan tâm, ứng dụng vào giải các bài toán tối ưu kỹ thuật hiện nay. Một vài câu hỏi được đặt ra trong tương lai có liên quan đến việc áp dụng thuật

toán tối ưu mới này vào giải những bài toán tối ưu khó hơn cho các hệ thống công suất như sau:

• Ứng dụng DE vào các bài toán công suất khó hơn như các hệ thống năng lượng khác có sử dụng nhiều loại nhiên liệu, nhiều ràng buộc hơn và có xét thêm ảnh hưởng của môi trường.

• Việc lựa chọn các hệ số tỷ lệ F, hệ số xác suất lai ghép CR và hệ số phạt trong DE phụ thuộc rất nhiều vào kinh nghiệm của người sử dụng nên cần tránh hoặc giảm bớt việc phải lựa chọn các hệ số này để đơn giản hơn cho quá trình tối ưu.

• Nâng cấp mã thuật toán để cải thiện quá trình thực thi và giảm bớt số lần mô phỏng như trong các bài toán OPF.

PHỤ LỤC 1:

clc

% So tham so dieu khien I_D = 5; % Kich co quan the

I_NP = input('Nhap kich co quan the NP = '); if (I_NP < 5)

I_NP = 50;

fprintf(1,'Kich co quan the toi thieu phai la 5, mac dinh la 50\n\n'); end

% So the he can lap

I_itermax = input('Nhap so the he can lap I = '); if (I_itermax <= 0)

I_itermax = 200;

fprintf(1,'So the he can lap phai la so duong, mac dinh la 200\n\n'); end

% He so ty le

F_weight = input('Nhap he so ty le F = '); if ((F_weight < 0) | (F_weight > 1.2))

F_weight = 0.8;

fprintf(1,'He so ty le phai nam trong [0 , 1.2], mac dinh la 0.8\n\n'); end

% Hang so lai ghep

if ((F_CR < 0) | (F_CR > 1)) F_CR = 0.9;

fprintf(1,'Hang so lai ghep phai nam trong [0 , 1], mac dinh la 0.9\n\n'); end

% Cac rang buoc bien bat can bang

FVr_maxbound=[500 200 300 150 200]; FVr_minbound=[100 50 80 50 50]; S_struct.I_D S_struct.I_NP = I_D; = I_NP; S_struct.I_itermax = I_itermax; S_struct.F_weight S_struct.F_CR = F_weight; = F_CR; S_struct.FVr_minbound = FVr_minbound; S_struct.FVr_maxbound = FVr_maxbound; % Bat dau qua trinh toi uu hoa

tic % Bat dau do thoi gian thuc hien chuong trinh deopt('objfun',S_struct);

time = toc; % Dung thoi gian chay chuong trinh fprintf('\nThoi gian tinh toan do duoc la %f (s)\n',time);

File objfun.m (file chứa hàm mục tiêu): function S_MSE= objfun(P, S_struct) % Ham thich nghi

F_cost

= 16426-5*P(1)-2*P(2)-3.5*P(3)-P(4)-1.5*P(5)+0.007*P(1)^2+

+0.0095*P(2)^2+0.009*P(3)^2+0.009*P(4)^2+0.008*P(5)^2+0.0075*(1263--P(1)-P(2)-P(3)-P(4)-P(5))^2; P(4)-P(5))^2;

% Dieu kien truoc khi rang buoc S_MSE.I_nc S_MSE.FVr_ca S_MSE.I_no = 0; = 0;

= 1; % So ham thich nghi

S_MSE.FVr_oa(1) = F_cost; % Gia tri ham thich nghi can tim

File left_win (file chứa hàm kiểm tra ràng buộc và hàm thích nghi): function I_z = left_win(S_x,S_y);

I_z = 1;

% Qua trinh giai quyet rang buoc if (S_x.I_nc > 0)

for k=1:S_x.I_nc

if (S_x.FVr_ca(k) > 0) % Neu rang buoc chua thoa man

if (S_x.FVr_ca(k) > S_y.FVr_ca(k))% Neu bat ky rang buoc nao cua S_x khong duoc cai thien

I_z = 0; end end end end if (S_x.I_no > 0) for k=1:S_x.I_no

if (S_x.FVr_oa(k) > S_y.FVr_oa(k))% Neu bat ky gia tri ham chi phi nao cua S_x khong duoc cai thien

I_z = 0; end

end end

File deopt.m (file chính chứa hàm thực hiện quá trình tối ưu DE): function [FVr_bestmem,S_bestval,I_nfeval] = deopt(fname,S_struct) I_D I_NP = S_struct.I_D; = S_struct.I_NP; I_itermax = S_struct.I_itermax; F_weight F_CR = S_struct.F_weight; = S_struct.F_CR; FVr_minbound = S_struct.FVr_minbound; FVr_maxbound = S_struct.FVr_maxbound; % Khoi tao quan the va cac ma tran

FM_pop = zeros(I_NP,I_D); for k=1:I_NP

FM_pop(k,:) = FVr_minbound + rand(1,I_D).*(FVr_maxbound - FVr_minbound); end

FM_popold

= zeros(size(FM_pop));

FVr_bestmem = zeros(1,I_D);% Cac ca the tot nhat tim duoc

FVr_bestmemit = zeros(1,I_D);% Cac ca the tot nhat trong quan the hien tai % Tim ca the tot nhat trong quan the ban dau

I_best_index = 1;

% Bat dau kiem tra voi ca the dau tien

S_val(1)

= feval(fname,FM_pop(I_best_index,:),S_struct);

S_bestval = S_val(1);

S_val(k) = feval(fname,FM_pop(k,:),S_struct); if (left_win(S_val(k),S_bestval) == 1)

I_best_index = k;

% Ghi lai vi tri cua ca the tot nhat

S_bestval

= S_val(k); % Ghi lai gia tri ca the tot nhat

end end

FVr_bestmemit = FM_pop(I_best_index,:); S_bestvalit = S_bestval;

% Gia tri tot nhat cua ham phu hop trong the he hien tai

FVr_bestmem = FVr_bestmemit;

FM_pm1 = zeros(I_NP,I_D); % Khoi tao ma tran 1 trong quan the FM_pm2 = zeros(I_NP,I_D); % Khoi tao ma tran 2 trong quan the FM_pm3 = zeros(I_NP,I_D); % Khoi tao ma tran 3 trong quan the

% Tao quan the trung gian chuan bi cho viec xao tron vector va cho quan the cu FM_ui = zeros(I_NP,I_D);

FM_mui = zeros(I_NP,I_D); FM_mpo = zeros(I_NP,I_D);

% Khoi tao cac vector chuan bi cho viec toi uu FVr_rot = (0:1:I_NP-1); FVr_rotd = (0:1:I_D-1); FVr_rt = zeros(I_NP); FVr_rtd = zeros(I_D); FVr_a1 = zeros(I_NP); FVr_a2 = zeros(I_NP); FVr_a3 = zeros(I_NP);

FVr_ind = zeros(4);

% Bat dau thuc hien toi uu cho moi the he I_iter = 1;

while (I_iter < I_itermax+1)

FM_popold = FM_pop; % Ghi lai quan the cu S_struct.FM_pop = FM_pop; S_struct.FVr_bestmem = FVr_bestmem; FVr_ind = randperm(4); FVr_a1 = randperm(I_NP); FVr_rt = rem(FVr_rot+FVr_ind(1),I_NP); FVr_a2 = FVr_a1(FVr_rt+1); FVr_rt = rem(FVr_rot+FVr_ind(2),I_NP); FVr_a3 = FVr_a2(FVr_rt+1); FM_pm1 = FM_popold(FVr_a1,:); FM_pm2 = FM_popold(FVr_a2,:); FM_pm3 = FM_popold(FVr_a3,:); FM_mui = rand(I_NP,I_D) < F_CR; FM_mpo = FM_mui < 0.5;

FM_ui = FM_pm3 + F_weight*(FM_pm1 - FM_pm2); % Thuc hien dot bien FM_ui = FM_popold.*FM_mpo + FM_ui.*FM_mui;

% Thuc hien lai ghep

FM_origin = FM_pm3;

% Chon cac vector tot hon de dua vao quan the ke tiep for k=1:I_NP

for j=1:I_D

if (FM_ui(k,j) > FVr_maxbound(j))

FM_ui(k,j) = FVr_maxbound(j) + rand*(FM_origin(k,j) - FVr_maxbound(j)); end

if (FM_ui(k,j) < FVr_minbound(j))

FM_ui(k,j) = FVr_minbound(j) + rand*(FM_origin(k,j) - FVr_minbound(j)); end

end

% Kiem tra va cap nhat lai cac ca the tot hon S_tempval = feval(fname,FM_ui(k,:),S_struct); if (left_win(S_tempval,S_val(k)) == 1) FM_pop(k,:) = FM_ui(k,:); S_val(k) = S_tempval; if (left_win(S_tempval,S_bestval) == 1) S_bestval = S_tempval; FVr_bestmem = FM_ui(k,:); end end end % for k = 1:NP

% Moi khi hoan thanh 1 the he, tang so the he len 1 I_iter = I_iter + 1;

end

fprintf('\nKET SAU:\n\n',I_itermax);

fprintf(1,'So the he lap lai: %d, He so ty le: %f, Hang so lai ghep: %f, Kich co quan the: %d\n',I_itermax,F_weight,F_CR,I_NP);

format long e; for n=1:I_D

fprintf(1,'P(%d) = %f\n',n,FVr_bestmem(n)); end

FVr_bestmem_(6) = 1263 - (FVr_bestmem(1) + FVr_bestmem(2) + FVr_bestmem(3) + FVr_bestmem(4) + FVr_bestmem(5));

fprintf('P(6) = %f\n',FVr_bestmem_(6));

fprintf('---\n');

PHỤ LỤC 2:

clc

% So tham so dieu khien I_D = 3; % Kich co quan the

I_NP = input('Nhap kich co quan the NP = '); if (I_NP < 5)

I_NP = 30;

fprintf(1,'Kich co quan the toi thieu phai la 5, mac dinh la 30\n\n'); end

% So the he can lap

I_itermax = input('Nhap so the he can lap I = '); if (I_itermax <= 0)

I_itermax = 200;

fprintf(1,'So the he can lap phai la so duong, mac dinh la 200\n\n'); end

% He so ty le

F_weight = input('Nhap he so ty le F = '); if ((F_weight < 0) | (F_weight > 1.2))

F_weight = 0.8;

fprintf(1,'He so ty le phai nam trong [0 , 1.2], mac dinh la 0.8\n\n'); end

F_CR = input('Nhap hang so lai ghep CR = '); if ((F_CR < 0) | (F_CR > 1))

F_CR = 0.9;

fprintf(1,'Hang so lai ghep phai nam trong [0 , 1], mac dinh la 0.9\n\n'); end

% He so phat

F_R = input('Nhap he so phat (trong bai nay R nen chon trong (10 , 50) se toi uu ra duoc ket qua tot nhat) R = ');

if (F_R < 0) F_R = 20;

fprintf(1,'He so phat phai la so duong, mac dinh la 20\n\n'); end

% Cac rang buoc bien bat can bang FVr_maxbound=[85 80 70]; FVr_minbound=[10 10 10]; S_struct.I_D S_struct.I_NP = I_D; = I_NP; S_struct.I_itermax = I_itermax; S_struct.F_weight S_struct.F_CR S_struct.F_R = F_weight; = F_CR; = F_R; S_struct.FVr_minbound = FVr_minbound; S_struct.FVr_maxbound = FVr_maxbound; % Bat dau qua trinh toi uu hoa

tic % Bat dau do thoi gian thuc hien chuong trinh deopt('objfun',S_struct);

time = toc; % Dung thoi gian chay chuong trinh

fprintf('\nThoi gian tinh toan do duoc la %f (s)\n',time);

File objfun.m:

function S_MSE= objfun(P, S_struct) F_R = S_struct.F_R;

% Ham thich nghi

F_cost = 0.008*P(1)^2+0.009*P(2)^2+0.007*P(3)^2+7*P(1)+6.3*P(2)+

+6.8*P(3)+520+F_R*abs(P(1)+P(2)+P(3)-0.000218*P(1)^2-0.000228*P(2)^2--0.000179*P(3)^2- 150);

% Dieu kien truoc khi rang buoc S_MSE.I_nc

S_MSE.FVr_ca S_MSE.I_no

= 0;= 0; = 0;

= 1; % So ham thich nghi

S_MSE.FVr_oa(1) = F_cost; % Gia tri ham thich nghi can tim

File left_win:

function I_z = left_win(S_x,S_y); I_z = 1;

% Qua trinh giai quyet rang buoc if (S_x.I_nc > 0)

for k=1:S_x.I_nc

if (S_x.FVr_ca(k) > 0) % Neu rang buoc chua thoa man

if (S_x.FVr_ca(k) > S_y.FVr_ca(k)) % Neu bat ky rang buoc nao cua S_x khong duoc cai thien

I_z = 0; end end end end if (S_x.I_no > 0) for k=1:S_x.I_no

if (S_x.FVr_oa(k) > S_y.FVr_oa(k)) % Neu bat ky gia tri ham chi phi nao cua S_x khong duoc cai thien

I_z = 0; end end end

File deopt.m:

function [FVr_bestmem,S_bestval,I_nfeval] = deopt(fname,S_struct) I_D I_NP = S_struct.I_D; = S_struct.I_NP; I_itermax = S_struct.I_itermax; F_weight F_CR F_R = S_struct.F_weight; = S_struct.F_CR; = S_struct.F_R; FVr_minbound = S_struct.FVr_minbound; FVr_maxbound = S_struct.FVr_maxbound; % Khoi tao quan the va cac ma tran

FM_pop = zeros(I_NP,I_D); for k=1:I_NP

FM_pop(k,:) = FVr_minbound + rand(1,I_D).*(FVr_maxbound - FVr_minbound); end

FM_popold

= zeros(size(FM_pop));

FVr_bestmem = zeros(1,I_D);% Cac ca the tot nhat tim duoc

FVr_bestmemit = zeros(1,I_D);% Cac ca the tot nhat trong quan the hien tai % Tim ca the tot nhat trong quan the ban dau

I_best_index = 1;

% Bat dau kiem tra voi ca the dau tien

S_val(1)

= feval(fname,FM_pop(I_best_index,:),S_struct);

S_bestval = S_val(1); for k=2:I_NP

% Gia tri ham phu hop tot nhat tim duoc % Kiem tra cac ca the con lai

S_val(k) = feval(fname,FM_pop(k,:),S_struct); if (left_win(S_val(k),S_bestval) == 1)

I_best_index = k;

% Ghi lai vi tri cua ca the tot nhat

S_bestval

= S_val(k); % Ghi lai gia tri ca the tot nhat

end end

FVr_bestmemit = FM_pop(I_best_index,:); S_bestvalit = S_bestval;

% Gia tri tot nhat cua ham phu hop trong the he hien tai

FVr_bestmem = FVr_bestmemit;

% Tao quan the trung gian chuan bi cho viec xao tron vector va cho quan the cu FM_ui = zeros(I_NP,I_D);

FM_mui = zeros(I_NP,I_D); FM_mpo = zeros(I_NP,I_D);

% Khoi tao cac vector chuan bi cho viec toi uu FVr_rot = (0:1:I_NP-1); FVr_rotd = (0:1:I_D-1); FVr_rt = zeros(I_NP); FVr_rtd = zeros(I_D); FVr_a1 = zeros(I_NP); FVr_a2 = zeros(I_NP); FVr_a3 = zeros(I_NP); FVr_ind = zeros(4);

% Bat dau thuc hien toi uu cho moi the he I_iter = 1;

while (I_iter < I_itermax+1)

FM_popold = FM_pop; % Ghi lai quan the cu S_struct.FM_pop = FM_pop; S_struct.FVr_bestmem = FVr_bestmem; FVr_ind = randperm(4); FVr_a1 = randperm(I_NP); FVr_rt = rem(FVr_rot+FVr_ind(1),I_NP); FVr_a2 = FVr_a1(FVr_rt+1); FVr_rt = rem(FVr_rot+FVr_ind(2),I_NP);

FVr_a3 = FVr_a2(FVr_rt+1); FM_pm1 = FM_popold(FVr_a1,:); FM_pm2 = FM_popold(FVr_a2,:); FM_pm3 = FM_popold(FVr_a3,:); FM_mui = rand(I_NP,I_D) < F_CR; FM_mpo = FM_mui < 0.5;

FM_ui = FM_pm3 + F_weight*(FM_pm1 - FM_pm2); % Thuc hien dot bien FM_ui = FM_popold.*FM_mpo + FM_ui.*FM_mui;

% Thuc hien lai ghep

FM_origin = FM_pm3;

% Chon cac vector tot hon de dua vao quan the ke tiep for k=1:I_NP

% Kiem tra va dieu chinh lai cac rang buoc bien neu vi pham for j=1:I_D

if (FM_ui(k,j) > FVr_maxbound(j))

FM_ui(k,j) = FVr_maxbound(j) + rand*(FM_origin(k,j) - FVr_maxbound(j)); end

if (FM_ui(k,j) < FVr_minbound(j))

FM_ui(k,j) = FVr_minbound(j) + rand*(FM_origin(k,j) - FVr_minbound(j)); end

end

% Kiem tra va cap nhat lai cac ca the tot hon S_tempval = feval(fname,FM_ui(k,:),S_struct); if (left_win(S_tempval,S_val(k)) == 1)

S_val(k) = S_tempval; if (left_win(S_tempval,S_bestval) == 1) S_bestval = S_tempval; FVr_bestmem = FM_ui(k,:); end end end % for k = 1:NP

% Moi khi hoan thanh 1 the he, tang so the he len 1 I_iter = I_iter + 1;

end

% Gia tri ham chi phi toi uu

F_cost = 0.008*FVr_bestmem(1)^2+0.009*FVr_bestmem(2)^2+0.007* *FVr_bestmem(3)^2+7*FVr_bestmem(1)+6.3*FVr_bestmem(2)+6.8* *FVr_bestmem(3)+520;

% Gia tri ham ton that cong suat tac dung toi uu

P_L = 0.000218*FVr_bestmem(1)^2+0.000228*FVr_bestmem(2)^2+ +0.000179*FVr_bestmem(3)^2;

% Xuat ket qua ra man hinh fprintf('\nKET

QUA TOI UU TIM DUOC VOI %d LAN LAP NHU

SAU:\n\n',I_itermax);

fprintf(1,'So the he lap lai: %d, He so ty le: %f, Hang so lai ghep: %f, Kich co quan the: %d\n',I_itermax,F_weight,F_CR,I_NP);

format long e; for n=1:I_D

end

fprintf('---\n');

fprintf('Gia tri ham chi phi toi uu tim duoc F(cost) = %f\n',F_cost);

Một phần của tài liệu ỨNG DỤNG THUẬT TOÁN DE vào GIẢI bài TOÁN PHÂN bố CÔNG SUẤT tối ưu TRONG hệ THỐNG điện (Trang 114 - 135)

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

(156 trang)
w