TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP LỚN HỆ CHUYÊN GIA ĐỀ TÀI: Xây dựng hệ chuyên gia tư vấn hướng nghiệp Gv hướng dẫn: Thầy Trần Hùng Cường Sinh viê
Trang 1TRƯỜ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: Xây dựng hệ chuyên gia tư vấn hướng nghiệp
Gv hướng dẫn: Thầy Trần Hùng Cường
Sinh viên thực hiện:
1 Vũ Thị Ngọc
2 Nguyễn Bá Trường Lớp: KHMT2 – K2
Hà Nội – 10/08/2010
Trang 2Mục lục
Mục lục 2
Lời nói đầu 3
1 Kế hoạch thực hiện 4
2 Phân công công việc 4
II – Phân tích bài toán 5
1 Thực trạng 5
a) Tư vấn hướng nghiệp là gì? 5
b) Các hoạt động trong việc tư vấn hướng nghiệp 5
2 Mục đích 5
3 Cách làm 5
III – Thiết kế chương trình 7
1 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 7
2 Các thuật toán được sử dụng 8
a) Thuật toán Suy diễn lùi 8
b) Thuận toán tính toán giá trị nút kết luận của 1 luật 10
c) Thuật toán giải thích lời khuyên khi người dùng nhấn nút “Giải thích” 11
3 Ngôn ngữ được sử dụng 13
III - Một số giao diện và kết quả chạy chương trình 14
1 Giao diện chính 14
2 Giao diện kết quả 14
3 Giao diện xem giải thích 15
4 Giao diện quản lý cơ sở tri thức 16
IV – Tài liệu tham khảo 18
Trang 3Lời nói đầu
Nhà trường, gia đình và xã hội luôn coi việc hỗ trợ cho lớp trẻ hướng nghiệp, là một nhiệm vụ quan trọng trong sự nghiệp giáo dục Tuy nhiên, trách nhiệm lớn lao đó không thể thay thế cho nội lực chủ quan của người muốn hướng nghiệp
Bài toán hướng nghiệp cũng như mọi bài toán đường đời khác: Sai một ly,
đi cả dặm, nhỡ cả tiền đồ và sự nghiệp! Nhiều khi phải “làm lại từ đầu”, gây biết bao lãng phí cho chính mình, gia đình, nhà trường và xã hội
Nhằm giải quyết bài toán trên và để củng cố kiến thức của môn học hệ chuyên gia, cũng như rèn luyện kỹ năng lập trình, nhóm chúng em đã chọn đề tài
“Xây dựng hệ chuyên gia tư vấn hướng nghiệp”
Chúng em xin chân thành cảm ơn thầy Trần Hùng Cường đã tạo điều kiện cho chúng em hoàn thành bài tập lớn này
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
Hà Nội, tháng 10 năm 2010
Nhóm sinh viên thực hiện
Vũ Thị Ngọc Nguyễn Bá Trường
Trang 4I - Phân công công việc
1 Kế hoạch thực hiện.
Sau khi nhận đề tài, nhóm đã lên kế hoạch thực hiện như sau:
a) Thu thập tài liệu
b) Nghiên cứu tài liệu
c) Lập trình
d) Viết báo cáo
Bước thu thập tài liệu được thực hiện ngay khi nhận đề tài Sau 1 hồi tìm kiếm các tài liệu và các nguồn tài nguyên trên mạng, 2 thành viên bắt đầu nghiên cứu các tài liệu thu thập được Quá trình thu thập tài liệu và nghiên cứu tài liệu sẽ được thực hiện trong vòng 1 tuần
Sau khi nghiên cứu và tranh luận, nhóm đã hiểu được ý tưởng và sẽ bắt tay vào lập trình Vì nhóm chỉ có 2 thành viên nên mọi công việc sẽ đều làm theo nhóm Việc lập trình cũng được thực hiện bởi cả 2 thành viên để cố gắng tránh mọi sai sót Sau khi lập trình và test thử xong nhóm bắt đầu viết báo cáo Giai đoạn lập trình và viết báo cáo, nhóm bố trí kế hoạch thực hiện trong 2 tuần
2 Phân công công việc.
Chi tiết công việc cùng tiến độ được đề cập trong bảng sau:
Thu thập tài liệu Nguyễn Bá Trường
Vũ Thị Ngọc
Đã hoàn thành
Nghiên cứu tài liệu Nguyễn Bá Trường
Vũ Thị Ngọc
Đã hoàn thành
Lập trình Nguyễn Bá Trường
Vũ Thị Ngọc
Đã hoàn thành
Viết báo cáo Nguyễn Bá Trường
Vũ Thị Ngọc
Đã hoàn thành
Trang 5II – Phân tích bài toán
1 Thực trạng
a) Tư vấn hướng nghiệp là gì?
Hướng nghiệp là các hoạt động nhằm hỗ trợ mọi cá nhân chọn lựa và phát triển chuyên môn nghề nghiệp phù hợp nhất với khả năng của cá nhân
Do quan hệ hữu cơ giữa hướng nghiệp và tự hướng nghiệp, nên từ HƯỚNG NGHIỆP dùng ở đây tùy theo văn cảnh mà được hiểu:
- Hoặc là sự hỗ trợ bên ngoài (mang tính chất tư vấn, không áp đặt, chỉ gợi suy nghĩ để tìm tòi)
- Hoặc là sự lựa chọn đi kèm với nỗ lực của bản thân để tự hướng nghiệp theo quyết định riêng
Tư vấn hướng nghiệp là tư vấn về sự hỗ trợ khách quan và cả cách nỗ lực chủ quan trong quá trình hướng nghiệp Nó có lợi cho người đang cần tư vấn hướng nghiệp và cũng lợi cho cả người cần dẫn dắt người khác hướng nghiệp (như phụ huynh, thầy cô, bạn bè…)
b) Các hoạt động trong việc tư vấn hướng nghiệp.
- Nói chuyện, giao lưu tư vấn
- Làm trắc nghiệm hướng nghiệp
2 Mục đích
Sau khi tìm hiểu thực tế, nhóm quyết định làm theo hình thức trắc nghiệm hướng nghiệp Như vậy chương trình sẽ phải hỏi người sử dụng 1 số thông tin liên quan tới người sử dụng Sau đó dựa vào câu trả lời của người sử dụng và tập luật chương trình phải đưa ra được lời khuyên cho người sử dụng Phải giải thích được vì sao lại đưa ra lời khuyên như thế
3 Cách làm
Trang 6Qua tìm hiểu, nhóm rút ra cách xây dựng hệ chuyên gia tư vấn hướng nghiệp như sau
Đầu tiên phải xây dựng được 1 tập luật để làm cơ sở tri thức cho chương trình
Sau đó phải cài đặt 1 thuật toán suy diễn (suy diễn tiến hoặc suy diễn lùi) để thao tác trên tập luật đó và đưa ra lời khuyên Thuật toán này đóng vai trò là
mô tơ suy diễn
Như vậy có 2 bước chính cần làm đó là:
- Xây dựng cơ sở tri thức
- Xây dựng mô tơ suy diễn (Cài đặt thuật toán suy diễn – cụ thể là suy diễn lùi)
Trang 7III – Thiết kế chương trình
1 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 phải thao tác với các đối tượng nút và luật (node and rule) vì thế nhóm xây dựng một số cấu trúc dữ liệu (là các class) và cách biểu diễn các thông tin như sau:
Một nút sẽ có dạng:
e1 Bạn đã tốt nghiệp phổ thông trung học
trong đó e1 là tên của nút và “Bạn đã tốt nghiệp phổ thông trung học” là giá trị text của nút Để mô tả nút này nhóm sử dụng 1 class là Node với thuộc tính name là tên node, thuộc tính text là giá trị text của node và thuộc tính value là giá trị của node (đúng/sai):
Một luật sẽ có dạng:
r1 ~e2&~e3&~e4=>c9
trong đó r1 là tên của luật và ~e2&~e3&~e4 là giả thiết còn c9 là kết luận của
luật Để mô tả 1 luật nhóm sử dụng 1 class là Rule với thuộc tính name là tên
Trang 8của luật, thuộc tính suppose là giả thiết của luật và thuộc tính conclusion là kết luận của luật:
Để biết 1 node được chọn tại rule nào, nhóm đã xây dựng class Road để lưu thông tin 2 đối tượng trên
Vì lượng dữ liệu khá nhỏ nên 2 tập nút và luật được lưu trong 2 file text lần
lượt đặt tên là “nodes.txt” và “rule.txt” và đặt tại cùng thư mục chứa chương
trình
2 Các thuật toán được sử dụng.
a) Thuật toán Suy diễn lùi.
Đây là thuật toán quan trọng nhất trong chương trình Suy diễn lùi là quá trình xuất phát từ sự kiện cần chứng minh và thay vào đó là những sự kiện ở vế
Trang 9trái của 1 luật có vế phải là sự kiện cần chứng minh Quá trình này được thực hiện cho đến khi đưa về các sự kiện là tập sự kiện con của tập sự kiện giả thiết Thuật toán Suy diễn lùi được cài đặt bằng hàm Process()
private void Process()
{
try
{
//Voi moi ket luan c, ta duyet qua no
for ( int i = conclusionNodeList.Count - 1; i >= 0;i ) {
parentNode = conclusionNodeList[i];
for ( int j = 0; j < ruleList.Count; j++)
{
// Cho no vao tap dang xet
tempNodeList.Add(conclusionNodeList[i]);
// Sau do ta di tim luat sinh ra ket luan tren
va cho vao tap Vet(roadList)
ProcessNode(conclusionNodeList[i], j);
// Kiem tra xem node nay co value = 1 chua
if (conclusionNodeList[i].Value == 1)
{
string str = "Theo tôi, " + conclusionNodeList[i].Text.ToLower();
WhyForm whyForm = new WhyForm(str);
whyForm.ShowDialog();
isHasAnswer = true ;
break ;
}
}
if (isHasAnswer)
{
break ;
}
}
if (isHasAnswer == false )
{
string str = "Không khớp luật nào trong cơ sở tri thức!";
WhyForm whyForm = new WhyForm(str);
whyForm.ShowDialog();
}
Init();
}
catch (Exception ex)
{
ShowError(ex.Message);
}
}
Trang 10b) Thuận toán tính toán giá trị nút kết luận của 1 luật.
Thuật toán này sẽ tính giá trị của nút kết luận của 1 luật khi các giả thiết của luật đó là đã biết Được cài đặt bằng hàm CalculateConclusionValue và thao tác trên các phép toán &,|,~ của tập luật
private int CalculateConclusionValue(Road road)
{
string suppose = road.Rule.Suppose;
for ( int i = 0; i < nodeList.Count; i++)
{
suppose = suppose.Replace(nodeList[i].Name, nodeList[i].Value.ToString());
}
StringBuilder sb = new StringBuilder(suppose);
//xu ly dau ~
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( "~" , "" );
//xu ly dau & |
while (sb.Length !=1)
{
if (sb[1].Equals( '&' ))
{
if (sb[0].Equals( '1' ) && sb[2].Equals( '1' ))
{
sb.Replace( "1&1" , "1" );
Trang 11}
else
{
sb.Replace(sb[0].ToString() + sb[1].ToString() + sb[2].ToString(), "0" );
}
}
else //chac chan la dau |
{
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());
}
Thuật toán này làm nhiệm vụ hiển thị lời giải thích cho người dùng biết dựa vào đâu mà đưa ra lời khuyên như vậy Nó sẽ lấy thông tin được lưu trong biến roadList (là 1 list để lưu lại các rule đã xét) để đưa ra câu trả lời Sau đó sử dụng các node trong nodeList để đưa ra câu nói thân thiện với người sử dụng
hơn (Ví dụ thay vì chỉ nói là “Theo luật r1 ~e2&~e3&~e4, bạn nên đi làm” thì sẽ nói là “Theo luật r1, nếu không phải bạn có IQ cao và không phải bạn
tốt nghiệp THPT và không phải bạn có năng khiếu thì bạn nên đi làm”
Thuật toán này được cài đặt bằng hàm ShowWhy()
private void ShowWhy()
{
string str = string Empty;
Trang 12for ( int i = roadListTemp.Count - 1; i >= 0; i )
{
if (roadListTemp[i].Node.Value == 1)
{
str += "Theo luật " + roadListTemp[i].Rule.Name + " thì nếu " + roadListTemp[i].Rule.Suppose + ",
" + roadListTemp[i].Node.Text + Environment.NewLine;
}
}
//thay cac node name bang node text
for ( int i = 0; i < nodeList.Count; i++)
{
str = str.Replace(nodeList[i].Name, nodeList[i].Text.ToLower());
}
//thay dau & thanh chu va
str = str.Replace( "&" , " và " );
//thay dấu | thành chữ hoặc
str = str.Replace( "|" , " hoặc " );
//thay dấu ~ thành không phải
str = str.Replace( "~" , " không phải " );
if (! string IsNullOrEmpty(str))
{
MessageBox.Show(str, "Giải thích" ,MessageBoxButtons.OK, MessageBoxIcon.Question);
}
else
{
MessageBox.Show( "Bạn chưa được tư vấn nên tôi không thể giải thích cho bạn được." , "Giải thích" ,
MessageBoxButtons.OK, MessageBoxIcon.Information); }
}
3 Ngôn ngữ được sử dụng.
Trang 13Nhóm nhận thấy ngôn ngữ C# là một ngôn ngữ rất dễ học, gần với ngôn ngữ tự nhiên và hơn nữa đang là ngôn ngữ được học trong kì VII, vì thế nhóm
đã quyết định sử dụng ngôn ngữ lập trình C# để xây dựng chương trình
Trang 14III - Một số giao diện và kết quả chạy chương trình.
1 Giao diện chính.
Trang 152 Giao diện kết quả.
Trang 163 Giao diện xem giải thích.
Trang 174 Giao diện quản lý cơ sở tri thức.
Trang 18IV – Tài liệu tham khảo
1 Giáo trình Hệ Chuyên Gia
2 Các hệ cơ sở tri thức.
3 http://en.wikipedia.org/wiki/Expert_system
4 http://www.cs.nott.ac.uk/~sxp/ES3/sld001.htm