Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính

23 2.1K 26
Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BÁO CÁO BÀI TẬP LỚN HỆ CHUYÊN GIA ĐỀ TÀI: Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính Hỏng máy tính luôn là vấn đề gặp phải đối với người sử dụng máy tính. Đôi khi có những lỗi mà chúng ta có thể phát hiện ra bằng trưc quan hoặc bằng âm thanh do máy phát ra.

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN HỆ CHUYÊN GIA ĐỀ TÀI: Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính Gv hướng dẫn: Thầy Trần Hùng Cường Sinh viên thực hiện: 1. Lê Văn Thanh 2. Hoàng Minh Thanh 3. Hoàng Văn Quang 4. Phạm Đình Ba 5. Nguyễn Thắng Lớp: KHMT2 – K2 Hà Nội – 15/08/2010 Lời nói đầu Hỏng máy tính luôn là vấn đề gặp phải đối với người sử dụng máy tính. Đôi khi có những lỗi mà chúng ta có thể phát hiện ra bằng trưc quan hoặc bằng âm thanh do máy phát ra. Nhằm phát hiện ra những lỗi đơn giản của máy tính cũng như củng cố kiến thức về hệ chuyên gia chúng em đã chọn đề tài: “Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính” Chương trình còn nhiều thiếu sót, chúng em mong nhận được sự đóng góp của thầy và các bạn để chúng em hoàn thiện chương trình hơn Tổng quan về hệ chuyên gia Hệ chuyên gia là gì? Hệ chuyên gia là một chương trình máy tính biểu diễn và lập luận dựa trên tri thức trong 1 chủ để làm việc cụ thể nào đó, với cách nhằm giải quyết vấn đề hoặc đưa ra lời khuyên. Cấu trúc của hệ chuyên gia Hệ chuyên gia = Cơ sở tri thức + Mô tơ suy diễn Suy diễn lùi là gì? Suy diễn lùi : là quá trình suy luận ngược xuất phát từ một số sự kiện ban đầu, ta tìm kiếm các sự kiện đã "sinh" ra sự kiện này. Một ví dụ thường gặp trong thực tế là xuất phát từ các tình trạng của máy tính, chẩn đoán xem máy tính đã bị hỏng hóc ở đâu. Ví dụ : Tập các sự kiện : • Ổ cứng là "hỏng" hay "hoạt động bình thường" • Hỏng màn hình. • Lỏng cáp màn hình. • Tình trạng đèn ổ cứng là "tắt" hoặc "sáng" • Có âm thanh đọc ổ cứng. • Tình trạng đèn màn hình "xanh" hoặc "chớp đỏ" • Không sử dụng được máy tính. • Điện vào máy tính "có" hay "không" Tập các luật : R1. Nếu (cáp màn hình "lỏng") thì không sử dụng được máy tính. R2.Nếu (ô cứng “hỏng”) thì không sử dụng được máy tính. R3. Nếu (điện vào máy là "có") và (âm thanh đọc ổ cứng là "không") thì (ổ cứng "hỏng"). R4. Nếu (điện vào máy là “có”) và (đèn ổ cứng là “tắt”) thì (ổ cứng “hỏng”) R5. Nếu (điện vào máy là "có") và (tình trạng đèn màn hình là "chớp đỏ") thì (cáp màn hình "lỏng"). Xây dựng luật a: là cáp màn hình lỏng => c: không sử dụng được máy tính. b: ổ cứng hỏng => c :không sử dụng được máy tính. d: điện vào máy là có & e: âm thanh đọc ổ cứng là không => f: ổ cứng hỏng d điện vào máy là có & g: đèn ổ cứng là tắt =>f :ổ cứng hỏng d điện vào máy là có & h: đèn màn hình là chớp đỏ =>k: cáp màn hình lỏng r1:a=>c r2:b=>c r3:d&e=>f r4:d&g=>f r5:d&h=>k Để xác định được các nguyên nhân gây ra sự kiện "không sử dụng được máy tính", ta phải xây dựng một cấu trúc đồ thị gọi là đồ thị AND/OR như sau : Như vậy là để xác định được nguyên nhân gây ra hỏng hóc là do ổ cứng hỏng hay cáp màn hình lỏng, hệ thống phải lần lượt đi vào các nhánh để kiểm tra các điều kiện như điện vào máy "có", âm thanh ổ cứng "không"…Tại một bước, nếu giá trị cần xác định không thể được suy ra từ bất kỳ một luật nào, hệ thống sẽ yêu cầu người dùng trực tiếp nhập vào. Chẳng hạn như để biết máy tính có điện không, hệ thống sẽ hiện ra màn hình câu hỏi "Bạn kiểm tra xem có điện vào máy tính không (kiểm tra đèn nguồn)? (C/K)". Để thực hiện được cơ chế suy luận lùi, người ta thường sử dụng ngăn xếp (để ghi nhận lại những nhánh chưa kiểm tra). Chuong trinh minh hoa co che suy dien lui. #include "stdio.h" #include "conio.h" #include "string.h" #include "stdlib.h" #define FileNut "SDLNut.txt" #define FileLuat "SDLLuat.txt" #define MAX_NUT 200 #define MAX_LUAT 100 #define LEN_YNGHIA 26 #define LEN_NUT 4 #define LEN_VT 4 #define NODE_AND 1 #define NODE_OR 2 /* Moi nut thuoc 1 trong 3 loai: NutLa, TrungGian, KetLuan */ typedef enum Loai {NutLa,TrungGian,KetLuan}; typedef struct tagLuat { char TenLuat[10]; int VT[2*LEN_VT]; int VP; tagLuat() // Ham khoi tao { for (int i=0; i<2*LEN_VT; i++) VT[i] = 0; VP = 0; } }LUAT; ////////////////////////////////////////////////////////////////////////// LUAT TapLuat[MAX_LUAT]; int SoLuat = 0; char NutTen[MAX_NUT][LEN_NUT]; char NutYNghia[MAX_NUT][LEN_YNGHIA]; int SoNut = 0; int GTNut[MAX_NUT]; // =0: Sai; =1: Dung ; =-1 : Chua biet enum Loai NutLoai[MAX_NUT]; ////////////////////////////////////////////////////////////////////// // Dinh nghia cac ham void DocNutTuFile(char* FileName) { FILE *f; char Ten[LEN_NUT]; int k; // Doc luat tu file vao mang tap luat f = fopen(FileName, "rt"); if (f!= NULL) { fscanf(f, "%d\n", &SoNut); for (int i=1; i<=SoNut; i++) { fscanf(f, "%s %s\n", &NutTen[i], &NutYNghia[i]); } } else { printf("\n Khong tim thay file : %s !!!", FileName); getch(); } fclose(f); } // Ham nay tim vi tri cua nut co ten (Ten) trong mang NutTen[] int TimVitriNut(char *Ten) { for (int i=1; i<=SoNut; i++) if (strcmp(NutTen[i], Ten) == 0) return i; return 0; } // Ham nay doc danh sach cac luat tu file vao mang TapLuat[] void DocLuatTuFile(char* FileName) { FILE *f; int nCount, bNot; char stInput[1024]; int nLen, iFnd, jFnd, j; char stTen[LEN_NUT]; f = fopen(FileName, "rt"); if (f!=NULL) { fscanf(f, "%d", &SoLuat); for (int i=0; i<SoLuat; i++) { fscanf(f, "%s", &stInput); nLen = strlen(stInput); jFnd = 0; iFnd = 0; while (jFnd<nLen && stInput[jFnd] != ':') TapLuat[i].TenLuat[iFnd++] = stInput[jFnd++]; // Tim vi tri phan cach ve trai va ve phai jFnd ++; while (jFnd<nLen && stInput[jFnd] != '>') jFnd ++; // Xu ly ve trai bNot = 1; nCount = 0; iFnd ++; // Bo qua dau ':' while (iFnd<jFnd-1) { while (iFnd<jFnd-1 && stInput[iFnd] == ' ') iFnd++; // Bo qua cac khoang trang if (stInput[iFnd] == '^') { TapLuat[i].VT[2*nCount] = NODE_AND; } else if (stInput[iFnd] == '|') { TapLuat[i].VT[2*nCount] = NODE_OR; } else if (stInput[iFnd] == '~') bNot = -1; else { j = iFnd; while (j<jFnd && stInput[j] != ' ' && stInput[j] != '|' && stInput[j] != '^' && stInput[j] != '~' && stInput[j] != '=') stTen[j-iFnd] = stInput[j++]; stTen[j-iFnd] = '\0'; TapLuat[i].VT[2*nCount+1] = bNot*TimVitriNut(stTen); bNot = 1; nCount ++; iFnd = j-1; } [...]... i+1, stLuat); } printf("\n\n\n An ENTER de quay ve man hinh chinh"); getch(); } // Xu ly qua trinh suy dien lui void Xuly_SuyDienLui() { clrscr(); for (int i=1; i . hiện ra những lỗi đơn giản của máy tính cũng như củng cố kiến thức về hệ chuyên gia chúng em đã chọn đề tài: Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính Chương trình còn. NỘI KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN HỆ CHUYÊN GIA ĐỀ TÀI: Cài đặt thuật toán suy diễn lùi chuẩn đoán hỏng hóc của máy tính Gv hướng dẫn: Thầy Trần Hùng Cường Sinh viên thực hiện: 1. Lê. vấn đề hoặc đưa ra lời khuyên. Cấu trúc của hệ chuyên gia Hệ chuyên gia = Cơ sở tri thức + Mô tơ suy diễn Suy diễn lùi là gì? Suy diễn lùi : là quá trình suy luận ngược xuất phát từ một số sự

Ngày đăng: 16/08/2014, 20:12

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan