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

xây dựng hệ chuyên gia tư vấn hướng nghiệp

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 (357.57 KB, 18 trang )

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: 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
Mục lục
Lờ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
I - 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:
Tên công việc Thực hiện Trạng thái
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
II – 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
Qua 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)
III – 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
củ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ế
trá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);
}
}
b) 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");
}
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());
}
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”
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;

for (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.
Nhó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.
III - Một số giao diện và kết quả chạy chương trình.
1. Giao diện chính.
2. Giao diện kết quả.
3. Giao diện xem giải thích.
4. Giao diện quản lý cơ sở tri thức.
IV – 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. />4. />

×