bdi-network-resilience

Missing goal prioritization

9/14/2014 2:26:03 AM

Details

diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java
index 0880cb8..4adad51 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalRequestPlan.java
@@ -62,7 +62,7 @@ import br.ufrgs.inf.bdinetr.domain.ontology.BDINetROntology;
  */
 public class GoalRequestPlan extends DefaultPlan {
 
-	public class PlanBody extends AbstractPlanBody {
+	public class GoalRequestPlanBody extends AbstractPlanBody {
 		private static final long serialVersionUID = -1833810388789537049L;
 
 		private int answers;
@@ -164,10 +164,11 @@ public class GoalRequestPlan extends DefaultPlan {
 			if (reply != null) {
 				this.answers++;
 				if (ACLMessage.PROPOSE == reply.getPerformative()) {
-					log.info("Agent " + reply.getSender() + " sent a proposal.");
+					log.info("Agent " + reply.getSender().getLocalName()
+							+ " sent a proposal.");
 					positiveAnswers.add(reply);
 				} else {
-					log.info("Agent " + reply.getSender()
+					log.info("Agent " + reply.getSender().getLocalName()
 							+ " refused the request.");
 				}
 			} else {
@@ -196,7 +197,7 @@ public class GoalRequestPlan extends DefaultPlan {
 					msg.addReceiver(agentDesc.getName());
 				}
 			}
-			log.info(receivers);
+			log.info("Number of requests: " + receivers.size());
 
 			GoalRequest request = new GoalRequest();
 			if (getGoal() instanceof BeliefPresentGoal) {
@@ -252,11 +253,11 @@ public class GoalRequestPlan extends DefaultPlan {
 										.getConversationId()), MessageTemplate
 										.MatchInReplyTo(reply.getReplyWith()));
 						log.info("Accepted proposal of agent: "
-								+ answer.getSender());
+								+ answer.getSender().getLocalName());
 					} else {
 						reply.setPerformative(ACLMessage.REJECT_PROPOSAL);
 						log.info("Rejected proposal of agent: "
-								+ answer.getSender());
+								+ answer.getSender().getLocalName());
 					}
 					this.myAgent.send(reply);
 				}
@@ -272,6 +273,7 @@ public class GoalRequestPlan extends DefaultPlan {
 
 		private Capability capability;
 		private Predicate<?> predicate;
+		private boolean done;
 
 		public ReceiveUpdatesBehavior(Agent agent, MessageTemplate mt,
 				Capability capability, Predicate<?> predicate) {
@@ -279,6 +281,7 @@ public class GoalRequestPlan extends DefaultPlan {
 					ReceiveUpdatesBehavior.class.getSimpleName());
 			this.capability = capability;
 			this.predicate = predicate;
+			this.done = false;
 		}
 
 		@Override
@@ -296,7 +299,7 @@ public class GoalRequestPlan extends DefaultPlan {
 					} else {
 						log.info("Predicate removed: " + predicate);
 						// capability.getBeliefBase().removeBelief(predicate.getName());
-						myAgent.removeBehaviour(this);
+						this.done = true;
 					}
 				}
 			} catch (Exception exc) {
@@ -306,6 +309,11 @@ public class GoalRequestPlan extends DefaultPlan {
 			}
 		}
 
+		@Override
+		public boolean done() {
+			return done;
+		}
+
 	}
 
 	class RequestDescription {
@@ -325,13 +333,13 @@ public class GoalRequestPlan extends DefaultPlan {
 		AchievingGoal, Ended, ReceivingResponses, Resquesting, Selecting;
 	}
 
-	public static final int ANSWER_TIME_OUT = 30000;
+	public static final int ANSWER_TIME_OUT = 15000;
 	private static final Log log = LogFactory.getLog(GoalRequestPlan.class);
 	public static final int MSG_TIME_OUT = 10000;
 	private Map<GoalTemplate, RequestDescription> requestDescriptions;
 
 	public GoalRequestPlan() {
-		super(PlanBody.class);
+		super(GoalRequestPlanBody.class);
 		this.requestDescriptions = new HashMap<>();
 	}
 
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java
index 3375fc4..e4af606 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/agent/GoalResponsePlan.java
@@ -55,7 +55,8 @@ import br.ufrgs.inf.bdinetr.domain.message.GoalResponse;
  */
 public class GoalResponsePlan extends DefaultPlan {
 
-	public class PlanBody extends AbstractPlanBody implements BeliefListener {
+	public class GoalResponsePlanBody extends AbstractPlanBody implements
+			BeliefListener {
 
 		private static final long serialVersionUID = -4231465068344668721L;
 
@@ -68,6 +69,7 @@ public class GoalResponsePlan extends DefaultPlan {
 		private Predicate<?> predicate;
 		private GoalRequest<?> request;
 		private State state;
+		private long responseTime;
 
 		private void achieveBeliefGoal() throws Exception {
 			GoalEvent event = getGoalEvent();
@@ -156,7 +158,7 @@ public class GoalResponsePlan extends DefaultPlan {
 				}
 			} else {
 				Boolean currentValue = predicate.getValue();
-				if (currentValue != lastValue) {
+				if (!currentValue.equals(lastValue)) {
 					try {
 						ACLMessage reply = acceptProposalMsg.createReply();
 						reply.setPerformative(ACLMessage.INFORM);
@@ -167,6 +169,7 @@ public class GoalResponsePlan extends DefaultPlan {
 						myAgent.getContentManager()
 								.fillContent(reply, response);
 						this.myAgent.send(reply);
+						this.lastValue = currentValue;
 					} catch (Exception exc) {
 						log.error(exc);
 						exc.printStackTrace();
@@ -194,12 +197,20 @@ public class GoalResponsePlan extends DefaultPlan {
 					return;
 				}
 			} else {
-				block();
+				long timeElapsed = System.currentTimeMillis() - responseTime;
+				if (timeElapsed >= ANSWER_TIME_OUT) {
+					setEndState(EndState.SUCCESSFUL);
+					log.info("No answer received... ending plan.");
+				} else {
+					block(ANSWER_TIME_OUT);
+				}
 			}
 		}
 
 		private void sendResponse() throws Exception {
-			log.info(beliefGoalMsg);
+			this.responseTime = System.currentTimeMillis();
+
+			log.info(beliefGoalMsg.getContent());
 			this.request = (GoalRequest<?>) myAgent.getContentManager()
 					.extractContent(beliefGoalMsg);
 			if (request.getBeliefGoal()) {
@@ -225,7 +236,7 @@ public class GoalResponsePlan extends DefaultPlan {
 			ACLMessage reply = beliefGoalMsg.createReply();
 			reply.setPerformative(canAchieve ? ACLMessage.PROPOSE
 					: ACLMessage.REFUSE);
-			reply.setReplyWith("per" + System.currentTimeMillis());
+			reply.setReplyWith("per" + responseTime);
 
 			// TODO set proposal cost
 			Random r = new Random(System.currentTimeMillis());
@@ -234,8 +245,8 @@ public class GoalResponsePlan extends DefaultPlan {
 
 			myAgent.send(reply);
 
-			log.info("Agent " + myAgent + " can achieve " + goal + ": "
-					+ canAchieve);
+			log.info("Agent " + myAgent.getLocalName() + " can achieve " + goal
+					+ ": " + canAchieve);
 
 			this.mt = MessageTemplate.and(MessageTemplate
 					.MatchConversationId(reply.getConversationId()),
@@ -255,6 +266,7 @@ public class GoalResponsePlan extends DefaultPlan {
 	}
 
 	private static final Log log = LogFactory.getLog(GoalResponsePlan.class);
+	public static final int ANSWER_TIME_OUT = 15000;
 
 	public GoalResponsePlan() {
 		super(new MessageTemplate(new MatchExpression() {
@@ -271,7 +283,7 @@ public class GoalResponsePlan extends DefaultPlan {
 					return false;
 				}
 			}
-		}), PlanBody.class);
+		}), GoalResponsePlanBody.class);
 	}
 
 }
diff --git a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
index 3c40ced..75b920b 100644
--- a/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
+++ b/network-resilience/src/br/ufrgs/inf/bdinetr/BDINetRApp.java
@@ -73,10 +73,13 @@ public class BDINetRApp {
 
 		Set<Router> routers = new HashSet<>();
 		routers.add(new Router(new Ip("RouterLM"), Role.LINK_MONITOR.getId()));
-		routers.add(new Router(new Ip("RouterRL1"), Role.RATE_LIMITER.getId()));
-		routers.add(new Router(new Ip("RouterRL2"), Role.RATE_LIMITER.getId()));
-		routers.add(new Router(new Ip("RouterADFC"), Role.CLASSIFIER.getId()
-				| Role.FLOW_EXPORTER.getId() | Role.ANOMALY_DETECTION.getId()));
+		routers.add(new Router(new Ip("RouterRL"), Role.RATE_LIMITER.getId()));
+		routers.add(new Router(new Ip("RouterRL+FE"), Role.RATE_LIMITER.getId()
+				| Role.FLOW_EXPORTER.getId()));
+		routers.add(new Router(new Ip("RouterAD"), Role.ANOMALY_DETECTION
+				.getId()));
+		routers.add(new Router(new Ip("RouterCL"), Role.CLASSIFIER.getId()));
+		routers.add(new Router(new Ip("RouterEX"), Role.FLOW_EXPORTER.getId()));
 
 		Link affectedLink = new Link("AFFECTED_LINK");