Giao diện chương trình

Một phần của tài liệu BÀI TẬP LỚN Môn: Hệ Chuyên Gia Đề Tài: Xây dựng hệ chuyên gia sử dụng suy diễn mờ và ứng dụng trong điều khiển máy giặt. (Trang 47 - 54)

- Ta có thể biểu diễn phép hợp của hai tập mờ qua hai hàm

Chương 3: Xây dựng bài toán ứng dụng

3.4.2. Giao diện chương trình

Tên điều khiển Loại điều khiển Text

txtKhoiluong Textbox

txtDoban Textbox

txtLuongnuoc Textbox

btnTinh Button Tính lượng nước

btnClear Button Xóa

3.4.3. Mã nguồn chương trình

3.4.3.1. Khai báo các biến lưu trữ hàm thuộc và tập luật

constint MIN_NHIET = 37; constint MIN_TUOI = 0; constint MAX_NHIET = 41;

Dictionary<string, string[]> tap_mo = newDictionary<string, string[]>(); Dictionary<string, float> tap_suy_dien = newDictionary<string, float>();

Dictionary<string, float[]> tuoi = newDictionary<string, float[]>(); Dictionary<string, float[]> nhiet = newDictionary<string, float[]>(); Dictionary<string, float[]> thuoc = newDictionary<string, float[]>();

Dictionary<string, string[]> luat = newDictionary<string, string[]>();

Dictionary<string, float> doTuoi = newDictionary<string, float>(); Dictionary<string, float> nhietDo = newDictionary<string, float>();

ArrayList tu = newArrayList(); ArrayList mau = newArrayList();

3.4.3.2. Hàm khởi tạo

public Form1() {

InitializeComponent();

string[] age = { "TRE", "TN", "GIA" }; string[] temp = { "SN", "SC" };

string[] medicin = { "TT", "TB", "TC" }; tap_mo.Add("tuoi", age);

tap_mo.Add("nhietdo", temp); tap_mo.Add("thuoc", medicin); /* Trẻ(0, 20, 20, 40) TN(20, 40, 40, 60) Già(40, 60, 60, 80) (Tuổi) SN(37, 38, 38, 39) SC(38, 39, 41, 41) (Nhiệt độ) TT(0, 20, 40, 60) TB(40, 60, 80, 100) TC(80, 100, 120, 120) (Đơn vị thuốc) */ float[] tuoiTre = { 0, 20, 20, 40 }; float[] trungNien = { 20, 40, 40, 60 }; float[] tuoiGia = { 40, 60, 60, 80 }; tuoi.Add("TRE", tuoiTre);

tuoi.Add("TN", trungNien); tuoi.Add("TG", tuoiGia);

float[] sotNhe = { 37, 38, 38, 39 }; float[] sotCao = { 38, 39, 41, 41 }; nhiet.Add("SN", sotNhe);

float[] thuocThap = { 0, 20, 40, 60 }; float[] thuocTB = { 40, 60, 80, 100 }; float[] thuocCao = { 80, 100, 120, 120 }; thuoc.Add("TT", thuocThap); thuoc.Add("TB", thuocTB); thuoc.Add("TC", thuocCao); /*

1.Nếu Tuổi = Trẻ và Sốt = Nhẹ(SN) thì lượng thuốc = thấp(TT) 2.Nếu Tuổi = Trẻ và Sốt = Cao(SC) thì lượng thuốc = trung bình(TB) 3.Nếu Tuổi = Trung Niên(TN) và Sốt = Nhẹ thì lượng thuốc = trung bình 4.Nếu Tuổi = Trung niên và Sốt = Cao thì lượng thuốc = cao(TC)

5.Nếu Tuổi = Già và Sốt = Nhẹ thì lượng thuốc = trung bình 6.Nếu Tuổi = Già và Sốt = Cao thì lượng thuốc = cao */ string[] r1 = { "TRE", "SN", "TT" }; string[] r2 = { "TRE", "SC", "TB" }; string[] r3 = { "TN", "SN", "TB" }; string[] r4 = { "TN", "SC", "TC" }; string[] r5 = { "TG", "SN", "TB" }; string[] r6 = { "TG", "SC", "TC" }; luat.Add("r1", r1); luat.Add("r2", r2); luat.Add("r3", r3); luat.Add("r4", r4); luat.Add("r5", r5); luat.Add("r6", r6); } 3.4.3. Mã nguồn chương trình

public partial class Form1 : Form

{

public Form1() {

InitializeComponent();

< Khai báo các biến lưu trữ hàm thuộc và tập luật> < Hàm khởi tạo>

private float hamthuoc(float x, float[] mang) {

float b = mang[1]; float c = mang[2]; float d = mang[3]; if (x <= c && x >= b) return 1; else if (x <= b && x >= a) { if (b - a != 0) return ((x - a) / (b - a)); else return 1; } else if (x <= d && x >= c) { if (d - c != 0) return (d - x) / (d - c); else return 1; } else return 0; }

private float timm(float t, float u, float v) {

float z = Math.Abs(t - u); if (z != 0) return v * z; else return 0;

}

private float timtu(float h, float m1, float m2, float t, float u) {

return (h / 6) * (3 * m2 * m2 - 3 * m1 * m1 + u * u - t * t + 3 * m2 * u + 3 * m1 * t);

}

private float timmau(float h, float m1, float m2, float t, float u) {

return (h / 2) * (2 * m2 - 2 * m1 + t + u); }

void timtumau(float[] mang, float x) {

float c = mang[2]; float d = mang[3]; float ka = timm(a, b, x); float m1 = a + ka; float kb = timm(c, d, x); float m2 = d - kb;

float TU = timtu(x, m1, m2, ka, kb); tu.Add(TU);

float MAU = timmau(x, m1, m2, ka, kb); mau.Add(MAU);

}

private Boolean KiemTraDauVao(float tuoi_in, float nhiet_do_in, object

sender, EventArgs e)

{

if (nhiet_do_in < 0 || tuoi_in < 0) {

MessageBox.Show("Tuổi và nhiệt độ phải là số thực dương.");

return false; }

else if (nhiet_do_in < MIN_NHIET) {

MessageBox.Show("Bệnh nhân không bị sốt, không cần uống thuốc.");

return false; }

else if (tuoi_in < MIN_TUOI) {

MessageBox.Show("Bệnh nhân quá trẻ, không thể chuẩn đoán.");

return false; }

else if (tuoi_in > MAX_TUOI) {

MessageBox.Show("Bệnh nhân đã quá tuổi để chuẩn đoán, không có

dữ liệu.");

return false; }

else if (nhiet_do_in > MAX_NHIET) {

return false; }

return true; }

private void btnCLear_Click(object sender, EventArgs e)

{

txtTuoi.Text = ""; txtNhietDo.Text = ""; txtLuongThuoc.Text = ""; }

private void btnTinh_Click(object sender, EventArgs e)

{

float tuoi_input, nhietdo_input; try

{

tuoi_input = float.Parse(txtTuoi.Text.ToString());

nhietdo_input = float.Parse(txtNhietDo.Text.ToString()); if (KiemTraDauVao(tuoi_input, nhietdo_input, sender, e)) {

nhietDo.Clear(); doTuoi.Clear(); //tinh ham thuoc

float nhe = hamthuoc(nhietdo_input, nhiet["SN"]); if (nhe >= 0) nhietDo.Add("SN", nhe);

float cao = hamthuoc(nhietdo_input, nhiet["SC"]); if (cao >= 0) nhietDo.Add("SC", cao);

float tre = hamthuoc(tuoi_input, tuoi["TRE"]); if (tre >= 0) doTuoi.Add("TRE", tre);

float tn = hamthuoc(tuoi_input, tuoi["TN"]); if (tn >= 0) doTuoi.Add("TN", tn);

float gia = hamthuoc(tuoi_input, tuoi["TG"]); if (tn >= 0) doTuoi.Add("TG", gia);

IDictionaryEnumerator contro = luat.GetEnumerator();

tap_suy_dien.Clear(); int dem = 0;

{

string[] noi_dung = luat[contro.Key.ToString()]; float min = 2;

if (min > doTuoi[noi_dung[0]] && doTuoi[noi_dung[0]] >= 0) {

min = doTuoi[noi_dung[0]]; }

if (min > nhietDo[noi_dung[1]] && nhietDo[noi_dung[1]] >= 0) { min = nhietDo[noi_dung[1]]; } if (min > 0) { dem++; tap_suy_dien.Add(contro.Key.ToString(), min); } } if (dem == 0) {

MessageBox.Show("Dữ liệu hiện có không đủ để suy diễn."); } else { tu.Clear(); mau.Clear(); contro = tap_suy_dien.GetEnumerator(); while (contro.MoveNext()) {

string luat_dung = contro.Key.ToString();

float ham_thuoc_luat = tap_suy_dien[luat_dung]; string[] noi_dung = luat[luat_dung];

string thuoc_gi = noi_dung[2];

timtumau(thuoc[thuoc_gi], ham_thuoc_luat); }

float tu_so = 0, mau_so = 0;

foreach (float i in tu) { tu_so += i; } foreach (float i in mau) { mau_so += i; } if (mau_so == 0)

{

MessageBox.Show("Bệnh nhân không cần phải uống thuốc.");

}

else if (tu_so == 0) {

MessageBox.Show("Bệnh nhân không cần phải uống thuốc.");

} else else {

txtLuongThuoc.Text = (tu_so / mau_so).ToString(); }

} } } else {

MessageBox.Show("Tuổi và nhiệt độ không phù hợp."); }

}

catch (FormatException)

{

MessageBox.Show("Tuổi và nhiệt độ phải là số thực dương.");

}

catch (Exception a) {

MessageBox.Show("Nhập sai định dạng hoặc có lỗi!" + a);

} } }

}

Một phần của tài liệu BÀI TẬP LỚN Môn: Hệ Chuyên Gia Đề Tài: Xây dựng hệ chuyên gia sử dụng suy diễn mờ và ứng dụng trong điều khiển máy giặt. (Trang 47 - 54)

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

(56 trang)
w