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