.


:




:

































 

 

 

 


Import jade.core.behaviours.Behaviour;

Import jade.lang.acl.ACLMessage;

Import jade.lang.acl.MessageTemplate;

public class RequestPerformer extends Behaviour {

private AID bestSeller; //- ( )

private int bestPrice; //

private int repliesCnt = 0; //

private MessageTemplate mt;

private int step = 0;

public void action() {

switch (step) {

case 0:

//

ACLMessage cfp = new ACLMessage(ACLMessage.CFP);

for (int i = 0; i < sellerAgents.length; ++i) {

cfp.addReceiver(sellerAgents[i]);

}

cfp.setContent(targetBookTitle);

cfp.setConversationId("book-trade");

cfp.setReplyWith("cfp" + System.currentTimeMillis());

myAgent.send(cfp);

//

mt = MessageTemplate.and(MessageTemplate

.MatchConversationId("book-trade"), MessageTemplate

.MatchInReplyTo(cfp.getReplyWith()));

step = 1;

break;

case 1:

// , ,

ACLMessage reply = myAgent.receive(mt);

if (reply!= null) {

if (reply.getPerformative() == ACLMessage.PROPOSE) {

int price = Integer.parseInt(reply.getContent());

if (bestSeller == null || price < bestPrice) {

//

bestPrice = price;

bestSeller = reply.getSender();

}

}

repliesCnt++;

if (repliesCnt >= sellerAgents.length) {

//

step = 2;

}

} else {

block();

}

break;

case 2:

// ,

ACLMessage order = new ACLMes-sage(ACLMessage.ACCEPT_PROPOSAL);

Order.addReceiver(bestSeller);

Order.setContent(targetBookTitle);

order.setConversationId("book-trade");

order.setReplyWith("order" + System.currentTimeMillis());

MyAgent.send(order);

mt = MessageTemplate.and(MessageTemplate

.MatchConversationId("book-trade"), MessageTemplate

.MatchInReplyTo(order.getReplyWith()));

step = 3;

Break;

case 3:

reply = myAgent.receive(mt);

if (reply!= null) {

//

if (reply.getPerformative() == ACLMessage.INFORM) {

//

System.out.println(targetBookTitle + " successfully purchased.");

System.out.println("Price = " + bestPrice);

myAgent.doDelete();

}

step = 4;

} else {

block();

}

break;

}

}

public boolean done() {

return ((step == 2 && bestSeller == null) || step == 4);

}

}

, , (). JADE jade.proto. . receive() Agent blockingReceive(). , , ( , , ). , blockingReceive, , , .

 

 

3.2.

 

3.3.

, - (seller1 seller2) ( AID[] sellerAgents BookBuyerAgent , ( 3.2 й3) ). , , JADE, - -, .

 

DF

Directory Facilitator (DF) ( FIPA) (yellow pages), . DF , , .
DF, , . DF 4.3.

 

 

.3.3. .

 

JADE DF ( df). DF- ( , ), .

 

DF

DF , , ACL-, , FIPA, ( SLO) ( FIPA-agent-management). , JADE jade.domain.DFService, .

 

 

, ( ) , DF, AID , , , . ,
, , , , , . DFAgentDescription, ServiceDescription Property, jade.domain.FIPAAgentManagement, .

, , DFAgentDescription, register() DFService. setup(), - .

 

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();

}
...
}

 

, , , , . , .

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.);
}

 

 

, , DF . , .

, , , . search() DFService , -
, book-selling ( ).

 

public class BookBuyerAgent extends Agent {

private String targetBookTitle; // The title of the book to buy
private AID[] sellerAgents; // The list of known seller agents

// Put agent initializations 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);

// Add a TickerBehaviour that schedules a request to seller agents every minute

 

addBehaviour(new TickerBehaviour(this, 60000) {

protected void onTick() {
// 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);
sellerAgents = new AID[result.length];
for (int i = 0; i < result.length; ++i) {
sellerAgents[i] = result[i].getName();
}
catch (FIPAException fe) {
fe.printStackTrace();
}

// Perform the request
myAgent.addBehaviour(new RequestPerformer());
}
});
...

 

, - , .. - .

DFService DF , ( searchUntilFound() createSubscriptionMessage()).

 

й3

1. - .

2. , .

3. .

4. .

5. ( ).

: 3 3 .


.

1. :

1. - . , , . (). , . . , / . 2 3 .

Agent Values
Project Demand_1 CargoWeight = 1000; Account = 1000
Project Demand_2 CargoWeight = 2000; Account = 1500
Vessel Resource_1 MaxWeight = 1000; CruiseTime = 5
Vessl Resource_2 MaxWeight = 2000; CruiseTime = 6
Vessel Resource_3 MaxWeight = 2500; CruiseTime = 10

2. . . - . -.

-

()


-

, .. , .. , ..
120 9 5
200 7 8
100 8 5
150 6 7

3. . . ? ?

  1 2 3 4 5 800 900 1000 700 1500 , , .. 5000 4500 4200 4900 5200

, ..
1 1000 4900
2 650 5000
3 1000 4750
4 900 4600
5 4000 5100

4. . . : , , , . .

5. . 6 5 . , . , . ?



<== | ==>
.2. |
:


: 2018-10-18; !; : 242 |


:

:

, , .
==> ...

1708 - | 1410 -


© 2015-2024 lektsii.org - -

: 0.038 .