Với cách thức tiến hành thực nghiệm nhƣ trên, hệ thống thực nghiệm đã thu đƣợc kết quả nhƣ sau:
Ngƣời dùng nhập vào tập tin Scheduler.txt dữ liệu lịch biểu của mình với các dữ liệu nhƣ bảng biểu 4.1.
Lịch biểu của ngƣời thứ nhất Lịch biểu của ngƣời thứ hai
21/10/2010: 13h-16h: BV luận văn. 22/10/2010: 10h-11h: Đi dạy lớp C12 24/10/2010: 08h-10h: Đi họp lớp. 29/10/2010: 16h-17h: Họp tổ bộ môn 21/10/2010: 08h-09h: Dự khai giảng. 22/10/2010: 10h-11h: Họp khoa 23/10/2010: 08h-10h: Đi học NVSP. 29/10/2010: 16h-17h: Họp tổ bộ môn
Lịch biểu của ngƣời thứ ba Lịch biểu của ngƣời thứ tƣ
21/10/2010: 08h-09h: Dự khai giảng 23/10/2010: 09h-11h: Đi sửa máy tính 24/10/2010: 08h-10h: Đi họp ISO 29/10/2010: 08h-11h: Họp CBCNVC
21/10/2010: 14h-15h: Tiếp Thanh tra 23/10/2010: 09h-11h: Dạy lớp T14 24/10/2010: 08h-10h: Báo cáo ĐTKH 29/10/2010: 08h-11h: Coi thi lớp K12
Ngƣời dùng nhập vào nội dung tập tin điều kiện của cuộc họp Conditions.txt với dữ liệu nhƣ hình vẽ 4.3
Nội dung tập tin Conditions.txt ở đây có nghĩa là cuộc họp phải đƣợc tổ chức trong khoảng thời gian từ ngày 22/10/2010 đến ngày 24/10/2010, vào các thời điểm từ 8h đến 12h.
Sau đó ngƣời dùng kích hoạt tác tử SchAgent của mình để đi thu thập thông tin lịch biểu và tính toán để đƣa ra thời điểm của cuộc họp thì sẽ nhận lại đƣợc tệp tin kết quả Result.txt có nội dung nhƣ hình vẽ 4.4:
Tệp tin kết quả trên cho thấy:
Ngày 22/10/2010: thời điểm từ 8h đến 10h, và 11h đến 12h không có thành viên nào bận. Thời điểm từ 10h đến 11h có hai thành viên bận.
Ngày 23/10/2010: thời điểm từ 8h đến 9h có một thành viên bận, từ 9h đến 10h có ba thành viên bận, từ 10h đến 11h có hai thành viên bận, từ 11h đến 12h không có thành viên nào bận.
Ngày 24/10/2010: thời điểm 8h đến 10h có ba thành viên bận, từ 10h đến 12h không có thành viên nào bận.
22/10/2010-24/10/2010 08h-12h
Hình 4.3: Nội dung tập tin Conditions.txt của ngƣời dùng
Căn cứ trên tệp tin kết quả này ngƣời dùng có thể chọn thời điểm cuộc họp vào các thời điểm: từ 8h đến 10h ngày 22/10/2010 hoặc từ 10h đến 11h ngày 24/10/2010 hoặc vào lúc 11h đến 12h của các ngày 22/10/2010, 23/10/2010, 23/10/2010. Các thời điểm đó là các thời điểm không có thành viên nào bận công việc.
Nhƣ vậy ta thấy thực nghiệm đã cho kết quả hoàn toàn chính xác so với tính toán lý thuyết. Tuy nhiên chúng ta cũng nhận thấy rằng ứng dụng mà thực nghiệm cài đặt còn nhiều điểm hạn chế chƣa thực sự thuận lợi cho ngƣời sử dụng. Để ứng dụng trở thành một tiện ích tốt trong thực tế cần bổ xung thêm các tính năng hỗ trợ ngƣời dùng cho tiện lợi hơn.
Kết luận
Kết quả thực nghiệm cho thấy giải pháp sử dụng công nghệ tác tử là hoàn toàn khả thi, tuy nhiên để ứng dụng có thể đƣa vào sử dụng đƣợc trong thực tế chúng ta cần phải nghiên cứu thêm một số vấn đề sau:
– Do ứng dụng hoạt động trong môi trƣờng phân tán, nên việc bảo mật cho các tác tử trong quá trình hoạt động là hết sức quan trọng vì vậy chúng ta cần phải sử dụng thêm các phƣơng thức bảo mật, mã hóa, chứng thực cho tác tử, kiểm soát các truy cập trái phép vào tác tử.
– Trong quá trình hoạt động, hệ thống của chúng ta rất dễ gặp phải các tình huống bị lỗi, bị dừng đột ngột (nhƣ mất điện chẳng hạn) khi đó các tác tử đang hoạt động có thể sẽ không hoành thành đƣợc nhiệm vụ của mình, nếu ngƣời dùng phải bắt đầu lại công việc từ đầu thì rất mất thời gian, vì vậy chúng ta cần bổ xung thêm các tính năng tự phục hồi cho các tác tử trong các trƣờng hợp gặp sự cố.
– Ngoài ra chúng ta cần phải xây dựng thêm các tính năng hỗ trợ ngƣời dùng để ngƣời dùng thao tác, làm việc với hệ thống thuận tiện hơn.
Kết quả thực nghiệm đã phần nào chứng minh đƣợc các giải pháp mà chúng tôi đƣa ra ở chƣơng 3 là hoàn toàn khả thi. Dựa trên kết quả này chúng ta hoàn toàn có thể tin tƣởng để tiếp tục hoàn thiện ứng dụng và tiếp tục sử dụng công nghệ tác tử vào giải quyết các bài toán khác.
KẾT LUẬN
Luận văn đã trình bày về các định nghĩa, khái niệm về tác tử và hệ đa tác tử, các hƣớng tiếp cận và quy trình phát triển các hệ thống đa tác tử. Từ đó phân tích và đƣa ra hai giải pháp ứng dụng công nghệ hƣớng tác tử để giải quyết bài toán đặt lịch họp.
Giải pháp thứ nhất: Lịch biểu của các thành viên đƣợc lƣu trữ phân tán trên các máy tính cá nhân của các thành viên. Khi cần tổ chức một cuộc họp ngƣời sử dụng sẽ cử tác tử của mình mang thuật toán của nó đến các máy tính của khách mời để tƣơng tác với tác tử của khách mời để lấy thông tin về lịch biểu của khách (chỉ lấy các thông tin về ngày giờ khách mời đó bận, không lấy các thông tin về nội dung công việc) và tính toán để mang kết quả về cho chủ nhân của mình. Giải pháp này tuy còn một số hạn chế nhỏ song về cơ bản cũng đã đáp ứng đƣợc các yêu cầu đặt ra của bài toán.
Giải pháp thứ hai: Lịch biểu của các thành viên cũng đƣợc lƣu trữ phân tán trên các máy tính cá nhân của các thành viên. Khi một thành viên cần tổ chức một cuộc họp các tác tử của các khách mời sẽ kết hợp lại với nhau để sinh ra các tác tử mới và tự hủy hoặc xóa mình đi, các tác tử mới mang các thông tin của các tác tử thành viên đã tạo ra mình lại kết hợp với các tác tử khác để tao ra tác tử mới và tự hủy mình đi, cứ nhƣ vậy sau cùng chúng ta đƣợc một tác tử chứa các thông tin cần thiết về lịch biểu của các thành viên và tính toán để đƣa ra kết quả cho ngƣời sử dụng. Giải pháp này đã giải quyết đƣợc triệt để các vấn đề về bảo mật đặt ra của bài toán, tuy nhiên giải pháp này cũng có nhƣợc điểm là khó cài đặt hơn nhiều so với giải pháp một.
Luận văn đã tiến hành cài đặt thử nghiệm giải pháp thứ nhất, bƣớc đầu đã cho những kết quả khả quan, khẳng định đƣợc các ƣu điểm nổi bật của công nghệ tác tử đối với các hệ thống phân tán.
Tuy nhiên luận văn cũng còn một số hạn chế đó là: ứng dụng mà luận văn xây dựng chƣa đƣợc hoàn chỉnh, còn một số vấn đề tồn tại nhƣ vấn đề bảo mật cho tác tử khi chúng hoạt động trong môi trƣờng thực tế, vấn đề tự khắc phục sự cố của tác tử khi có sự cố của hệ thống.
Hƣớng phát triển tiếp theo của luận văn là tiếp tục nghiên cứu và hoàn thiện ứng dụng để có thể hoạt động đƣợc trong môi trƣờng mạng thực tế và thuận tiện cho ngƣời sử dụng. Tiếp tục nghiên cứu các giải pháp về bảo mật cho tác tử, khả năng khắc phục các sự cố của tác tử, … để có thể đƣa ra các giải pháp hoàn chỉnh đầy đủ cho các hệ thống sử dụng công nghệ tác tử.
TÀI LIỆU THAM KHẢO
1. H. Beck, H. S. Pinto (2002), “Overview of approach, Methodologies, Standards, and Tools for Ontologies”, The Agricultural Ontology Service, UN FAO.
2. G. Booch (1994) “Object - oriented analysis and design with applications” Addison Wesley.
3. W. Branner, R. Zarnekow, H. WittigSpringer (1998), Intelligent Software Agents: Foundations and Application.
4. Paolo Bresciani, Paolo Giorgini, Fausto Giunchiglia, John Mylopoulos, Anna Perini (2002) “Tropos: An agent-oriented software development methodology” Technical Report DIT-02-0015.
5. Andrea Cali, Diego Calvanese, Giuseppe De Giacomo, Maurizio Lenzerini (2002), “On the role of Integrity Constrants in Data Integration” IEEE Computer Society Technical Committee ontology Data Engineering.
6. B.Chandrasekaran and John R.Josephson, V.Richard Benjamins (1999), “What are Ontologies, and Why do we need them?” IEEE Intelligent Systems, 14 (1), 20-26.
7. S. A. DeLoach (2002), “AgentMom User’s Manual” Online, http://www.cis.ksu.edu/sdeloach/ai/software/agentMom_2.0/home.html.
8. S. A. DeLoach (2002), “Modeling Organizational Rules in the Multiagent Systems Engineering Methodology”, Proceedings of the 15th Canadian Conference on Artificial Intelligence, Calgary, Alberta, Canada, May 27-29, 2002.
9. S. A. DeLoach, Mark F. Wood and Clint H. Sparkman (2001), “Multiagent Systems engineering”, International Journal of Software Engineering and Knowledge Engineering, 11(3), 231-258.
10. S. A. DeLoach12th, Analysis and Design using MaSE and agentTool,
Midwest Artificial Intelligence and Cognitive Science Conference (MAICS 2001), Miami University, Oxford, Ohio, March 31-April 1, 2001.
11. J. DiLeo, T. Jacobs and S. A. DeLoach (2002), “Integrating Ontologies into Multiagent Systems Engineering”, Fourth International Bi-Conference Workshop on Agent-Oriented Information Systems (AOSI 2002), Bologna(Italy), 15-16 July 2002.
12. “Foundation for Intelligent Physical Agents. FIPA ACL massage representation in string specification." Online, http://www.fipa.org/specs/fipa00070
13. FIPA Modeling: Agent Class Diagrams.
14. A. Fuggetta, G. Vigna, Understanding Code Mobility, IEEE Transactions on Software Engineering, 24(5):342 - 361, May 1998.
15. T. Finin, Y. Labrrou et al (1997). “KQML as an agent communication language”, In J. Bradshaw, editor, Software agents. MIT Press, 291-316.
16. Jung-Lee Hsiao, Hao-Ping Hung and Ming-Syan Chen, “Versatile Transcoding Proxy for Internet Content Adaptation”, IEEE 2007.
17. M. L. Liu, (2003) Distributed Computing Concepts and Applications, Addision Wesley (Book Online).
18. JADE website: jade.tilab.com
19. Java Mobile Agent: http://www.javaworld.com/
20. Michael Knapik, Jay Johnson, “Developing Intelligent Agents for Distributed Systems”,McGraw Hill, 1997.
21. R Nicholas. Jennings, Katia Sycara, Michael Wooldrige (1998), “A Roadmap of Agent Research and Development”, Autonomous Agents and Multi- Agent Systems, 1, 7-38.
22. Mobile Agent: New Model of Intelligent Distributed Computing (eBook).
23. Sunam Pradhan and Arkady Zaslavsky, A Smart Proxy for a Next Generation Web Services Transaction, 6th IEEE/ACIS International Conference on Computer and Information Science (ICIS 2007), IEEE 2007.
24. J. W. Stamos, D. K. Gifford, Remote Evaluation, ACM Transactions on Programming Languages and Systems, October 1990.
25. B. Thai and A. Seneviratne, “The use of Software Agents as Proxies”,
Proceedings of the Fifth IEEE Symposium on Computers & Communications
(ISCC'00), IEEE 2000.
26. Guijun Wang, Liz Ungar, Dan Klawitter, Component assembly for OO Distributed Systems, IEEE Computer, 7/1999.
27. Gerhard Weiss (2002) “Agent Orientation in Software Engineering”
28. Wooldridge, (2000). “Reasoning about Agents”. MIT Press, Cambridge, MA
29. M. Wooldridge (2002), An Introduction to Multiagent Systems, Published in John Wiley & Sons, 2002.
30. M. Wooldridge and N. R. Jennings (1995) “Intelligent agents: theory and practice” The Knowledge Engineering Review 10 (2) 115 – 152.
31. Nguyễn Hoài Phƣơng Linh, Nguyễn Văn Thoại “Ứng dụng thử nghiệm Mobile Agent vào xây dựng Workflow”..
32. Trần Hạnh Nhi, Lê Đình Duy, Nguyễn Đông Hà Thái Trí Hùng, Văn Trọng Nam, Huỳnh Tấn Năng, Nguyễn Huy Thẩm, Nguyễn Thái Huy, Phan Đình Thế Huân, Hồ Thị Mỹ Hiền, Lê Văn Triều, Tổng quan về Mobile agents, Bộ môn Công Nghệ Phần Mềm, Khoa Công Nghệ Thông Tin, Trƣờng ĐH Khoa Học Tự Nhiên Tp. HCM.
33. Lƣu Vĩnh Toàn, Nguyễn Thúc Hải, Phát triển ứng dụng phân tán bằng công nghệ tác tử di động.
34. Trần Thị Mai Thƣơng, Agent và ứng dụng trong vấn đề trích trọn thông tin, Đại học Công nghệ, ĐHQG - Hà Nội.
PHỤ LỤC Một số mã nguồn tiêu biểu
//---ServerAgent--- import jade.lang.acl.ACLMessage; import jade.lang.acl.UnreadableException; import jade.core.Agent; import jade.core.AID; import jade.domain.FIPAAgentManagement.*; import jade.domain.FIPAException; import jade.domain.DFService; import java.io.*; import java.sql.DriverManager; import java.sql.ResultSet;
public class ServerAgent extends Agent { protected void setup() {
//--- Dang ky voi DF --- DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription();
sd.setType("MettingAgent"); sd.setName(getName()); dfd.addServices(sd); dfd.setName(getAID()); try { DFService.register(this,dfd); } catch (FIPAException e) {
System.err.println(getLocalName()+" Dang ki voi DF khong thanh cong. Ly do la: "+e.getMessage());
doDelete(); }
System.out.println(getLocalName()+ " Dang ky DF thanh cong !"); while (true) {
System.out.println(getLocalName()+" Dang cho 1 yeu cau lay thong tin lich bieu...");
ACLMessage msg = blockingReceive();
System.out.println(getLocalName()+ " Co mot thong diep gui den ! "); if ("Gui yeu cau".equals(msg.getLanguage())) {
Sh p = (Sh)msg.getContentObject();
System.out.println(getLocalName()+ " Nhan duoc yeu cau: " + p.toString());
String s= readFile("Scheduler.txt"); String[] s1 = s.split("\n");
String s2 = ""; int i;
for (i=0; i<s1.length; i++){
s2 = s2+s1[i].substring(0,20)+"\n"; }
s=s2;
AID gui= new AID();
ACLMessage q = new ACLMessage(ACLMessage.INFORM); gui = msg.getSender();
q.addReceiver(gui);
q.setContent(String.valueOf(s)); q.setLanguage("Gui lich bieu"); send(q);
System.out.println("Da gui song du lieu lich bieu !"); } else
System.out.println(getLocalName()+ " read Java String " + msg.getContent());
}
catch(UnreadableException e3){
System.err.println(getLocalName()+ " khong doc duoc " + e3.getMessage());
} } }
public void takeDown() { try {
DFService.deregister(this); }
catch (FIPAException e) {
System.err.println(getLocalName()+" dang ky voi DF khong thanh cong, ly do la: "+e.getMessage());
} }
}
//---Tim DF co kieu MettingAgent (duoc khai bao ben ServerAgent)---- AID reader = new AID();
DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription();
sd.setType("MettingAgent"); dfd.addServices(sd);
try {
while (true) {
System.out.println(getLocalName()+ " dang tim 1 agent dang ky voi DF voi kieu MettingAgent");
SearchConstraints c = new SearchConstraints(); c.setMaxDepth(new Long(3));
DFAgentDescription[] result = DFService.search(this,dfd,c); if ((result != null) && (result.length > 0)) {
dfd = result[0];
reader = dfd.getName();
System.out.println("Da tim thay agent can tim, lay du lieu lich bieu tu agent nay !");
break; }
Thread.sleep(6000); }
} catch (Exception fe) { fe.printStackTrace();
System.err.println(getLocalName()+" Viec tim kiem agent cung cap lich bieu khong thanh cong ! " + fe.getMessage());
doDelete(); }
//---Ham cap nhat du lieu mang cua SchAgent--- protected boolean capnhatmang(String x) {
String s[] = x.split("\n"); int d, g0, g1;
// Duyet tung dong trong file Scheduler.txt for(int i=0; i<s.length; i++){
// Duyet mang
// Danh dau chua cap nhat d = 0;
for(int j=0; j<21; j++){
if(kq[j][0].equals(s[i].substring(0,10))){ //tang gia tri gio len 1
g0=Integer.parseInt(s[i].substring(12,14)); g1=Integer.parseInt(s[i].substring(16,18)); for(int g=g0+1;g<=g1;g++){
kq[j][g]=Integer.toString(Integer.parseInt(kq[j][g])+1); }
//danh dau da cap nhat d=1; } } if(d==0){ for(int j=0; j<21; j++){ if(kq[j][0].equals("0")){
// Cap nhat thong tin ngay vao mang kq[j][0]=s[i].substring(0,10);
// Cap nhat thong tin gio vao mang
g0=Integer.parseInt(s[i].substring(12,14)); g1=Integer.parseInt(s[i].substring(16,18));
for(int g=g0+1;g<=g1;g++){ kq[j][g]=Integer.toString(Integer.parseInt(kq[j][g])+1); } break; } } } } return true; }