BÀI TẬP LỚN MÔN HỌC
CHUYÊN ĐỀ CÔNG NGHỆ AGENT
OAA - Open Agent Architect
Kiến trúc OAA
1. Tổng quan
OAA là một multi-agent framework tập trung vào việc hộ trợ việc tương tác
mềm dẻo trong cộng đồng động, đa dạng các agent phần mềm.
Ý tưởng chủ yếu của OAA là delegation: thay cho việc mỗi agent phải mã hoá cứng
các hành vi của nó, lý giải nó sẽ tương tác với agent nào và như thế nào, agent trong
1
OAA biểu diễn sự tương tác dưới dạng những điều nó cần cho một agent đặc biệt
khác (facilitator agent). Agent này sẽ phối hợp sự hoạt động của cộng đồng agent để
hoàn thành công việc, cung cấp các dịch vụ như xử lý song song failure handling và
phát hiện xung đột và các client agent không phải quan tâm tới các vần đề đó nữa.
2. Mục đích của việc thiết kế mô hình OAA
Ngày nay, kỹ thuật lập trình dựa trên agent (agent-based programming) đã
được nhắc đến nhiều trong các thuật ngữ kĩ thuật. Trong môi trường OAA, các
agent hoạt động một cách độc lập và phối hợp với nhau trong một hệ thống mạng
phân tán bởi vì chúng được lập trình trên các ngôn ngữ bậc cao, do đó chúng có khả
năng hoạt động và tính toán một cách độc lập.
Mục tiêu và các khái niệm về OAA đã được nói đến một cách chi tiết, nên dưới đây,
ta sẽ chỉ đề cập một cách ngắn gọn về các khái niệm này:
2.1. Khả năng phối hợp cùng hoạt động
OAA tập trung vào ý tưởng rằng một cộng đồng agent cùng tham gia vào
giải quyết một công việc chung. Mặc dù có thể thiết kế chỉ một agent để giải quyết
tất cả mọi công việc nhưng sẽ chuyên nghiệp hơn nếu như ta thiết kế những agent
“chuyên gia” (expert agent) và mỗi agent đảm nhận một công việc khác nhau.
Trong môi trường OAA, phần lớn các yêu cầu của user đều được giải quyết với
nhiều agent. Do đó, việc phối hợp hoạt động giữa các agent phải thật tốt, để đảm
bảo không có agent nào phải hoạt động quá tải.
2.2. Sự hoạt động phân tán
cho các client. Khi cần, một client agent thực hiện kết nối tới facilitator – parent
facilitator. Với kết nối này, agent khai báo cho parent agent của nó biết các dịch vụ
mà nó có thể cung cấp. Khi một dịch vụ của agent được yêu cầu, facilitator gửi yêu
cầu tới agent đó (sử dụng ICL). Agent phân tích yêu cầu, thực hiện nếu có thể và trả
kết quả, báo cáo ... về cho facilitator. Trong quá trình yêu cầu, agent có thể sử dụng
một số chức năng được OAA cung cấp.
2.7. Facilitator Agents
Facilitator là một server agent chuyên dụng, chịu trách nhiệm liên kết hoạt
động, đối thoại giữa các agent đồng thời giải quyết các vấn đề vướng mắc nảy sinh.
Trong nhiều hệ thống, facilitator được dùng để cung cấp các dữ liệu toàn cục cho
các client agents, nó cho phép các agent client có thể chấp nhận tương tác qua cơ
chế blackboard.
Facilitator còn duy trì mối quan hệ giữa các agent, thông báo khả năng của
các agent trong hệ thống, sử dụng các thông tin này để trợ giúp cho quá trình yêu
cầu và cung cấp các dịch vụ trong hệ thống.
Chức năng trung tâm của facilitator là khả năng delegation một cách trong
suốt. Có nghĩa là một agent yêu cầu có thể tạo ra các yêu cầu, facilitator có thể hiệu
3
chỉnh yêu cầu mà không cần agent yêu cầu phải biết bất kì thông tin gì về tính đồng
nhất hay vị trí chính xác của agent cung cấp. Delegation một cách trong suốt hoàn
toàn có thể thực hiện được vì khả năng của các agent cũng chính là những dịch vụ
mà nó cung cấp chứ không phải là việc tích hợp khả năng đó vào thư viện chung.
2.8. Truyền thông giữa các agent
Ngôn ngữa ICL (Interagent Communication Language) của OAA chính là
ngôn ngữ giao tiếp và truyền thông giữa các agents mà không cần biết các agent đó
đang chạy trên máy nào, được viết trên ngôn ngữ nào. ICL được thiết kế trên nền
mở rộng của ngôn ngữ Prolog, kế thừa những ưu điểm, sự hợp lí và thống nhất của
Prolog.
Trong ICL có một số từ khoá, một số thành phần đặc biệt sử dụng câu lệnh
ICL, bao gồm khả năng khai báo biến, sự kiện, yêu cầu dịch vụ, đáp ứng yêu cầu,
một giao thức vận chuyển. TCP được cài trên nhiều hệ điều hành khác nhau như
Unix, Macintosh, Dos, MS Windows .. nên việc sử dụng TCP/IP là rất linh hoạt,
thuận tiện cho việc tương tác giữa các agent chạy trên các nền khác nhau.
Tuy nhiên, OAA được thiết kế sao cho nó có thể cho phép sử dụng nhiều
giao thức giao vận khác nữa. Điều này được cài đặt trong API với một lớp giao vận.
Lớp giao vận là một lớp riêng, được tải riêng rẽ từ phần còn lại của một số thủ tục
của thư viện. Những thủ tục trong lớp giao vận có tên với tiền tố com_. Mọi việc
truyền thông giữa các agent thông qua các thủ tục API này.
3.3. Ngôn ngữ ICL
Như đã nói ở trên, trong phần truyền thông giữa các agent, các biểu thức ICL
được sử dụng để khai báo các solvable, sự kiện, yêu cầu sử dụng dịch vụ, đáp ứng
dịch vụ, chia sẻ dữ liệu thành phần.
Một số framework agent được điều khiển bằng lời nói như là FIPA hay
KQML, thì ICL còn có cả một lớp giao thức đối thoại. Lớp đối thoại của ICL được
định nghĩa bởi các kiểu sự kiện, kết hợp với danh sách các tham số để tổ chức thành
kiểu các sự kiện. Nội dung của lớp này bao gồm cả kết quả trả về, cơ chế kích hoạt,
dữ liệu thành phần có thể được nhúng vào các sự kiện khác nhau.
Ta hoàn toàn có thể nhúng thêm nội dung hàm thành phần viết bằng một
ngôn ngữ khác vào các sự kiện của ICL, đây là một ưu điêm rất lớn của ICL. Với cơ
chế này, không chỉ cung cấp cho facilitator thêm nhiều thông tin về bản chất của các
yêu cầu từ các agent khác mà còn giúp facilitator phân loại các yêu cầu
3.3.1. Khai báo các solvable trong agent
Mỗi agent tham gia vào hệ thống OAA phải khai báo, đưa ra các khả năng
của nó, các dịch vụ nó có thể cung cấp thông qua ngôn ngữ ICL. Điều đó thiết lập
một giao diện ở mức cao giữa các agent, giao diện này được facilitator sử dụng
trong việc liên kết, truyền thông giữa các agent để đáp ứng các yêu cầu của các
agent khác.
Một yếu tố quan trọng trong khả năng của agent chính là kiểu (type) cung
cấp, có thể là khả năng cung cấp thủ tục (procedure solvable), dữ liệu (data
solvable) hoặc cơ chế kích hoạt (trigger). Khả năng cung cấp thủ tục và dữ liệu có
3.3.3. Yêu cầu dịch vụ
Một agent yêu cầu dịch vụ bằng cách gửi mục tiêu cần đạt được của nó tới
facilitator. Mỗi yêu cầu có thể có một hay nhiều khả năng giải quyết.
Thư viện OAA cung cấp cho mỗi agent một cơ chế truy nhập đơn thống nhất
để có thể yêu cầu dịch vụ từ các agent khác, xem trong oaa_Solve.
6
oaa_ Solve cung cấp một số các tham số đầu vào khác nhau, các tham số này có thể
được dùng để thay đổi yêu cầu mong muốn từ facilitator, hoặc là yêu cầu dịch vụ từ
agent khác. Đặc biệt, tham số địa chỉ có phép xác định rõ lời tới một hay nhiều
agents. Các agent có thể sử dụng oaa_Solve một cách cục bộ bằng cách đưa vào
tham số đầu vào của agent gọi chính địa chỉ của nó.
3.3.4. Dữ liệu thành phần
Dữ liệu thành phần được trả về từ những câu truy vấn yêu cầu dữ liệu. Trong
một vài trường hợp, những dữ liệu thành phần này có thể được fully instantiated
hoặc là partially instantied.
3.3.5. Cơ chế kích hoạt
OAA trigger cung cấp một cơ chế chung cho các agent có thể xác định rõ các
điều kiện để một sự kiện có thể xảy ra. Mỗi agent có thể cài đặt trigger môt cách
cục bộ (trên chính nó) hoặc là từ xa (trên facilitator hoặc một agent đồng cấp nào
đó). Trigger được chia làm 4 loại: Communication, data, task và time trigger.
Triggers liên hệ với solvable theo 2 cách: Cách 1, tất cả các trigger đều được
cài đặt như là data solables, khai báo cho mọi agent. Cách 2, task trigger yêu cầu
khai báo một trigger solvable.
3.3.6. Danh sách tham số
Rất nhiều thành phần của thư viện như là solvable, events, procedures ..
nhận danh sách tham số đầu vào làm đối số. Ví dụ : khai báo một solvable data với
danh sách tham số như sau :
[type(data), single_value(true), persistent(true)]
Nhiều tham số có giá trị mặc định. Khi ta muốn một tham số có giá trị mặc
định thì không cần thiết phải xác định toàn bộ đối số.
agent có thể thay đổi khai báo bằng cách sử dụng oaa_Declare,
oaa_Undeclare, và oaa_Redeclare.
• Request handlers. Với mỗi khả năng giải quyết của theo kiểu gọi hàm, agent
phải cung cấp một thủ tục callback hoặc định nghĩa một sự kiện callback
app_do mặc định.
• oaa_SetTimeout(TimeoutDelay). Với việc gọi thủ tục thư viện này, agent có
thể đưa ra thời gian timeout khi chờ đợi sự kiện quay vòng.
• app_idle callback. Cho phép một agent định nghĩa ra một thủ tục để agent
khác gọi khi không có sự kiện này trong hàng đợi và xảy ra timeout. Nếu
muốn viết một thủ tụcnhư thế, ta phải điền thêm thông tin vào libarary bằng
cách gọi oaa_RegisterCallback oaa_RegisterCallback(app_idle,
ProcedureName)
8