Viết chương trình minh họa hệ điều khiển mờ trong máy giặt, cài đặt, cách sử dụng và chạy thử nghiệm.

Một phần của tài liệu TÌM HIỂU VỀ LÝ THUYẾT FUZZY LOGIC VÀ ỨNG DỤNG CHO BÀI TOÁN ĐIỀU KHIỂN MÁY GIẶT (Trang 51)

cách sử dụng và chạy thử nghiệm.

a.Viết chương trình minh họa hệ điều khiển mờ trong máy giặt

 Em sử dụng ngôn ngữ lập trình C# để viết coding.

 Trong chương trình Em viết 3 lớp có tên như sau: - C_Độ_Bẩn_Của_Quần_Áo.cs

- C_Loại_Chất_Bẩn.cs - C_Giặt_Giũ.cs

 Sau đây là chi tiết các đoạn coding tiêu biểu của các lớp

Lớp 1: C_Độ_Bẩn_Của_Quần_Áo.cs  Hàm thuộc của Độ bẩn: B.BẩnÍt(x) = [1-x/50 nếu 0 <= x <= 50 0 nếu 50 <= x <= 100] B.BẩnVừa(x) = [x/50 nếu 0 <= x <= 50 2-x/50 nếu 50 <= x <= 100] B.BẩnNhiều(x) = [0 nếu 0 <= x <= 50 x/50 –1 nếu 50 <= x <= 100]

class C_Độ_Bẩn_Của_Quần_Áo

{

//1.Khai báo các biến ngôn ngữ độ bẩn

float B_Bẩn_Ít; float B_Bẩn_Vừa; float B_Bẩn_Nhiều;

//2.Khởi tạo giá trị 0 cho các biến ngôn ngữ

public C_Độ_Bẩn_Của_Quần_Áo() { B_Bẩn_Ít = 0; B_Bẩn_Vừa = 0; B_Bẩn_Nhiều = 0; }

//3.Định nghĩa chi tiết cho Hàm thuộc của Độ bẩn

public C_Độ_Bẩn_Của_Quần_Áo(int x) { if(x>=0 && x<= 50) { B_Bẩn_Ít = 1 - x/50.0f; B_Bẩn_Vừa = x/50.0f; B_Bẩn_Nhiều = 0; } else if(x>=50 && x<= 100) { B_Bẩn_Ít = 0; B_Bẩn_Vừa = 2 - x / 50.0f; B_Bẩn_Nhiều = x / 50.0f -1; } }

//4.Định nghĩa các hàm lấy giá trị của biến ngôn ngữ

public float Lấy_B_Bẩn_Ít() {

return B_Bẩn_Ít; }

public float Lấy_B_Bẩn_Nhiều() {

return B_Bẩn_Nhiều; }

public float Lấy_B_Bẩn_Vừa() {

return B_Bẩn_Vừa; }

}

Lớp 2: C_Loại_Chất_Bẩn.cs

 Hàm thuộc của Loại chất bẩn:

M.MỡÍt(y) = [1-y/50 nếu 0 <= y <= 50 0 nếu 50 <= y <= 100 ] M.MỡVừa(y) = [y/50 nếu 0 <= y <= 50

2-y/50 nếu 50 <= y <= 100 ] M.MỡNhiều(y) = [0 nếu 0 <= y <= 50

y/50 –1 nếu 50 <= y <= 100]

 Xây dựng lớp Loại_Chất_Bẩn cho hàm thuộc của loại chất bẩn:

class C_Loại_Chất_Bẩn

//1.Khai báo các biến ngôn ngữ của loại chất bẩn

float M_Mỡ_Ít; float M_Mỡ_Vừa; float M_Mỡ_Nhiều;

//2.Khởi tạo giá trị 0 cho các biến ngôn ngữ

public C_Loại_Chất_Bẩn() { M_Mỡ_Ít = 0; M_Mỡ_Vừa = 0; M_Mỡ_Nhiều = 0; }

//3.Định nghĩa chi tiết cho hàm thuộc của loại chất bẩn

public C_Loại_Chất_Bẩn(int y) {

if(y>=0 && y<= 50) {

M_Mỡ_Ít = 1 - y / 50.0f; M_Mỡ_Vừa = y/50.0f; M_Mỡ_Nhiều = 0; }

else if(y>=50 && y<= 100) { M_Mỡ_Ít = 0; M_Mỡ_Vừa = 2 - y / 50.0f; M_Mỡ_Nhiều = y / 50.0f -1; } }

//4.Định nghĩa các hàm lấy giá trị của biến ngôn ngữ

public float Lấy_M_Mỡ_Ít() {

return M_Mỡ_Ít; }

public float Lấy_M_Mỡ_Nhiều() {

return M_Mỡ_Nhiều; }

public float Lấy_M_Mỡ_Vừa() {

return M_Mỡ_Vừa; }

}

Lớp 3: C_Giặt_Giũ.cs

 Xây dựng lớp cho hàm thuộc của kết luận (Thời gian giặt) cho từng luật:

class C_Giặt_Giũ

{

//1.Khai báo các biến float t_Thời_Gian; float [] giặt_Z;

float G_Giặt_Rất_Ngắn, G_Giặt_Ngắn, G_Giặt_Vừa, G_Giặt_Lâu, G_Giặt_Rất_Lâu;

//2.Khai báo các biến thời gian giặt:

const int T_GiặtRấtNgắn = 8, T_GiặtNgắn =12,

//Khởi tạo giá trị cho các biến và mảng public C_Giặt_Giũ()

{

t_Thời_Gian = 0;

giặt_Z = new float[61];

G_Giặt_Rất_Ngắn= G_Giặt_Ngắn= G_Giặt_Vừa= G_Giặt_Lâu= G_Giặt_Rất_Lâu = 0;

}

//3.Hàm giải các luật và tính toán thời gian

public float F_Tính_Thời_Gian(C_Độ_Bẩn_Của_Quần_Áo db,

C_Loại_Chất_Bẩn lcb) {

//---Luật 1(r1):

float x = db.Lấy_B_Bẩn_Ít(); float y = lcb.Lấy_M_Mỡ_Ít(); G_Giặt_Rất_Ngắn = Math.Min(x, y);

//---Luật 2(r2):

x = db.Lấy_B_Bẩn_Vừa(); y = lcb.Lấy_M_Mỡ_Ít();

G_Giặt_Ngắn = Math.Min(x, y);

//---Luật 3(r3):

x = db.Lấy_B_Bẩn_Nhiều(); y = lcb.Lấy_M_Mỡ_Ít();

G_Giặt_Vừa = Math.Min(x, y);

//---Luật 4(r4):

x = db.Lấy_B_Bẩn_Ít(); y = lcb.Lấy_M_Mỡ_Vừa();

G_Giặt_Vừa += Math.Min(x, y);

//---Luật 5(r5):

x = db.Lấy_B_Bẩn_Vừa(); y = lcb.Lấy_M_Mỡ_Vừa();

G_Giặt_Vừa += Math.Min(x, y);

//---Luật 6(r6):

x = db.Lấy_B_Bẩn_Nhiều(); y = lcb.Lấy_M_Mỡ_Vừa(); G_Giặt_Lâu = Math.Min(x, y);

//---Luật 7(r7):

x = db.Lấy_B_Bẩn_Ít(); y = lcb.Lấy_M_Mỡ_Nhiều(); G_Giặt_Lâu += Math.Min(x, y);

//---Luật 8(r8):

x = db.Lấy_B_Bẩn_Vừa(); y = lcb.Lấy_M_Mỡ_Nhiều(); G_Giặt_Lâu += Math.Min(x, y);

//---Luật 9(r9):

x = db.Lấy_B_Bẩn_Nhiều(); y = lcb.Lấy_M_Mỡ_Nhiều();

G_Giặt_Rất_Lâu = Math.Min(x, y);

//---Gọi hàm vẽ hình

P_Vẽ_Hình();

//---Gọi hàm giải mờ

P_Giải_Mờ();

//---Trả ra thời gian giặt

}

//4.Hàm tính toán tọa độ để đưa vào mảng private void P_Vẽ_Hình()

{

for (int i = 0; i <= T_GiặtRấtNgắn; i++) {

giặt_Z[i] = G_Giặt_Rất_Ngắn; }

for (int i = T_GiặtRấtNgắn + 1; i <= T_GiặtNgắn; i++) {

float y1 = Math.Min(G_Giặt_Rất_Ngắn, (T_GiặtNgắn - i) / (float)(T_GiặtNgắn - T_GiặtRấtNgắn)); float y2 = Math.Min(G_Giặt_Ngắn, (i - T_GiặtRấtNgắn)

/ (float)(T_GiặtNgắn - T_GiặtRấtNgắn)); giặt_Z[i] = Math.Max(y1, y2); giặt_Z[i] = Math.Max(y1, y2);

}

for (int i = T_GiặtNgắn + 1; i <= T_GiặtVừa; i++) {

float y1 = Math.Min(G_Giặt_Ngắn, (T_GiặtVừa - i) / (float)(T_GiặtVừa - T_GiặtNgắn));

float y2 = Math.Min(G_Giặt_Vừa, (i - T_GiặtNgắn) / (float)(T_GiặtVừa - T_GiặtNgắn));

giặt_Z[i] = Math.Max(y1, y2); }

for (int i = T_GiặtVừa + 1; i <= T_GiặtLâu; i++) {

float y1 = Math.Min(G_Giặt_Vừa, (T_GiặtLâu - i) / (float)(T_GiặtLâu - T_GiặtVừa));

float y2 = Math.Min(G_Giặt_Lâu, (i - T_GiặtVừa) / (float)(T_GiặtLâu - T_GiặtVừa));

giặt_Z[i] = Math.Max(y1, y2); }

for (int i = T_GiặtLâu + 1; i <= T_GiặtRấtLâu; i++) {

float y1 = Math.Min(G_Giặt_Lâu, (T_GiặtRấtLâu - i) / (float)(T_GiặtRấtLâu - T_GiặtLâu));

float y2 = Math.Min(G_Giặt_Rất_Lâu, (i - T_GiặtLâu) / (float)(T_GiặtRấtLâu - T_GiặtLâu));

giặt_Z[i] = Math.Max(y1, y2); }

}

//5.Hàm giải mờ (Defuzzification)

private void P_Giải_Mờ() {

float tổng = 0, tổng_Z = 0; for (int i = 0; i <= 60; i++) { tổng += i * giặt_Z[i]; tổng_Z += giặt_Z[i]; } t_Thời_Gian = tổng / tổng_Z; }

//6.Định nghĩa các hàm lấy giá trị của biến ngôn ngữ

public float Lấy_Giặt_Rất_Ngắn() {

return G_Giặt_Rất_Ngắn; }

{

return G_Giặt_Ngắn; }

public float Lấy_Giặt_Vừa() {

return G_Giặt_Vừa; }

public float Lấy_Giặt_Lâu() {

return G_Giặt_Lâu; }

public float Lấy_Giặt_Rất_Lâu() {

return G_Giặt_Rất_Lâu; }

}

b.Cài đặt

- Chương trình cài đặt Em để trong thư mục: SETUP

- Chương trình ứng dụng được viết bằng ngôn ngữ C# và triển khai trên nền của

Microsoft Framework.NET 3.5, do đó nếu hệ thống chưa có sẵn thì phải cài gói

này, lấy trong thư mục SETUP có tên là: Microsoft Framework.NET 3.5.exe - Sau đó chọn file cài đặt cũng trong thư mục SETUP có tên là:

FuzzyLogic_WashingMachine.exe, cài vào rồi chạy chương trình ứng dụng, hay chạy chương trình ứng dụng trực tiếp trong thư mục SETUP có tên file như

sau: FuzzyLogicWashingMachine.exe

Một phần của tài liệu TÌM HIỂU VỀ LÝ THUYẾT FUZZY LOGIC VÀ ỨNG DỤNG CHO BÀI TOÁN ĐIỀU KHIỂN MÁY GIẶT (Trang 51)

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

(64 trang)
w