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

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”

pdf17 trang | Chia sẻ: lylyngoc | Lượt xem: 4613 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Xây dựng hệ chuyên gia tư vấn hướng nghiệp, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Mục lục Mục lục ............................................................................................................................... 1 Lời nói đầu ......................................................................................................................... 2 1. Kế hoạch thực hiện. ................................................................................................ 3 2. Phân công công việc. .............................................................................................. 3 II – Phân tích bài toán ...................................................................................................... 4 1. Thực trạng ............................................................................................................... 4 a) Tư vấn hướng nghiệp là gì? ................................................................................ 4 b) Các hoạt động trong việc tư vấn hướng nghiệp. ................................................. 4 2. Mục đích ................................................................................................................. 4 3. Cách làm ................................................................................................................. 4 III – Thiết kế chương trình .............................................................................................. 6 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. .............................. 6 2. Các thuật toán được sử dụng. .................................................................................. 7 a) Thuật toán Suy diễn lùi. ...................................................................................... 7 b) Thuận toán tính toán giá trị nút kết luận của 1 luật. ........................................... 9 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” ......... 10 3. Ngôn ngữ được sử dụng. ....................................................................................... 12 III - Một số giao diện và kết quả chạy chương trình. .................................................. 13 1. Giao diện chính. .................................................................................................... 13 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 .................................................................................................. 17 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 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 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.

Các file đính kèm theo tài liệu này:

  • pdfhe_chuyen_gia_tu_van_huong_nghiep_0479.pdf
Luận văn liên quan