1. Trang chủ
  2. » Công Nghệ Thông Tin

BÀI TẬP LỚN MễN HỌC CHUYÊN ĐỀ CÔNG NGHỆ AGENT

22 632 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 172 KB

Nội dung

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 1

BÀI TẬP LỚN MễN HỌC CHUYÊN ĐỀ CÔNG NGHỆ AGENT

OAA - Open Agent Architect

Trang 2

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ộ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 3

cho 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 4

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 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 5

3.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 6

Mộ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 7

Thư 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 8

3.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 9

3.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 10

3.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 11

if(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

Ngày đăng: 25/07/2013, 16:32

TỪ KHÓA LIÊN QUAN

w