Tải bản đầy đủ (.doc) (21 trang)

Thiết kế hệ chuyên gia tư vấn tuyển sinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (533.47 KB, 21 trang )

ĐH Công Nghiệp Hà Nội Khoa CNTT
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
Môn hệ chuyên gia
Đề tài:
Thiết kế hệ chuyên gia tư vấn
tuyển sinh
GV HD: Th.s Trần Hùng Cường
Lớp : ĐH KHMT2 – K2
Nhóm SV thực hiện : Nhóm 19
1. Lê Thị Như Ngọc
2. Triệu Tiến Phi
3. Trương Thị Thanh
4. Phan Văn Thiện
5. Mạc Văn Thông
Hà nội - 8/2010
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
1
ĐH Công Nghiệp Hà Nội Khoa CNTT
MỤC LỤC
LỜI MỞ ĐẦU 3
I.Phân công công việc: 4
II. Phân tích bài toán: 5
1.Mục đích bài toán: 5
2. Cách thực hiện: 5
III. Cấu trúc dữ liệu và cách biểu diễn các trạng thái của bài toán 9
IV. Các thuật toán được sử dụng 12
V. Ngôn ngữ được sử dụng: 15
VI. Một số giao diện và kết quả chạy chương trình: 16


Giao diện chính chương trình: 16
Giao diện chạy chương trình: 17
Quản lý file TEXT 19
Giao diện kết quả: 20
VII. Tài liệu tham khảo: 21
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
2
ĐH Công Nghiệp Hà Nội Khoa CNTT
LỜI MỞ ĐẦU
Hầu hết mọi người trong chúng ta đều trải qua những năm tháng học tập
trong các trường phổ thông. Khi rời ghế nhà trường, ai cũng phải tính đến việc tìm
cho mình một nghề để học và làm, tạo cho mình có một cuộc sống tự lập. Chọn
nghề là một việc không đơn giản: Bạn chọn nghề gì? Liệu bạn có đủ điều kiện
theo đuổi nghề đó không? Bạn có yêu nghề đó và mãi mãi gắn bó với nó không?
v.v… Những câu hỏi như vậy không dễ trả lời.
Trong bất kỳ hoạt động nào, yếu tố con người luôn là yếu tố quan trọng
quyết định sự thành công hay thất bại. Chính vì thế, vấn đề nguồn nhân lực luôn
luôn được đặt lên hàng đầu. Với một vị trí và công việc thích hợp, con người có
thể phát huy được tất cả những ưu điểm của mình.
Chọn cho mình một nghề nghĩa là chọn cho mình một tương lai. Việc chọn
nghề thực sự quan trọng và vô cùng cần thiết. Chọn sai lầm một nghề nghĩa là đặt
cho mình một tương lai không thực sự an toàn và vững chắc. Cùng với những nỗ
lực của mình, chúng tôi hy vọng website sẽ là người bạn đồng hành đáng tin cậy
của các bạn học sinh trong quá trình học tập, chọn nghề hiện nay, trong việc học
nghề và hành nghề sau này.
Xuất phát từ nhu cầu thực tế, chúng tôi đã chọn đề tài: Xây dựng hệ chuyên
gia tư vấn hướng nghiệp. Trong phần mềm này, chúng tôi cung cấp cho bạn một
số câu hỏi Tư vấn hướng nghiệp dưới dạng trắc nghiệm. Hy vọng những nội dung
tư vấn này sẽ là tài liệu tham khảo bổ ích giúp bạn gợi mở nhận thức và giải pháp
trong định hướng nghề nghiệp, trong việc thi tuyển, học nghề và lập nghiệp.

Chúng em xin chân thành cảm ơn thày giáo Trần Hùng Cường đã hướng
dẫn chúng em hoàn thành đề tài này.
Do còn thiếu kinh nghiệm nên chương trình của chúng tôi không thể tránh
được những thiếu sót. Mong nhận được sự góp ý của thày giáo và các bạn để
chương trình được hoàn thiện hơn.
Hà Nội, ngày 15 tháng 8 năm 2010
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
3
ĐH Công Nghiệp Hà Nội Khoa CNTT
Nhóm thực hiện
I.Phân công công việc:
Nhận được đề tài, nhóm xác định các công việc cần thực hiện như sau:
- Tìm hiểu đề tài, phân tích bài toán, cách xây dựng hệ chuyên gia.
- Thu thập tài liệu.
- Nghiên cứu tài liệu.
- Lập trình, cài đặt, kiểm thử.
- Hoàn thiện, viết báo cáo.
Nhóm dự kiến chi tiết thời gian thực hiện như sau:
C Công việc Thực hiện Thời gian
Tìm hiểu đề tài, phân tích bài
toán
Cả nhóm 1 tuần
Thu thập tài liệu Cả nhóm 4 ngày
Nghiên cứu tài liệu Cả nhóm 1 tuần
Lập trình, cài đặt, kiểm thử Cả nhóm 10 ngày
Hoàn thiện, viết báo cáo Cả nhóm 2 ngày
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
4
ĐH Công Nghiệp Hà Nội Khoa CNTT
II. Phân tích bài toán:

1.Mục đích bài toán:
Nhóm xây dựng chương trình Hệ chuyên gia tư vấn hướng nghiêp với mục
đích sẽ cung cấp được một số thông tin cơ bản về công tác hướng nghiệp,
những chỉ dẫn cần thiết trong việc lựa chọn nghề nghiệp cho bản thân, giới
thiệu khái quát các lĩnh vực ngành nghề trong xã hội v.v…
Chương trình cũng cung cấp những bài viết hướng dẫn kỹ thuật thực hành
một số nghề dành cho những người không có điều kiện học qua trường lớp
nhưng muốn tự tạo cho mình một công việc tuỳ theo sở thích, điều kiện sống
cũng như khả năng tài chính của mình.
2. Cách thực hiện:
Chương trình được thực hiện dưới hình thức đưa ra các câu hỏi trắc nghiệm
và người sử dụng sẽ lựa chọn mức độ cho từng câu hỏi (độ chắc chắn (CF)). Sau
đó, dựa vào lý thuyết độ chắc chắn ta sẽ tính được mức độ chắc chắn đối với từng
nghề nghiệp. Nghề nghiệp nào có độ chắc chắn lớn nhất thì sẽ phù hợp với người
sử dụng nhất.
MB (Measure of Belief in): độ đo sự tin cậy.
MD (Measure of Disbelief in) : độ đo sự tin không tin cậy
CF (Certainly Factor): hệ số chắc chắn
Gọi: - MB(H/E) là độ đo sự tin cậy của giả thiết H khi có chứng cứ E.
-MD(H/e) là độ đo sự không tin cậy của giả thiết H khi có chứng cứ E.
Khi đó: 0 < MB(H/E) < 1 trong khi MD(H/E) = 0
0 < MD(H/E) < 1 trong khi MBs(H/E)=0
Độ đo chắc chắn CF(H/E) được tính bằng công thức:
CF(H/E) = MB(H/E) – MD(H/E)
a. Luật đơn giản: if (e) then (c)
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
5
ĐH Công Nghiệp Hà Nội Khoa CNTT
CF(e) là độ đo chắc chắn của chứng cớ.
CF(r) là độ đo chắc chắn của luật suy diễn.

Khi đó: CF(c) là độ đo chắc chắc của kết luận sẽ được tính bằng công thức:
CF(c) = CF(e) * CF(r)
b. Công thức độc lập: (kết hợp nhiều luật có cùng kết luận)
Luật 1: IF (e1) THEN (c) với CF(r1) là độ đo chắc chắn của luật 1
Luật 2: IF (e2) THEN (c) với CF(r2) là độ đo chắc chắn của luật 2
- Nếu CF(r1) và CF(r2) đều dương thì:
CF tổng = CF(r1)+CF(r2) – CF(r1)*CF(r2)
- Nếu CF(r1) và CF(r2) đều âm thì:
CF tổng = CF(r1)+CF(r2) + CF(r1)*CF(r2)
- Nếu CF(r1) và CF(r2) khác dấu thì:
CF tổng = (CF(r1)+CF(r2)) / (1-MIN(ABS( CF(r1)), ABS(CF(r2)))
Ví dụ: Có một số luật sau đây
r1: if (e1) then (c1) CF(r1) = 0.8
r2: if (e2) then (c2) CF(r2) = 0.9
r3: if (e3) then (c3) CF(r3) = 0.5
Hệ sẽ đưa ra tất cả các luật với những ngành nghề mà người dùng lựa chọn,
từ đó, người dùng sẽ lựa chọn mức độ của mình đối với từng luật đó. Đây chính là
độ chắc chắn của chứng cớ CF
(e)
. Trong chương trình đã có độ chắc chắn của luật
suy diễn CF
(r)
. Từ đây ta sẽ tính được độ chắc chắn của kết luận CF
(c)
dựa vào các
công thức tính độ đo sự chắc chắn dựa trên mạng suy diễn sau:
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
6
ĐH Công Nghiệp Hà Nội Khoa CNTT
Sử dụng công thức tính như sau:

If (e1) then c với CF(r1)
If (e2) then c với CF(r2)

If (en) then c với CF(r3)
Vì chỉ có công thức tính với 2 giả thiết :
If (e1) then c
If (e2) then c
Nên ta sẽ tính dần từng cặp đôi 1.
If (e1) then c với CF(r1)
IF(e2) then c với CF(r2)

If (e
n-1
) then c với CF(r
n-1
)
If (e2) then c với CF (r2)

If (e
n-2
) then c với CF(r
n-2
)

Cuối cùng chỉ còn một cặp đôi I và II và ta tính theo công thức:
- Với CF(I) và CF(II) là CF của kết luận 1 và 2, khi CF(I) và
CF(II) đều dương thì:
C
tổng
= CF(I) + CF(II) – CF(I) * CF(II)

GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
7
ĐH Công Nghiệp Hà Nội Khoa CNTT
- Khi CF(I) và CF(II) đều âm thì:
C
tổng
= CF(I) + CF(II) + CF(I) * CF(II)
- Nếu CF(I) khác dấu CF(II) thì:
C
tổng
= (CF(I) + CF(II)) / (1 –MIN(ABS(CF(I)), ABS(CF(II))))
Sau khi tính được độ chắc chắn của kết luận, so sánh đọ chắc chắn của các
kết luận lấy độ chắc chắn lớn nhất. Dựa vào đó, hệ thống sẽ đưa ra thông báo tới
người dùng ngành nghề nào sẽ phù hợp với họ.
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
8
ĐH Công Nghiệp Hà Nội Khoa CNTT
III. Cấu trúc dữ liệu và cách biểu diễn các trạng thái
của bài toán
Bài toán sử dụng các đối tượng Nút, Luật, Kết luận.
- Cấu trúc của đối tượng Nút:
Ví dụ:
e1:Tính tự lập, đầu óc thực tế
Trong đó: e1: là mã nút
Tính tự lập, đầu óc thực tế: là tên nút
Các thuộc tính: - getMaNut: để lấy mã nút.
- getTenNut: để lấy tên nút.
- getCFNut: để lấy độ chắc chắn của nút.
Hàm: - addCF: thêm độ chắc chắn của nút.
- Cấu trúc của đối tượng Luật:

Ví dụ: r1 e1->c1:0.9
Trong đó: r1: là mã luật
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
9
ĐH Công Nghiệp Hà Nội Khoa CNTT
e1: là mã nút
c1: là mã kết luận
0.9: là độ chắc chắn của chứng cớ.
Các thuộc tính: - getCFLuat: để lấy CF của luật
- getMaKetLuanLuat: để lấy mã kết luận
- getMaLuat: để lấy mã luật
- getmaNutluat: để lấy mã nút
- getTenLuat: để lấy tên luật.
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
10
ĐH Công Nghiệp Hà Nội Khoa CNTT
- Cấu trúc của đối tượng
Ví dụ: c1:Thực tế như Kỹ thuật, nông nghiệp, thuỷ lợi,
dầu khí…
Trong đó:
- c1: là mã kết luận
- Thực tế như Kỹ thuật, nông nghiệp, thuỷ lợi, dầu khí…: là tên kết
luận
Các thuộc tính:
- getCFTong: để lấy CF tổng
- getMaKetLuan: để lấy mã kết luận
- getTenKetLuan: để lấy tên kết luận
Hàm:
- addCFTong: để tính CF tổng cho mỗi kết luận
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19

11
ĐH Công Nghiệp Hà Nội Khoa CNTT
IV. Các thuật toán được sử dụng
Chương trình sử dụng các hàm:
- loadNut: để lấy dữ liệu từ file Nut.txt ra class Nut.cs
public void loadNut()
{
try
{
Stream s = File.OpenRead("Nut.txt");
StreamReader sr = new StreamReader(s);
string str = sr.ReadLine();
int index;
Nut nut;
string ss, ss2;
while (!string.IsNullOrEmpty(str))
{
index = str.IndexOf(':');
ss = str.Substring(0, index);
ss2 = str.Substring(index + 1, str.Length-1-index);
nut = new Nut();
nut.getTenNut = ss2;
nut.getMaNut = ss;
listNut.Add(nut);
str = sr.ReadLine();
}
sr.Close();
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
}
}
- loadLuat: để lấy dữ liệu từ file Luat.txt ra class Luat.cs
- loadKetLuan: để lấy dữ liệu từ file KetLuan.txt ra class
KetLuan.cs
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
12
ĐH Công Nghiệp Hà Nội Khoa CNTT
- Áp dụng lý thuyết về độ chắc chắn CF
private void butTinhToan_Click(object sender, EventArgs e)
{
try
{
loadKetLuan();
loadLuat();
textBoxX1.Text = "";
textBoxX3.Text = "";
txtMoTa.Text = "";
foreach (Luat bienLuat in listLuat)
{
foreach (Nut bienNut in listNut)
{
if (bienNut.getMaNut == bienLuat.getmaNutluat)
{
bienLuat.getCFLuat = bienLuat.getCFLuat *
bienNut.getCFNut * 0.1F;
}
}
}


float cFTam;
int i;
foreach (KetLuan bienKetLuan in listKetLuan)
{
cFTam = 0;
i = 0;
foreach (Luat bienLuat in listLuat)
{
if (bienLuat.getMaKetLuanLuat ==
bienKetLuan.getMaKetLuan)
{
cFTam += bienLuat.getCFLuat - cFTam *
bienLuat.getCFLuat;
i++;
}
}
if (i == 0)
{
bienKetLuan.addCFTong(0.0F);
}
else
{
bienKetLuan.addCFTong(cFTam);
}
textBoxX1.Text += bienKetLuan.getTenKetLuan + ": "+
bienKetLuan.getCFTong + "; ";
}
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
13

ĐH Công Nghiệp Hà Nội Khoa CNTT
float CFmax = 0;
foreach (KetLuan bienKetLuan in listKetLuan)
{
if (bienKetLuan.getCFTong > CFmax)
CFmax = bienKetLuan.getCFTong;
}
lblKetLuan.Text = "Chào bạn " + txtHoTen.Text + " \r\n
Theo dữ liệu bạn nhập vào, \r\n chúng tôi khuyên bạn nên chọn \r\n nhóm
ngành:";
foreach (KetLuan bienKetLuan in listKetLuan)
{
if (bienKetLuan.getCFTong == CFmax)
{
textBoxX3.Text += bienKetLuan.getTenKetLuan + ";
";
txtMoTa.Text += bienKetLuan.getMoTa + "; ";
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
14
ĐH Công Nghiệp Hà Nội Khoa CNTT
V. Ngôn ngữ được sử dụng:
Chương trình được viết bằng ngôn ngữ C# bởi vì đây là một ngôn ngữ trực

quan, dễ sử dụng. Sử dụng giao diện được viết bằng Window Form nên quen
thuộc với hầu hết người sử dụng máy tính.
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
15
ĐH Công Nghiệp Hà Nội Khoa CNTT
VI. Một số giao diện và kết quả chạy chương trình:
Giao diện chính chương trình:
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
16
ĐH Công Nghiệp Hà Nội Khoa CNTT
Giao diện chạy chương trình:
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
17
ĐH Công Nghiệp Hà Nội Khoa CNTT
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
18
ĐH Công Nghiệp Hà Nội Khoa CNTT
Quản lý file TEXT
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
19
ĐH Công Nghiệp Hà Nội Khoa CNTT
Giao diện kết quả:
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19
20
ĐH Công Nghiệp Hà Nội Khoa CNTT
VII. Tài liệu tham khảo:
- Giáo trình Hệ chuyên gia.
- Các hệ cơ sở tri thức.
- Một số trang web.
GVHD: Thầy Trần Hùng Cường KHMT2-k2-Nhóm 19

21

×