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 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.
Trang 1BÀI TẬP LỚN MễN HỌC CHUYÊN ĐỀ CÔNG NGHỆ AGENT
OAA - Open Agent Architect
Trang 2agent trong OAA biểu diễn sự tương tác dưới dạng những điều nó cần cho mộtagent đặc biệt khác (facilitator agent) Agent này sẽ phối hợp sự hoạt động củacộng đồng agent để hoàn thành công việc, cung cấp các dịch vụ như xử lý songsong failure handling và phỏt hiện xung đột và các client agent không phải quantâ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ácagent 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ạngphâ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àogiả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ếttấ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ớinhiều agent Do đó, việc phối hợp hoạt động giữa các agent phải thật tốt, để đảmbả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
Cộng đồng cỏc agent rất đa dạng, cho phép cỏc agent có thể chạy trên mọimôi trường khác nhau, được viết bởi các ngôn ngữ khác nhau Môi trường OAA sẽcung cấp một số quy tắc chuẩn để agent có thể hoạt động và liên kết được vớinhau Sự hoạt động phân tán mở khả ra khả năng tính toán song song khi nhiềuagent cùng thực thi các phần khác nhau của một công việc nào đó
2.3 Sự thớch nghi
Khi cú cỏc thành viờn mới tham gia vào cộng đồng agent, thỡ hoạt độngtương tỏc giữa cỏc agent nhỡn chung cú sự thay đổi Nếu một agent nào đó thamgia vào hoạt động cộng tỏc, thỡ sự tương tác giữa các agent phải đủ linh hoạt,mềm dẻo để cho phép agent mới này tham gia hoạt động Kiến trúc “plug & play”
Trang 3cho phép xây dựng một hệ thống với các agent đó tồn tại từ trước và có thể dễdàng phát triển các tính năng mới cho các agent cũ hoặc xây dựng các agent mới.
2.4 Truyền thụng giữa cỏc agent
Bởi vỡ con người luôn muốn tham gia vào hệ thống một cách linh hoạt nêncần phải có một ngôn ngữ đủ mạnh, đủ linh hoạt để có thể diễn tả được ngôn ngữ
tự nhiên Nếu ngôn ngữ ICL (Interagent Communication Language) có thể diễnđạt được một cách đầy đủ ngôn ngữ tự nhiên thỡ ta hoàn toàn cú thể xõy dựngđược các câu lệnh, các thủ tục và tương tác
2.5 Hoạt động và tái hoạt động tớnh toỏn
Agent không chỉ là những nguồn dữ liệu thụ động thực hiện cỏc hành động
và trả lời thông tin theo yêu cầu Cỏc agent có thể giám sát hoạt động của môitrường xung quanh nó và quyết định khi nào thực hiện hành động, thực hiện hànhđộng nào, cảnh báo cho người dùng về các tỡnh huống thớch hợp Hơn thế nữa,các agent có thể theo dừi sự tương tác giữa các agent khác và đưa ra giải pháp để
hệ thống hoạt động tốt hơn
2.6 Client Agents
Mỗi agent trong OAA hoặc là facilitator agent hoặc là client agent Client
Agent được gọi là Client vỡ xột trờn một khớa cạnh nào đó nú là client của mộtfacilitator nào đú, cỏc facilitator này cung cấp sự đối thoại và cỏc dịch vụ cần thiếtcho cỏc client Khi cần, một client agent thực hiện kết nối tới facilitator – parentfacilitator 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ửiyê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ảysinh Trong nhiều hệ thống, facilitator được dùng để cung cấp các dữ liệu toàn cụccho 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ủacác agent trong hệ thống, sử dụng các thông tin này để trợ giúp cho quá trỡnh yờucầu và cung cấp cỏc dịch vụ trong hệ thống
Trang 4Chứ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 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àothư 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ênnề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ấtcủ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ệnhICL, 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,chia sẻ cỏc thành phần dữ liệu
2.9 Sự quản lớ quyền thực thi
Hiện nay, do sự khác nhau về cơ chế của các ngôn ngữ, của cỏc platformnên việc cài đặt, thực thi hoạt động bằng agent là rất thích hợp Điều này sẽ giảiquyết được rất nhiều rắc rối gặp phải khi khởi động một hệ thống và duy trỡ cho
hệ thống hoạt động thông suốt Hệ thống OAA có một trỡnh quản lý việc thựchiện của cỏc agent (Execution Manager) để quản lí các hoạt động thực thi gọi là
Start-It.
Khi một tập cỏc agent được liên kết hoạt động để cựng thực hiện một số
nhiệm vụ nào đú, Start-It cung cấp khả năng cài đặt mỗi agent trờn một platform thớch hợp với agent đó Theo các giao thức hoạt động của platform này, chỉ cần
agent cú yờu cầu kết nối tới facilitator thỡ chắc chắn agent đó sẽ hoạt động được
Một chức năng quan trọng khác của Start-It là giỏm sỏt trạng thỏi của mỗi agent
xem chỳng hoạt động cú chớnh xỏc khụng? Nếu Start-It phỏt hiện thấy một agentnào đó hoạt động không đúng, nó sẽ thực hiện một số bước nào đó để phục hồi lỗi
và tự khởi động lại agent đó
3 Cơ sở hạ tầng của Agent
Trong phần này, chúng ta sẽ xem xét và giải thích từng thành phần củaOAA một cách chi tiết, để giúp những người phát triển OAA có được cái nhỡn cănbản nhất về sự hoạt động của cỏc thành phần trong OAA
Trang 53.1 Thư viện Agent
Thư viện agent cung cấp những hàm chức năng căn bản nhất cho mọiagent trong OAA, bao gồm cả agent facilitator Thư viện này đó được chuyển sangnhiều ngôn ngữ khác nhau và một phần của thư viện này chính là cơ chế cài đặtcủa mỗi agent Lập trỡnh viờn cần phải gọi cỏc hàm được cung cấp trong thư viện,
khai báo các biến, định nghĩa là các hàm callback đó cú sẵn trong thư viện Trong
phần này, ta mô tả qua một vài thành phần cơ bản của thư viện agent và một sốcách sử dụng thư viện chung cho mọi agent
3.2 Giao thức giao vận Agent
Hiện nay, mọi hệ thống dựa trờn mụ hỡnh OAA đều sử dụng TCP/IP như là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ềugiao 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 giaovậ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 hayKQML, 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ộtngô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ấtcủ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ăngcủ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ậpmột giao diện ở mức cao giữa cỏc agent, giao diện này được facilitator sử dụngtrong 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ácagent khác
Trang 6Một yếu tố quan trọng trong khả năng của agent chính là kiểu (type) cungcấp, có thể là khả năng cung cấp thủ tục (procedure solvable), dữ liệu (datasolvable) hoặc cơ chế kích hoạt (trigger) Khả năng cung cấp thủ tục và dữ liệu cóthể được các agent khác sử dụng một cỏch trực tiếp (thường thỡ cỏc agent đó sử
dụng khả năng này bằng cách gọi thủ tục oaa_Solve trong thư viện).
Ở mức khỏi niệm, một solvable cung cấp thủ tục (procedure) thực hiện một hành động nào đó, cũn solvable cung cấp dữ liệu (data) lưu giữ một tập các công việc Ví dụ: Ta tạo một agent cho hệ thống mail, thỡ solvable cung cấp thủ tục là
việc gửi message tới người sử dụng, liệt kờ cỏc thụng điệp đó được gửi đến theo
một chủ đề nào đú hay hiển thị một thụng điệp nào đú lờn màn hỡnh, cũn solvable
cung cấp dữ liệu tương ứng với mỗi quan hệ đó với cơ sở dữ liệu hiện tại Thườngthỡ solvable cung cấp dữ liệu được sử dụng để cung cấp kho dữ liệu dùng chung
Solvable kớch hoạt (trigger) khụng thể truy nhập trực tiếp từ cỏc agentkhỏc, chỳng được sử dụng gián tiếp thông qua việc thiết lập bộ kích hoạt côngviệc (task trigger) của chúng Khả năng này là để phục vụ cho các sự kiện xảy radưới một điều kiện đặc biệt Ví dụ: một email agent có thể khai báo một khả năngkích hoạt nhằm kiểm tra các thư đến
Chỳ ý rằng cú rất nhiều kiểu kớch hoạt, task trigger chỉ là một kiểu trong đó Một
agent khai báo các khả năng của chúng bằng cách sử dụng oaa_Declare và
oaa_Undeclare trong thư viện
3.3.2 Sự kiện
Việc truyền thụng giữa các agent diễn ra dưới dạng các sự kiện, ngay cảhoạt động và cấu trúc của mỗi agent cũng được tổ chức thành kiểu các sự kiện.Trong việc đối thoại giữa các agent, điều đó có thể giúp ích cho việc nhỡn nhậncỏc sự kiện này như là những thông điệp Phần lớn các sự kiện cần thiết cơ bảnđều đó cú trong thư viện nên không cần các lập trỡnh viờn viết lại, ta cú thể xem
trong oaa_Solve và oaa_AddTrigger.
Vớ dụ: lời gọi oaa_Solve(Goal, Params) trong một agent A nào đú, kết quả trả về
cú dạng ev_solve(GoalId, Goal, Params) đi từ A tới facilitator và trả về thông điệp
có dạng ev_solved(GoalId, Requestees, Solvers, Goal, Params, Solutions).
Do cỏc sự kiện này đó được tự động xử lí thông suốt, nên các lập trỡnh viờnkhụng cần quan tấm đến chúng một cách chi tiết nữa
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ớifacilitator Mỗi yêu cầu có thể có một hay nhiều khả năng giải quyết
Trang 7Thư viện OAA cung cấp cho mỗi agent một cơ chế truy nhập đơn thốngnhất để có thể yêu cầu dịch vụ từ các agent khác, xem trong oaa_Solve
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 haynhiều agents Cỏc agent cú thể sử dụng oaa_Solve một cỏch cục bộ bằng cỏch đưavà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 fullyinstantiated 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ôtcách cục bộ (trên chính nó) hoặc là từ xa (trên facilitator hoặc một agent đồng cấpnà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êucầ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ớidanh 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ố
Một tham số boolean với giá trị true có thể bỏ qua được Ví dụ: danh sáchtham số dưới đây có thể viết như sau:
[type(data), single_value, persistent]
Để lấy giỏ trị của một tham số từ danh sỏch cỏc tham số, ta gọi hàm
icl_GetParamValue Ví dụ, trong ngôn ngữ Prolog, có thể lấy giá trị của tham số
như sau:
icl_GetParamValue(from(Requestor), Params)
Trang 83.3.7 Tên và địa chỉ của Agent
Mỗi agent có thể có một hay nhiều server connection và một hay nhiềuclient connection Thường thi facilitator duy trỡ một kết nối đơn, và mỗi clientagent duy trỡ một kết nối đơn tới facilitator của agent nú
Mọi agent (bao gồm cả facilitator) đều có tên đại diện, địa chỉ đầy đủ, địachỉ cục bộ với mỗi kết nối mở client và mỗi kết nối mở server Quy cách về địa chỉđầy đủ phụ thuộc vào giao thức giao vận ta sử dụng Nếu sử dụng TCP/IP, ta sẽ
khai báo địa chỉ như sau: addr(tcp(Host, Port ), cũn địa chỉ của agent client sẽ ghi như sau: addr( tcp(Host, Port), LocalID).
3.4 Sự kiện lặp
Mọi hành động của cỏc agent đều có cấu trúc xoay quanh một sự kiện lặp,
sự kiện này được khởi tạo khi một agent được gọi (thường thỡ đó là lời gọi của
một agent tới các hàm thư viện agent oaa_MainLoop) Việc gọi sự kiện lặp là để
lặp lại quá trỡnh kiểm tra cỏc sự kiện trong hàng đợi của agent
3.5 Cỏc thành phần lập trỡnh cơ bản
Trong mỗi agent cú một số thành phần lập trỡnh cơ bản dùng để định nghĩamột số quy tắc ứng xử của agent khi tham gia vào OAA, những thông tin cần thiếtđược cung cấp từ thư viện agent sẽ giúp cho agent thực hiện các hành động khácnhau
Declarations of solvables Mỗi agent cung cấp khả, gửi tới facilitator một
danh sách các dịch vụ mà agent đó cung cấp Facilitator sử dụng thông tinnày để đáp ứng lại các yêu cầu cung cấp dịch vụ Các agent đăng kí dịch vụmỡnh cung cấp bằng cỏch truyền tham số vào oaa_Register Sau khi đăng
kí, 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ệncallback 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ếumuốn viết một thủ tụcnhư thế, ta phải điền thêm thông tin vào libarary bằngcách gọi oaa_RegisterCallback oaa_RegisterCallback(app_idle,
ProcedureName)
Trang 93.6 Truyền tham số và cỏch cài đặt
Một số các tham số đầu vào cú thể được sử dụng khi yờu cầu lời gọi tớifacilitator, một số tham số đó được sử dụng với cỏc agent client Tham số đầu vào
cú thể được truyền đạt bằng một trong 3 cỏch sau:
on the command line
in environment variables
in a setup file
Ví dụ: để báo cho client agent (hoặc facilitator) biết rằng nú nờn kết nối tới parent
facilitator trờn host 'mymachine.ai.sri.com' và cổng 3345, cú thể làm một trong
những cỏch sau:
1 Dựng cỏc tham số dũng lệnh:
fac -oaa_connect "tcp('mymachine.ai.sri.com', 3345)"
2 Thiết lập biến mụi trường OAA_CONNECT để chứa xõu sau:
1 Đường dẫn file được cho trờn dũng lệnh (hay trong một biến mụi trường)
thỡ sử dụng -setup_file (or SETUP_FILE)
2 setup.pl nằm trong thư mục hiện hành của agent
3 setup.pl nằm trong "home directory" của người dựng chạy agent (trong
UNIX, ~/setup.pl; trong Windows NT, %HOMEDRIVE%%HOMEPATH
%\setup.pl; trong Windows 95/98, /setup.pl của ổ đĩa hiện hành)
4 setup.pl trong thư mục gốc ("/" trong UNIX, "C:\" trong Windows)
3.6.2 Cỏc tham số Invocation của Facilitator
Facilitator có thể nhận biết các tham số đầu vào Trong mỗi trường hợp (trừsetup_file), tham số nên được đưa vào từ dũng lệnh, trong biến mụi trường hoặc từsetup file
Trang 103.6.3 Cỏc tham số Invocation của Client Agent
Cỏc tham số Invocation của cỏc Client agent như sau:
• setup_file <đường dẫn file>
Cỏc đoạn mó thư viện kiểm tra điều này bất cứ khi nào oaa_ResolveVariables
được gọi
• -oaa_connect <địa chỉ>
Tham số này chỉ cho agent biết địa chỉ mạng dựng để kết nối tới một facilitator
Cỏc đoạn mó của thư viện sẽ kiểm tra điều này bất cứ khi nào com_Connect được
Chương trỡnh lấy thụng số của ổ đĩa cứng và thời gian hệ thống
// $Id: AddClient.c,v 1.3 2002/09/25 21:43:00 mjohnson Exp $
VOID CALLBACK MyTimerProc(
HWND hwnd, // handle of window for timer messages
UINT message, // WM_TIMER message
UINT idTimer, // timer identifier
DWORD dwTime); // current system time
int main(int argc, char *argv[]) {
UINT nTime=60000;
if(argc!=1)
Trang 11if(argc!=2){
printf("Usage : ExecAgent nTime(s)\n");
uResult=SetTimer(NULL, // handle of main window
IDT_TIMER, // timer identifier
nTime, // 60-second interval
(TIMERPROC) MyTimerProc); // timer callback
// Setup the connection of this agent to the Facilitator
// See setup_oaa_connection() definition below