Bộ sưu tập

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


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

Loạt bài viết về “Lập trình agent với JADE cho người mới bắt đầu” sẽ hướng dẫn chúng ta cách tạo các agent với JADE, làm cho chúng hoạt động và tương tác với nhau như thế nào. JADE hoàn toàn được viết bằng Java và các lập trình viên làm việc với JADE để phát triển các agent của họ cũng bằng Java. Vì vậy, để lập trình với JADE, thứ mà chúng ta phải biết đó chính là ngôn ngữ Java.

Chúng ta có thể xem cách cài đặt JADE tại đây.

Tổng quan về JADE

JADE là một phầm mềm trung gian (middleware) hỗ trợ trong việc phát triển các hệ thống thông minh multi-agent. Nó bao gồm:

  • Một runtime environment là môi trường mà ở đó các JADE agent có thể sống. Môi trường này phải được kích hoạt trên một máy chủ trước khi các agent trên máy chủ đó có thể hoạt động.
  • Một thư viện gồm các lớp được sử dụng trong quá trình lập trình viên phát triển agent của họ
  • Một bộ công cụ đồ họa cho phép quản lý và giám sát các hàng vi của các agent đang chạy

Container và Platform

Mỗi một bản thể của JADE runtime environment được gọi là một Container. Mỗi container có thể chứa một hoặc nhiều agent ở trong nó. Một tập hợp của các container đang được kích hoạt được gọi là một Platform. Trong mỗi platform, có một container được biệt có tên là Main container sẽ luôn ở trạng thái được kích hoạt. Các container khác sẽ phải biết thông tin về Main container (nằm ở máy nào, cổng bao nhiêu) để đăng kí với nó.

Khi một Main container được khởi động ở đâu đó trong mạng, điều này cũng có nghĩa là một Platform sẽ được tạo. Hình dưới đây minh họa các khái niệm treen qua một kịch bản ví dụ mà ở đó có hai JADE platform lần lượt có chứa 3 và 1 container.

jade_beginner_p1_1

Trong hình trên mỗi một JADE agent sẽ được nhận diện bởi một các tên duy nhất. Một agent cũng sẽ được cung cấp thông tin về tên của các agent khác và chúng có thể giao tiếp với nhau bất kể vị trí thực sự của chúng ở đâu: trong cùng một container (agent A2 và A3 trong hình), trong các container khác nhau nhưng trong cũng một platform (agent A1 và A2), hay là trong các platform khác nhau (A4 và A5).

Dòng lệnh (dùng command line) sau sẽ khởi động Main container và kích hoạt giao diện đồ họa cho việc quản lý của JADE.


java -cp  jade.Boot -gui

Ở đây, phải bao gồm tất cả các lớp có sẵn của JADE và các lớp được yêu cầu cho một ứng cụ thể. Ví dụ như thư mục jade của chúng ta đặt ở ổ C:\ dòng lệnh trên sẽ được cụ thể như sau:


java -cp C:\jade\lib\jade.jar;C:\jade\lib\http.jar;C:\jade\lib\jadeTools.jar;
         C:\jade\lib\iiop.jar;C:\jade\lib\commons-codec\commons-codec-1.3.jar;
         C:\jade\lib\classes; jade.Boot -gui

Chẳng hạn như khi làm trên máy của tôi, sẽ giống như hình dưới đây:

jade_beginner_p1_2

Giao diện đồ họa quản lý của JADE sẽ được kích hoạt

jade_beginner_p1_3

Dòng lệnh sau sẽ khởi động một container ngoại vì (-container). Container này sẽ đăng kí với một Main container đang chạy trên máy chủ avalon.tilab.com (-host) và sẽ kích hoạt một agent có tên là john của lớp myPackage.MyClass (-agents)


java -cp  jade.Boot -container -host avalon.tilab.com -agents john:myPakage.myClass

AMS và DF

Bên cạnh khả năng cho phép các container khác đăng kí thông tin, một Main container còn khác với các container khác ở chỗ nó có chứa hai agent đặc biệt. Hai agent này sẽ tự động kích hoạt khi mà Main container được khởi động. Hai agent này là ASM và DF như hình dưới đây:

jade_beginner_p1_4

AMS (Agent Management System) cung cấp dịch vụ đặt tên để chắc chắn rằng mỗi một agent trong một platform sẽ có một cái tên duy nhất và nó biểu diễn cho sự phân quyền bên trong platform (chẳng hạn như chúng ta có thể tạo hoặc xóa các agent ở các container bằng việc gửi các yêu cầu đến AMS).

DF (Directory Facilitator) cung cấp một dịch vụ Yellow Pages. Với dịch vụ này, một agent có thể tìm các agent khác cung cấp dịch vụ mà nó yêu cầu để thực hiện được mục tiêu của nó. Chúng ta sẽ nói về việc sử dụng dịch vụ Yellow Pages trong các phần sau.

Ví dụ Book Trading

Ví dụ Book Trading là một ví dụ đơn giản, sẽ theo cùng chúng ta trong suốt loạt bài viết để minh họa các bước trong quá trình phát triển các ứng dụng hướng agent với JADE. Kịch bản trong ví dụ này sẽ có một vài agent làm nhiệm vụ bán sách và các agent khác sẽ mua sách theo yêu cầu của người sử dụng chúng.

Mỗi một agent làm nhiệm vụ mua sách sẽ nhận tiêu đề của cuốn sách cần mua như một tham số và nó gửi yêu cầu đến tất cả các agent bán mà nó biết để tìm cuốn sách đó. Ngay khi nhận được một sự cung ứng, agent mua sẽ chấp nhận nó và sinh ra một hóa đơn. Nếu nhiều hơn một agent bán có thể đáp ứng yêu cầu của agent mua, agent mua sẽ chọn nơi bán quyển sách nó cần có giá rẻ nhất. Sau khi đã mua được sách, agent mua sẽ dừng lại.

Mỗi agent bán sẽ có một GUI để cho phép người dùng có thể chèn một tiêu đề mới và giá đi kèm cho một quyển sách vào trong thư mục sách. Agent bán sẽ chờ đợi yêu cầu yêu cầu từ các agent mua. Nếu một yêu cầu từ agent mua được gửi đến, agent bán sẽ kiểm tra quyển sách được yêu cầu có trong thư mục của nó hay không và sẽ gửi trả lời với giá của quyển sách trong trường hợp tìm thấy. Khi mà nó nhận một hóa đơn, nó sẽ xóa bỏ quyển sách đã bán trong thư mục của nó.

Nguồn cho ví dụ này được cung cấp đi kèm với JADE trong gói examples.bookTrading.

Tạo JADE agent – lớp Agent

Tạo một JADE agent chỉ đơn giản là tạo một lớp kế thừa lớp jade.core.Agent và cài đặt phương thức setup giống như đoạn code dưới đây:


package examples.bookTrading;

import jade.core.Agent;

public class BookBuyerAgent extends Agent{
	protected void setup(){
		//Printout a welcome message
		System.out.println("Hello! Buyer - agent "+ getAID().getName() + " is ready.");
	}
}

Phương thức setup được gọi trong quá trình khởi tạo của agent.

Agent identifier
Mỗi agent được nhận dạng bởi agent identifier. Agent identifier được biểu diễn là một đối tượng của lớp jade.core.AID. Phương thức getAID của lớp Agent trả về một agent identifier. Một đối tượng AID bao gồm một tên duy nhất và một số lượng các địa chỉ. Tên agent ở trong JADE được hình thành theo cấu trúc <nickname>@<platform-name>. Chẳng hạn một agent được gọi là Peter và sống trong platform là P1 thì tên duy nhất của agent đó sẽ là Peter@P1. Các địa chỉ được bao gồm trong AID là các địa chỉ của platform có chứa agent đó. Những địa chỉ này chỉ được sử dụng khi một agent cần giao tiếp với một agent sống ở một platform khác.

Nếu chúng ta biết nickname của một agent, thì AID của nó sẽ được lấy về bằng cách sau:


String nickname="Peter";
AID id = new AID(nickname, AID.ISLOCALNAME);

Hằng số ISLOCALNAME chỉ thị rằng, tham số đầu tiên chỉ là một nickname có phạm vi cục bộ chứ không phải là một tên có phạm vi toàn bộ trên toàn hệ thống.

Chạy agent
Để biên dịch các agent ta làm như sau:


javac -classpath  BookBuyerAgent.java

Để chạy các agent vừa biên dịch, ta phải khởi động JADE runtime và chọn một nickname cho agent. Ta làm như sau


java -classpath ;. jade.Boot buyer:BookBuyerAgent
 

Để chạy chương trình trước hết chúng ta biên dịch các file .java. Ta biên dịch file BookBuyerAgent.java như hình dưới đây:

jade_beginner_p1_5

Ở đây -d chỉ ra đường đẫn đến thư mục có chứa các lớp sau khi biên dịch

Sau đó chúng ta khởi động một main-container và lưu ý đường dẫn trên phải nằm trong classpath như hình dưới đây:

jade_beginner_p1_6

Bật một cửa sổ khác, khởi động agent của chúng ta như hình dưới đây, chúng ta sẽ thấy kết quả in ra là “Hello! Buyer-agent buyer@192.168.1.103:1099/JADE is ready.“:

jade_beginner_p1_7

Agent của chúng ta trong giao diện quản lý đồ họa như hình dưới đây:

jade_beginner_p1_8

Sự kết thúc của một agent

Trong ví dụ trên, sau khi in ra lời nhắn, mặc dù không làm gì nữa nhưng agent của chúng ta vẫn cứ đang chạy. Để có thể làm cho nó dừng lại, chúng ta phải gọi phương thức doDelete của nó. Tương tự, phương thức setup sẽ được gọi bởi JADE runtime khi mà agent khởi động và phương thức này cài đặt khởi tạo của agent. Phương thức takeDown được gọi trước khi mà agent dừng lại và nó được sử dụng để làm các công việc dọn dẹp và giải phóng mọi thứ trước khi agent kết thúc.

Truyền tham số vào agent

Các agent có thể được truyền vào các tham số bằng cách chỉ định chúng trên dòng lệnh. Những tham số này có thể lấy về là một mảng của các đối tượng có kiểu Object bằng cách chúng ta gọi phương thức getArguments của lớp Agent. Bây giờ quay trở về ví dụ, chúng ta thay đổi lớp BookBuyerAgent sao cho nó nhận một tham số là tiêu đề của quyển sách mà chúng ta cần mua. Chúng ta sửa như sau:


package examples.bookTrading;

import jade.core.Agent;
import jade.core.AID;

public class BookBuyerAgent extends Agent{
	//The title of the book to buy
	private String targetBookTitle;
	//The list of known seller agents
	private AID[] sellerAgents = {new AID("seller1", AID.ISLOCALNAME),
			              new AID("seller2", AID.ISLOCALNAME)};
	//Put agent initialization here
	protected void setup(){
		//Printout a welcome message
		System.out.println("Hello! 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("Trying to buy "+targetBookTitle);
		}else{
			//Make the agent terminate immediately
			System.out.println("No book title specified");
			doDelete();
		}
	}
	
	//Put agent clean-up operations here
	protected void takeDown(){
		//Printout a dismissal message
		System.out.println("Buyer-agent "+getAID().getName()+" terminating.");
	}
}

Khi chạy chương trình, chúng ta sẽ truyền tên cuốn sách là “The-Lord-of-the-rings” như hình dưới đây:

jade_beginner_p1_9

Như vậy, kết thúc phần này, chúng ta biết cách để tạo ra một agent đơn giản và truyền vào tham số cho nó. Chúng ta sẽ tiếp tục tìm hiểu và phát triển tiếp ví dụ trong phần sau.

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

Advertisements

5 comments on “Lập trình agent với JADE cho người mới bắt đầu (phần 1)

  1. Em làm đề tài đại học mà thầy yêu cầu khó quá
    Phát triển một hệ đa agent dựa trên nền JADE: ứng dụng tư vấn khách hàng online
    Nội dung:
    Tìm hiểu về JADE framework, các bước phân tích, thiết kế và code hệ đa agent dựa trên nền tảng JADE. Áp dụng vào phân tích, thiết kế và code một ứng dụng đơn giản về hệ đa agent (chú trọng phần code dựa trên JADE): xây dựng hệ đa agent đại diện các người dùng để lựa chọn các nhà tư vấn trong hệ thống có nhiều nhà tư vấn và các âgent người dùng có khả năng đấnh giá lại người tư
    vấn theo mức độ hài lòng của thân chủ mình.
    Em xin thầy code demo phần này, thanks thầy rất nhiều (vì em nghiên cứu cả tháng nay mà kg ra)
    có gì sent mail cho em: phamthanhphuoc@gmail.com
    thanks thầy

    Số lượt thích

  2. Cho mình hỏi: Trên nền JADE mình có lập trình quản lý phòng máy tính được không, chức năng như: tắt máy, gửi thông điệp, gửi bài, xem thông tin.
    Nếu được thì giúp mình hoặc thương lượng thù lao. Rất chân thành, cảm ơn.

    Số lượt thích

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