Nhiệm vụ của bước cuối cùng này là xây dựng sơ đồ triển khai hệ thống (Deployment diagram).
Hình 6.7 là mô hình triển khai của hệ dịch vụ du lịch. Hệ thống có một agent trung gian (MatchAgent), các agent còn lại đều có thể có số lượng nhiều hơn. Các
UserAgent khi sinh ra đều được chạy trên máy chủ của MatchAgent (do máy cá nhân không đảm bảo kết nối mạng và hoạt động liên tục trong thời gian dài). Các agent
HotelAgent và StationAgent có thể chạy trên các máy chủ khác nhau hay trên cùng một máy. Sau khi triển khai hệ thống, agentTool hỗ trợ sinh ra khung mã nguồn cho các lớp agent và các hàm đã được thiết kế. Nhờ đó, việc cài đặt chương trình sẽ thuận lợi hơn.
6.3 Kết luận
Chương này đã trình bày một cách khái quát về một số vấn đề thiết kế hệ đa agent và sau đó tập trung vào áp dụng các bước trong pha thiết kế để phát triển hệ dịch vụ du lịch. Chi tiết việc cài đặt và tích hợp hệ dịch vụ du lịch này sẽ được trình bày trong chương tiếp theo.
CÀI ĐẶT VÀ TÍCH HỢP HỆ THỐNG • Vài nét về agentMom • Mô hình tích hợp hệ thống • Cài đặt các lớp agent • Kết quả thử nghiệm • Kết luận
Chương này trước hết trình bày các lớp agentMom mà nó được xem là cơ sở hạ tầng để hỗ trợ tương tác giữa các agent. Phần chủ yếu của chương dành trình bày kết quả cài đặt và tích hợp hệ thống dựa trên quá trình phân tích và thiết kế đã được trình bày trong Chương 5 và Chương 6.
7.1 Vài nét về agentMom
AgentMom là một tập các lớp làm nhân cho các ứng dụng phát triển hệ đa agent theo phương pháp luận MaSE và agentTool [5]. AgentMom hỗ trợ việc phát triển các lớp agent, các phiên hội thoại diễn ra giữa các agent và các thông điệp được trao đổi qua lại giữa các agent.
Hoạt động của các lớp trong agentMom được minh hoạ như Hình 7.1. Theo đó, mỗi agent sẽ được phép giao tiếp với các agent khác trong hệ thống sau khi nó khởi tạo phương thức receiveMessage() trong lớp MessageHandle, lớp này có nhiệm vụ giám sát và lắng nghe các kết nối từ các agent khác trên một cổng được dành riêng cho mỗi agent. Khi mỗi agent nhận được một kết nối từ agent khác và có khả năng giao tiếp được, nó sẽ khởi tạo một phiên hội thoại mới để bắt đầu cuộc trao đổi. Trong phiên hội thoại này, các thông điệp được trao đổi qua lại nhằm truyền đạt nội dung yêu cầu hoặc đáp ứng cho mỗi bên tham gia. Khuôn dạng thông điệp được mô tả tại lớp Message, kế thừa từ cấu trúc thông điệp chuẩn của ngôn ngữ giao tiếp truyền thông KQML (Knowledge Query and Manipulation Language). Phần này sẽ giới thiệu sơ lược nội dung của các lớp trong agentMom, chi tiết có thể tham khảo tại [5].
Lớp Agent, được kế thừa từ lớp Runable của Java nên có khả năng chạy một cách độc lập như một phân tuyến (thread) riêng biệt trên máy chủ thông qua phương thức run(). Tất cả các lớp agent được thiết kế trong các ứng dụng đều phải kế thừa từ lớp này. Đáng chú ý nhất của lớp agent là phương thức ảo (abstract) receiveMessage(), dành cho các lớp agent kế thừa khả năng xử lí các thông điệp nhận được. Trong phương thức này, tuỳ vào nội dung của thông điệp nhận được mà agent khởi tạo các phiên hội thoại tương ứng cho phù hợp. Phương thức khởi tạo của lớp agent sẽ khởi
tạo một thể hiện của lớp MessageHandler để giám sát cổng kết nối riêng của nó, nhằm xác định các thông điệp do các agent khác gửi đến. Khi có thông điệp gửi đến, lớp này mới gọi lại phương thức receiveMessage() để xử lí thông điệp theo cách đã được thiết kế.
Lớp Conversation cũng là một lớp trừu tượng cho phép các lớp conversation
trong ứng dụng kế thừa. Lớp này cung cấp các kết nối đến các agent khác và các hàm để gửi và nhận các thông điệp được trao đổi qua lại giữa các agent. Các kết nối được trang bị thông qua các cổng tương ứng của agent khởi tạo nó, khi đó, nó tạo ra các luồng đọc để nhận thông điệp và các luồng ghi giúp việc gửi thông điệp đi một cách thuận lợi.
Lớp MessageHandler được khởi tạo trong các phương thức khởi dựng cho lớp agent. Phương thức quan trọng của lớp này là phương thức run(), chạy liên tục cho đến khi agent tương ứng bị huỷ bỏ. Phương thức này chuyên lắng nghe các kết nối đến từ các agent khác trên một cổng xác định của agent. Khi có kết nối đến, nó gọi phương thức receiveMessage() của lớp Agent để xử lí.
Lớp Message định nghĩa cấu trúc thông điệp được trao đổi trong các phiên hội thoại giữa các agent. Cấu trúc lớp này được định nghĩa dựa trên cấu trúc thông điệp chuẩn của ngôn ngữ giao tiếp truyền thông KQML. Trong số các trường của lớp này, quan trọng là các trường như: performative quy định một loại yêu cầu cho bên nhận thông điệp, trường content chứa nội dung thông điệp, trường ontology xác định kiểu ontology được sử dụng trong giao tiếp đó. Hình 7.2 minh hoạ một số trường của lớp này.