LỜI CẢM ƠNĐể thực hiện được bài báo cáo ““Xây dựng hệ chuyên gia chuẩn đoán sự cố máy tính” chúng em xin gửi lời cảm ơn chân thành đến giảng viên bộ môn: cô Nguyễn Thị Thu Hà đã nhiệt tì
Trang 1LỜI CẢM ƠN
Để thực hiện được bài báo cáo ““Xây dựng hệ chuyên gia chuẩn đoán sự cố máy tính” chúng em xin gửi lời cảm ơn chân thành đến giảng viên bộ môn: cô Nguyễn Thị Thu Hà đã nhiệt tình chỉ dạy, hướng dẫn và cung cấp cho chúng em đầy đủ những tài liệu cần thiết Trong quá trình tìm hiểu và làm báo cáo về đề tài chúng em đã có thêm
cơ hội hiểu rõ hơn về đề tài
Vì thời gian cũng như kiến thức hạn hẹp nên bài báo cáo của chúng em chưa thể hoàn thiện một cách tốt nhất rất mong cô và các bạn đóng góp ý kiến để bài báo cáo này của chúng em hoàn thiện hơn Một lần nữa chúng em xin chân thành cảm ơn cô
Trang 2MỤC LỤC
LỜI CẢM ƠN 1
MỤC LỤC 2
LỜI MỞ ĐẦU 3
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI VÀ THU THẬP 4
TRI THỨC CHUYÊN GIA 4
1.1 Tên đề tài và mục đích xây dựng đề tài 4
1.2 Phát biểu bài toán 4
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ 6
2.1 Biểu diễn tri thức 6
2.2 Thiết kế chương trình 6
2.3 Giao diện chương trình 13
2.3.1 Giao diện chính 13
2.3.2 Giao diện cập nhật cơ sở tri thức 13
2.3.3 Giao diện chuẩn đoán sự cố 14
2.3.4 Giao diện kết quả và giải thích 14
2.3.5 Giao diện giới thiệu 15
KẾT LUẬN 16
Trang 3LỜI MỞ ĐẦU
Những năm gần đây, ngành công nghiệp máy tính đã có những bước phát triển rất mạnh mẽ Chúng ta đã quen thuộc với những chiếc máy vi tính xuất hiện ở khắp mọi nơi, sử dụng nó để làm việc, học tập, và giải trí, Do đó máy vi tính đã dần dần trở thành một thiết bị điện tử thông dụng, được sử dụng ở khắp mọi nơi, và trở thành thiết bị không thể thiếu trong cuộc sống của nhiều người Tuy nhiên, chúng ta không thể phủ nhận rằng máy tính là một thiết bị phức tạp và khó sử dụng Khi những hỏng hóc xuất hiện, cho dù là những hỏng hóc rất nhỏ, cũng có thể làm người sử dụng bối rối Vì vậy, sự xuất hiện một hệ thống nào đó nhằm hướng dẫn mọi người tự tay khắc phục những lỗi thông dụng là thực sự cần thiết
Bên cạnh đó, ngày nay khi mà nhiều lĩnh vực trong cuộc sống đang ngày càng được chuyên môn hóa một cách sâu sắc Cùng với đó là việc chúng ta luôn muốn xây dựng các chương trình, các hệ thống có thể hoạt động thay thế cho các quyết định của con người Do vậy, càng ngày chúng ta càng thấy xuất hiện nhiều hệ chuyên gia được
sử dụng hằng ngày để thay thế con người đưa ra các quyết định, các dự đoán, tư vấn trong một số lĩnh vực cụ thể như y học, kỹ thuật,…
Chính vì những lý do trên, cùng với mong muốn được áp dụng những kiến thức
đã học từ môn Hệ chuyên gia, nhóm chúng tôi đã chọn đề tài “Xây dựng hệ chuyên gia chuẩn đoán sự cố máy tính” nhằm xây dựng một hệ thống có thể giúp chúng ta có thể xác định nhanh chóng và chính xác một số sự cố mà máy vi tính thường gặp phải
Do kiến thức còn nhiều hạn chế và quá trình tìm hiểu còn nhiều thiếu sót nên chúng em vẫn chưa thể xây dựng được một hệ chuyên gia hoàn chỉnh và chính xác trong lĩnh vực chuẩn đoán sự cố hỏng hóc máy tính Chúng em rất mong nhận được những ý kiến đóng góp từ các thầy cô và các bạn để chúng em có thể xây dựng được một hệ thống hoàn chỉnh hơn nữa
Chúng em xin chân thành cảm ơn!
Trang 4CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI VÀ THU THẬP
TRI THỨC CHUYÊN GIA 1.1 Tên đề tài và mục đích xây dựng đề tài
Tên đề tài: “Xây dựng hệ chuyên gia chuẩn đoán sự cố máy tính”
Mục đích xây dựng đề tài: xây dựng được một hệ chuyên gia thu thập tri thức từ các chuyên gia con người trên môi trường windows nhằm giúp cho quá trình chuẩn đoán các hỏng hóc, các sự cố của máy tính trở nên nhanh, thuận lợi và hiệu quả hơn
Từ đó giúp người sử dụng có thể có các biện pháp khắc phục và sửa chữa kịp thời và hiệu quả
1.2 Phát biểu bài toán
Yêu cầu bài toán là phải xây dựng được một hệ chuyên gia trong môi trường windows có thể đưa ra các chuẩn đoán về nguyên nhân gây ra các sự cố, các hỏng hóc của máy tính dựa trên các thông tin mà người sử dụng đưa vào
Các thông tin mà người sử dụng đưa vào là các câu trả lời “Đúng” hoặc “Sai” cho các câu hỏi về tình trạng của máy tính mà hệ chuyên gia đưa ra
Để thực hiện được các yêu cầu đó, hệ thống cần xây dựng được một hệ cơ sở tri thức Trong đó:
Bộ cơ sở tri thức bao gồm tập các sự kiện và tập các luật về sự cố máy tính được thu thập từ các chuyên gia con người trong lĩnh vực phần cứng máy tính
Bộ động cơ suy diễn là các cài đặt để tìm kiếm các sự kiện và các luật liên quan đến yêu cầu của người sử dụng để từ đó đưa ra các kết luận về nguyên nhân của sự cố Với bài toán này, bộ động cơ suy diễn được cài đặt theo cơ chế suy diễn lùi
Sau quá trình thu thập tri thức, hệ thống tạm thời đưa ra các sự kiện sau:
1) Máy tính khởi động được
2) Có tiếng bíp kéo dài
3) Có thông báo đĩa
4) Xuất hiện lời chào Welcome
5) In được
6) Hoạt động bình thường
7) Hỏng RAM
8) Hỏng ổ đĩa
9) Hỏng phần in
10) Lỗi hệ điều hành
Hệ thống hiện tại bao gồm các phát biểu về những sự cố máy tính có thể gặp phải như sau:
1) Một máy tính khởi động được thì máy tính đó hoạt động bình thường.
Trang 52) Một máy tính bị hỏng ổ đĩa khi máy tính đó không khởi động được và có thông báo đĩa.
3) Một máy tính bị hỏng RAM khi máy tính đó không khởi động được và có tiếng bíp kéo dài.
4) Một máy tính bị hỏng phần in khi máy tính đó hoạt động bình, xuất hiện lời chào welcome và không in được.
5) Một máy tính bị lỗi hệ điều hành khi máy tính đó hoạt động bình thường, khởi động không có thông báo đĩa và không xuất hiện màn hình chào welcome.
Trang 6CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ 2.1 Biểu diễn tri thức
Xây dựng các sự kiện:
3 e3 Xuất hiện lời chào welcome
4 e4 Có tiếng bíp kéo dài
6 b1 Hoạt động bình thường
Xây dựng các luật:
- Luật 1: e1 → b1
Nếu máy tính khởi động được thì máy hoạt động bình thường
- Luật 2: b1 ^ ~e3 ^ ~e5 → c1
Nếu máy tính hoạt động bình thường và không xuất hiện màn hình chào welcome
và không có thông báo đĩa thì máy bị lỗi hệ điều hành
- Luật 3: ~e1 ^ e4 → c2
Nếu máy tính không khởi động được và có tiếng bíp kéo dài thì máy bị hỏng RAM
- Luật 4: ~e1 ^ e5 → c3
Nếu máy tính không khởi động được và có thông báo đĩa thì máy bị hỏng ổ đĩa
- Luật 5: b1 ^ e3 ^ ~e2 → c4
Nếu máy tính hoạt động bình thường và xuất hiện màn hình chào welcome và không in được thì máy bị hỏng phần in
- Dựa vào cơ sở tri thức được biểu diễn ở trên ta có các tập sự kiện:
GIATHIET = {e1, e2, e3, e4, e5}
TRUNGGIAN = {b1}
KETLUAN = {c1, c2, c3, c4}
2.2 Thiết kế chương trình
Chương trình sử dụng ngôn ngữ lập trình C# để cài đặt bài toán theo cơ chế suy diễn lùi
Từ yêu cầu bài toán, ta đi xây dựng các lớp tương ứng với các đối tượng là các sự
kiện (SuKien.cs) và các luật (Luat.cs) Bên cạnh đó ta xây dựng thêm một lớp (Vet.cs)
để lưu trữ thông tin các luật và sự kiện cần sử dụng để đưa ra chuẩn đoán
Trong đó:
Trang 7- Mỗi 1 sự kiện được biểu diễn bởi 3 thuộc tính: tên sự kiện, mô tả, giá trị (trả về
1 nếu sự kiện này đúng, trả về 0 nếu sai và trả về -1 nếu chưa biết đúng hay sai)
- Mỗi 1 luật được biểu diễn bởi 3 thuộc tính: tên luật, giả thiết, kết luận
- Mỗi 1 vết thì chứa 1 sự kiện và 1 luật
Dữ liệu về các sự kiện và luật, được lưu lại trong 2 file “SuKien.txt” và “Luat.txt”.
Hàm TimLuat(f,i): trả về vết có chưa f làm kết luận
private Vet TimLuat(SuKien f, int level)
{
try
{
string dich = f.Ten;
Vet vet = new Vet();
for (int i = level; i < dsluat.Count; i++)
{
Luat luat = dsluat[i];
string str = luat.KetLuan;
if (dich.Equals(str))
{
vet.SuKien = f;
vet.Luat = luat;
return vet;
}
}
}
catch (Exception ex)
{
BatLoi(ex.Message);
}
return null;
}
Hàm LayGiaTri(sukien): trả về giá trị của sự kiện được đưa ra
để hỏi người sử dụng về tình trạng máy tính
privateint LayGiaTri(SuKien nut)
{
try
{
lock (objLock)
{
UpdateTextBoxDeletegate a = new
UpdateTextBoxDeletegate(HienThiCauHoi);
txtCauhoi.Invoke(a, nut.MoTa);
txtCauhoi.Text = nut.MoTa;
Monitor.Pulse(objLock);
Trang 8Monitor.Wait(objLock);
}
if (radDung.Checked)
{
return 1;
}
else
{
return 0;
}
}
catch (Exception ex)
{
BatLoi(ex.Message);
}
return 0;
}
privateint TinhGiaTriKL(Vet vet)
{
try
{
string vetrai = vet.Luat.GiaThiet;
for (int i = 0; i < dssukien.Count; i++)
{
vetrai = vetrai.Replace(dssukien[i].Ten, dssukien[i].GiaTri.ToString()); }
StringBuilder sb = new StringBuilder(vetrai);
//Phép phủ định ~
for (int i = 0; i < sb.Length - 1; i++)
{
if (sb[i].Equals('~') && sb[i + 1].Equals('0'))
{
sb[i + 1] = '1';
}
else
if (sb[i].Equals('~') && sb[i + 1].Equals('1'))
{
sb[i + 1] = '0';
}
}
sb = sb.Replace("~", "");
while (sb.Length != 1)
{
if (sb[1].Equals('^')) //Phép và ^
Trang 9{
if (sb[0].Equals('1') && sb[2].Equals('1'))
{
sb.Replace("1^1", "1");
}
else
{
sb.Replace(sb[0].ToString() + sb[1].ToString() + sb[2].ToString(),
"0");
}
}
else//Phép hoặc |
{
if (sb[0].Equals('0') && sb[2].Equals('0'))
{
sb.Replace("0|0", "0");
}
else
{
sb.Replace(sb[0].ToString() + sb[1].ToString() + sb[2].ToString(),
"1");
}
}
}
return Int32.Parse(sb.ToString());
}
catch (Exception ex)
{
BatLoi(ex.Message);
}
return 0;
}
privatevoid XuLyLuat(Vet vet)
{
try
{
Luat luat = vet.Luat;
string vetrai = luat.GiaThiet;
string[] gt = vetrai.Split('^', '|', '~');
for (int i = 0; i < gt.Length; i++)
{
for (int j = 0; j < dssukien.Count; j++)
{
if (dssukien[j].Ten.Equals(gt[i]))
{
Trang 10if (dssukien[j].GiaTri == -1)
{
dsnuttrunggian.Add(dssukien[j]); }
}
}
}
for (int i = 0; i < dsnuttrunggian.Count; i++) {
SuKien nut = dsnuttrunggian[i]; if (nut.Ten[0].Equals('e')) {
if (nut.GiaTri == -1) {
int gtri = LayGiaTri(nut); nut.GiaTri = gtri; }
}
else {
XuLyNut(nut, 0); }
}
vet.SuKien.GiaTri = TinhGiaTriKL(vet); }
catch (Exception ex) {
BatLoi(ex.Message); }
}
Hàm XuLyNut() privatevoid XuLyNut(SuKien nut, int level) {
try {
Vet vet = TimLuat(nut, level); if (vet == null) {
return; }
this.first++; bool kt = false; for (int i = 0; i < ds_vet.Count; i++) {
if (ds_vet[i].SuKien.Ten.Equals(vet.SuKien.Ten)) {
Trang 11kt = true;
}
}
if (kt == false)
{
ds_vet.Add(vet);
}
dsnuttrunggian.Remove(vet.SuKien);
XuLyLuat(vet);
}
catch (Exception ex)
{
BatLoi(ex.Message);
}
}
Hàm XuLy( ): duyệt lần lượt và thực hiện suy diễn lùi với từng
sự kiện trong tập KETLUAN
privatevoid Xuly()
{
try
{
for (int i = dsketluan.Count - 1; i >= 0; i )
{
nutcha = dsketluan[i];
for (int j = 0; j < dsluat.Count; j++)
{
dsnuttrunggian.Add(dsketluan[i]);
XuLyNut(dsketluan[i], j);
if (dsketluan[i].GiaTri == 1)
{
string str = "Theo tôi, máy tính của bạn " +
dsketluan[i].MoTa.ToLower();
frmKetQua frm = new frmKetQua(str);
frm.ShowDialog();
ktra = true;
break;
}
}
if (ktra)
{
break;
}
}
if (ktra == false)
{
string str = "Không khớp luật nào trong cơ sở tri thức!";
Trang 12frmKetQua frm = new frmKetQua(str);
frm.ShowDialog();
}
KhoiTao();
}
catch (Exception ex)
{
BatLoi(ex.Message);
}
}
Trang 132.3 Giao diện chương trình
2.3.1 Giao diện chính
2.3.2 Giao diện cập nhật cơ sở tri thức
Trang 142.3.3 Giao diện chuẩn đoán sự cố
2.3.4 Giao diện kết quả và giải thích
Trang 152.3.5 Giao diện giới thiệu
Trang 16KẾT LUẬN
Qua đề tài “Xây dựng hệ chuyên gia chuẩn đoán sự cố máy tính”, nhóm hy vọng giúp đỡ được mọi người chuẩn đoán được sự cố máy tính 1 cách nhanh nhất thông qua các biểu hiện sự cố của máy tính
Trong quá trình xây dựng chương trình nhóm em đã cố gắng nỗ lực hết mình để cho ra được chương trình tốt nhất Tuy nhiên, vì thời gian cũng như kiến thức có hạn nên bài của chúng em chưa được tốt, mong thầy, cô và các bạn đóng góp ý kiến để bài của chúng em hoàn thiện hơn Chúng em xin chân thành gửi lời cảm ơn đến cô Nguyễn Thị Thu Hà đã chỉ bảo chúng em tận tình để chúng em có thể thực hiện được bài này