Bộ sưu tập

Lập trình agent với JADE cho người mới bắt đầu (phần 4 -phần cuối)


https://codersontrang.com/2013/01/13/lap-trinh-agent-voi-jade-cho-nguoi-moi-bat-dau-phan-4-phan-cuoi/

Dịch vụ Yellow Page – Lớp DFService

Trong ví dụ của chúng ta, chúng ta đã giả sử rằng có một tập hợp cố định các agent bán đã được biết bởi các agent mua (các agent bán được lưu vào mảng sellerAgents trong lớp BookBuyerAgent). Trong phần này, chúng ta sẽ tìm hiểu cách để bỏ đi giả định này và cách để khai thác dịch vụ Yellow Page của JADE platform để sao cho các agent mua có thể tự tìm đến các agent bán vào một thời điểm nhất định nào đó.

DF agent

Dịch vụ Yellow Page cho phép các agent có thể triển khai dịch vụ của chúng lên sao cho các agent khác có thể tìm và sau đó khai thác các dịch vụ này giống như hình dưới đây

jade_beginner_p4

Dịch vụ Yellow Page trong JADE được cung cấp bởi một agent được gọi là DF (Directory Facilitator). Mỗi một platform sẽ đều có một DF agent mặc định (tên cục bộ của nó là “df”). Các DF agent khác có thể được kích hoạt và một vài DF agent (bao gồm cả df agent mặc định) có thể được nhóm lại để cung cấp một danh mục các Yellow Page.

Tương tác với DF

Chúng ta có thể tương tác với DF agent như với các agent khác bằng việc trao đổi các lời nhắn ACL với ngôn ngữ nội dung và ontology thích hợp. Tuy nhiên để đơn giản điều này, JADE cung cấp sẵn cho chúng ta lớp jade.domain.DFService để chúng ta có thể triển khai và tìm kiếm các dịch vụ qua lời gọi các phương thức.

Triển khai các dịch vụ
Một agent muốn triển khai một hay nhiều dịch vụ của nó thì phải cung cấp cho DF một sự miêu tả về nó bao gồm AID, một danh sách các ngôn ngữ và ontology của nó để cho các agent khác có thể biết cách để tương tác với nó. Cho mỗi một dịch vụ được triển khai, một miêu tả cho dịch vụ bao gồm loại dịch vụ, tên dịch vụ, ngôn ngữ và ontology được dùng để phục vụ cho việc khai thác dịch vụ đó. Ngoài ra, còn có một số các thuộc tính khác nữa. Các lớp DFAgentDescription, ServiceDescription , Property nằm trong gói jade.domain.FIPAAgentManagement sẽ lần lượt biểu diễn cho các khái niệm: miêu tả cho agent, miêu tả cho dịch vụ và các thuộc tính khác mà ta đã nói ở trên.

Để triển khai một dịch vụ, một dịch vụ phải tạo ra một miệu tả về nó là một đối tượng của lớp DFAgentDescription và sau đó gọi phương thức tĩnh register() của lớp DFService. Thường thì việc đăng kí dịch vụ này sẽ được thực hiện trong phương thức setup của agent. Ví dụ, trong trường hợp của BookSellerAgent ta làm như sau:


protected void setup() {
	[...]

	// Register the book-selling service in the yellow pages
	DFAgentDescription dfd = new DFAgentDescription();
	dfd.setName(getAID());
	ServiceDescription sd = new ServiceDescription();
	sd.setType("book-selling");
	sd.setName("JADE-book-trading");
	dfd.addServices(sd);
	try {
		DFService.register(this, dfd);
	}
	catch (FIPAException fe) {
		fe.printStackTrace();
	}

	[...]
}

Chú ý rằng ví dụ của chúng ta khá là đơn giản cho nên chúng ta không chỉ định bất cứ ngôn ngữ, ontology hay một thuộc tính nào cho miêu tả về agent. Và khi một agent kết thúc, chúng ta phải hủy đăng kí các dịch vụ đã triể khai như sau:


protected void takeDown() {
	// Deregister from the yellow pages
	try {
		DFService.deregister(this);
	}
	catch (FIPAException fe) {
		fe.printStackTrace();
	}
	// Close the GUI
	myGui.dispose();
	// Printout a dismissal message
	System.out.println("Seller-agent "+getAID().getName()+" terminating.");
}

Tìm kiếm dịch vụ
Một agent muốn để tìm kiếm các dịch vụ phải cung cấp cho DF một miêu tả mẫu. Kết quả của việc tìm kiếm là danh sách của tất cả các miêu tả khớp với miêu tả mẫu. Một miêu tả khớp với miêu tả mẫu nếu như tất cả các trường được chỉ định trong mẫu có cùng giá trị với các trường trong miêu tả đó.

Phương thức tĩnh search() của lớp DFService có thể được sử dụng để tìm tất cả các agent trùng với miêu tả. Phương thức này sử dụng trong BookBuyerAgent sẽ như sau


public class BookBuyerAgent extends Agent {
	// The title of the book to buy
	private String targetBookTitle;
	// The list of known seller agents
	private AID[] sellerAgents;

	// Put agent initializations here
	protected void setup() {
		// Printout a welcome message
		System.out.println("Hallo! Buyer-agent "+getAID().getName()+" is ready.");

		// Get the title of the book to buy as a start-up argument
		Object[] args = getArguments();
		if (args != null && args.length > 0) {
			targetBookTitle = (String) args[0];
			System.out.println("Target book is "+targetBookTitle);

			// Add a TickerBehaviour that schedules a request to seller agents every minute
			addBehaviour(new TickerBehaviour(this, 60000) {
				protected void onTick() {
					System.out.println("Trying to buy "+targetBookTitle);
					// Update the list of seller agents
					DFAgentDescription template = new DFAgentDescription();
					ServiceDescription sd = new ServiceDescription();
					sd.setType("book-selling");
					template.addServices(sd);
					try {
						DFAgentDescription[] result = DFService.search(myAgent, template); 
						System.out.println("Found the following seller agents:");
						sellerAgents = new AID[result.length];
						for (int i = 0; i < result.length; ++i) {
							sellerAgents[i] = result[i].getName();
							System.out.println(sellerAgents[i].getName());
						}
					}
					catch (FIPAException fe) {
						fe.printStackTrace();
					}

					// Perform the request
					myAgent.addBehaviour(new RequestPerformer());
				}
			} );
		}
		else {
			// Make the agent terminate
			System.out.println("No target book title specified");
			doDelete();
		}
	}

	[...]
}

Chú ý rằng việc cập nhật danh sách các agent bán sẽ được thực hiện trước khi chúng ta thực hiện mua một cuốn sách bởi vì các agent bán sẽ có thể chạy hay kết thúc trong hệ thống một cách động (tức là có thể xảy ra ở bất cứ thời điểm nào). Lớp DFService cũng hỗ trợ việc thông báo khi mà một agent triển khai một dịch vụ mới (sử dụng phương thức searchUntilFound() và createSubscriptionMessage()).

Như vậy, kết thúc bài viết này, chúng ta hiểu được cách các agent tìm thấy nhau qua dịch vụ Yellow Page. Loạt bài viết “Lập trình agent với JADE cho người mới bắt đầu” kết thúc ở đây với hi vọng cung cấp cho chúng ta những kiến thức cơ bản nhất về thao tác với agent trên JADE.

Nguồn: Giovanni Caire – Jade tutorial, Jade programming for beginners

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s