Details
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java b/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java
index c36b6d5..a530329 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/remediation/reasoning/RemediationOptionGenerationFunction.java
@@ -14,6 +14,7 @@ import bdi4jade.core.GoalUpdateSet.GoalDescription;
import bdi4jade.core.Intention;
import bdi4jade.event.GoalEvent;
import bdi4jade.event.GoalListener;
+import bdi4jade.extension.remediation.RemediationCapability;
import bdi4jade.extension.remediation.goal.CauseEffectProblem;
import bdi4jade.extension.remediation.goal.CauseEffectProblem.CauseEffectProblemStatus;
import bdi4jade.extension.remediation.goal.CauseFactorStatus;
@@ -87,10 +88,10 @@ public class RemediationOptionGenerationFunction extends RevertingOptionGenerati
causeEffectProblems.put(cep.getEffectGoal(), cep);
// Here a new goal achievement metadata is created
- if (this.capability instanceof RevertingCapability) {
+ if (this.capability instanceof RemediationCapability) {
for (Intention intention : this.capability.getIntentions()) {
if (intention.getGoal().equals(goal)) {
- ((RevertingCapability) this.capability)
+ ((RemediationCapability) this.capability)
.createGoalAchievementMetadata((PredicateGoal<?>) goal, intention);
}
}
@@ -108,6 +109,7 @@ public class RemediationOptionGenerationFunction extends RevertingOptionGenerati
// Algorithm 1 - lines 18-35
if (cep.getEffectGoalStatus() != null) {
+ System.out.println("Effect Status not null: " + cep.getEffectGoalStatus());
if (knownCause(cep, cep.getCauseEffectRelationship())) {
// Reversion trigger is updated with current cause factor predicates
@@ -264,9 +266,18 @@ public class RemediationOptionGenerationFunction extends RevertingOptionGenerati
for (CauseFactorStatus causeFactor : cep.getCauseFactorStatus()) {
reversionTrigger.add(causeFactor.getFact().getPredicate());
}
- GoalAchievementMetadata gam = ((RevertingCapability) this.capability).getGoalAchievementMetadata()
- .get(cep.getEffectGoal());
- gam.setReversionTrigger(reversionTrigger);
+
+ Map<Goal, GoalAchievementMetadata> gams = ((RemediationCapability) this.capability)
+ .getGoalAchievementMetadata();
+ GoalAchievementMetadata gam = gams.get(cep.getEffectGoal());
+
+ // TODO Remove Sysouts
+ if (gam != null) {
+ gam.setReversionTrigger(reversionTrigger);
+ } else {
+ System.out.println("GAM Nulo!");
+ }
+
}
}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/undo/GoalAchievementMetadata.java b/bdi-jade-extensions/src/bdi4jade/extension/undo/GoalAchievementMetadata.java
index 7984c2c..04cda3b 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/undo/GoalAchievementMetadata.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/undo/GoalAchievementMetadata.java
@@ -352,4 +352,13 @@ public class GoalAchievementMetadata {
LinkedList<Pair<Boolean, Long>> trace = (LinkedList<Pair<Boolean, Long>>) this.beliefChangeTrace.get(predicate);
trace.add(new Pair<Boolean, Long>(value, System.currentTimeMillis()));
}
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("< ").append(goal);
+ sb.append(", maxExecutedPlans = ").append(maxExecutedPlans);
+ sb.append(", rollback = ").append(rollback).append(" >");
+ return sb.toString();
+ }
}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/undo/RevertingCapability.java b/bdi-jade-extensions/src/bdi4jade/extension/undo/RevertingCapability.java
index 0c01ff7..235b773 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/undo/RevertingCapability.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/undo/RevertingCapability.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import bdi4jade.annotation.Belief;
import bdi4jade.belief.PredicateBelief;
import bdi4jade.core.BDIAgent;
import bdi4jade.core.Capability;
@@ -35,6 +36,7 @@ import bdi4jade.event.BeliefEvent.Action;
import bdi4jade.event.BeliefListener;
import bdi4jade.event.GoalEvent;
import bdi4jade.event.GoalListener;
+import bdi4jade.extension.remediation.graph.CauseEffectKnowledgeModel;
import bdi4jade.extension.remediation.logics.Predicate;
import bdi4jade.extension.undo.reasoning.RevertingOptionGenerationFunction;
import bdi4jade.goal.Goal;
@@ -55,9 +57,9 @@ import bdi4jade.goal.PredicateGoal;
public class RevertingCapability extends Capability implements BeliefListener, GoalListener {
private static final long serialVersionUID = -5556551069331273755L;
-
- private final Map<Goal, GoalAchievementMetadata> gams;
- private final Map<Goal, Goal> parentGoals;
+ protected Map<Goal, GoalAchievementMetadata> gams;
+
+ protected Map<Goal, Goal> parentGoals;
/**
* Creates a new capability and sets {@link RevertingOptionGenerationFunction}
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/domain/CO.java b/bdi-jade-test/src/bdi4jade/examples/undo/domain/CO.java
index 7d8434a..dad1432 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/domain/CO.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/domain/CO.java
@@ -88,7 +88,7 @@ public class CO implements Serializable, Concept, ContentElement, Runnable {
while (true) {
updateGasConcentration();
log.info(this.gasConcentration);
- System.out.println("CO Concentration:" + this.gasConcentration);
+ //System.out.println("CO Concentration:" + this.gasConcentration);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java b/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java
index d41ba8f..26262f0 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/ManagementCapability.java
@@ -61,14 +61,14 @@ public class ManagementCapability extends RemediationCapability {
private String windowsAgent;
// Device Predicates
- private PredicateBelief<TakeOff> alarmTakeOff;
- private PredicateBelief<Locked> doorsUnlock;
- private PredicateBelief<On> fansOn;
- private PredicateBelief<Leak> leakingWaterHeater;
- private PredicateBelief<On> lightsOn;
- private PredicateBelief<Open> valveOpen;
- private PredicateBelief<Open> windowsOpen;
- private PredicateBelief<Abnormal> abnormalCO;
+ private TransientPredicate<TakeOff> alarmTakeOff;
+ private TransientPredicate<Locked> doorsUnlock;
+ private TransientPredicate<On> fansOn;
+ private TransientPredicate<Leak> leakingWaterHeater;
+ private TransientPredicate<On> lightsOn;
+ private TransientPredicate<Open> valveOpen;
+ private TransientPredicate<Open> windowsOpen;
+ private TransientPredicate<Abnormal> abnormalCO;
// Plans
@bdi4jade.annotation.Plan
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/EvacuateAndVentilatePlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/EvacuateAndVentilatePlanBody.java
index 3969bcf..a4f8aa9 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/EvacuateAndVentilatePlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/EvacuateAndVentilatePlanBody.java
@@ -23,5 +23,6 @@ public class EvacuateAndVentilatePlanBody extends RevertingPlanBody {
dispatchSubgoal(new PredicateGoal<Locked>(new Locked(House.DOORS), false));
dispatchSubgoal(new PredicateGoal<Open>(new Open(House.WINDOWS), true));
dispatchSubgoal(new PredicateGoal<On>(new On(House.FANS), true));
+ block();
}
-}
+}
\ No newline at end of file
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java
index c679773..35a4ea3 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceClosePlanBody.java
@@ -67,8 +67,7 @@ public class RequestDeviceClosePlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(agentName, false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + agentName + "!");
}
@@ -78,7 +77,7 @@ public class RequestDeviceClosePlanBody extends RevertingPlanBody {
if (reply != null) {
if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
belief.setValue(false, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java
index 0f8bdbe..4b9fcf7 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceLockPlanBody.java
@@ -63,8 +63,7 @@ public class RequestDeviceLockPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(doorsAgent.getValue(), false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + doorsAgent.getValue() + "!");
} else {
@@ -73,8 +72,8 @@ public class RequestDeviceLockPlanBody extends RevertingPlanBody {
if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
TransientPredicate<Locked> doorsUnlock = (TransientPredicate<Locked>) this.getCapability()
.getBeliefBase().getBelief(new Locked(House.DOORS));
- doorsUnlock.setValue(false, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ doorsUnlock.setValue(true, this.getGoal());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java
index 6bdddc1..47a1053 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOffPlanBody.java
@@ -72,7 +72,7 @@ public class RequestDeviceOffPlanBody extends RevertingPlanBody {
if (reply != null) {
if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
belief.setValue(false, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
@@ -88,8 +88,7 @@ public class RequestDeviceOffPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(agentName, false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + agentName + "!");
}
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java
index 67342c1..5e9590a 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOnPlanBody.java
@@ -72,7 +72,7 @@ public class RequestDeviceOnPlanBody extends RevertingPlanBody {
if (reply != null) {
if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
belief.setValue(true, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
@@ -88,8 +88,7 @@ public class RequestDeviceOnPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(agentName, false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + agentName + "!");
}
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java
index c3d27d6..ffcaf9b 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceOpenPlanBody.java
@@ -67,8 +67,7 @@ public class RequestDeviceOpenPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(agentName, false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + agentName + "!");
}
@@ -78,7 +77,7 @@ public class RequestDeviceOpenPlanBody extends RevertingPlanBody {
if (reply != null) {
if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
belief.setValue(true, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java
index 1518590..d4567da 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceShutdownPlanBody.java
@@ -63,8 +63,7 @@ public class RequestDeviceShutdownPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(alarmAgent.getValue(), false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + alarmAgent.getValue() + "!");
} else {
@@ -74,7 +73,7 @@ public class RequestDeviceShutdownPlanBody extends RevertingPlanBody {
TransientPredicate<TakeOff> alarmTakeOff = (TransientPredicate<TakeOff>) this.getCapability()
.getBeliefBase().getBelief(new TakeOff(House.ALARM));
alarmTakeOff.setValue(false, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java
index ad259fe..47cadfa 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceTakeOffPlanBody.java
@@ -44,8 +44,7 @@ public class RequestDeviceTakeOffPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(alarmAgent.getValue(), false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + alarmAgent.getValue() + "!");
} else {
@@ -55,7 +54,7 @@ public class RequestDeviceTakeOffPlanBody extends RevertingPlanBody {
TransientPredicate<TakeOff> alarmTakeOff = (TransientPredicate<TakeOff>) this.getCapability()
.getBeliefBase().getBelief(new TakeOff(House.ALARM));
alarmTakeOff.setValue(true, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java
index 835a5ad..b63e708 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/plan/request/RequestDeviceUnlockPlanBody.java
@@ -41,8 +41,7 @@ public class RequestDeviceUnlockPlanBody extends RevertingPlanBody {
msg.addReceiver(new AID(doorsAgent.getValue(), false));
msg.setConversationId("cin" + System.currentTimeMillis());
myAgent.send(msg);
- this.mt = MessageTemplate.and(MessageTemplate.MatchConversationId(msg.getConversationId()),
- MessageTemplate.MatchInReplyTo(msg.getReplyWith()));
+ this.mt = MessageTemplate.MatchConversationId(msg.getConversationId());
this.sent = true;
log.info("Request sent to agent " + doorsAgent.getValue() + "!");
} else {
@@ -51,8 +50,8 @@ public class RequestDeviceUnlockPlanBody extends RevertingPlanBody {
if (reply.getContent().equals(AnswerRequestPlanBody.SUCCEEDED)) {
TransientPredicate<Locked> doorsUnlock = (TransientPredicate<Locked>) this.getCapability()
.getBeliefBase().getBelief(new Locked(House.DOORS));
- doorsUnlock.setValue(true, this.getGoal());
- log.info(reply.getSender() + ": " + reply.getContent());
+ doorsUnlock.setValue(false, this.getGoal());
+ log.info(reply.getSender().getName() + ": " + reply.getContent());
setEndState(EndState.SUCCESSFUL);
} else {
this.sent = false;
diff --git a/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java b/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java
index e76fb6e..1a8af53 100644
--- a/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java
+++ b/bdi-jade-test/src/bdi4jade/examples/undo/Runner.java
@@ -153,9 +153,10 @@ public class Runner {
AnswerRequestPlanBody.class));
this.managerAgent = new SmartHomeAgent("MANAGER");
- this.managerAgent.setCapability(new ManagementCapability(managerAgent, alarmAgent.getCustomName(), detectorAgent.getCustomName(),
- doorsAgent.getCustomName(), fansAgent.getCustomName(), lightsAgent.getCustomName(),
- valveAgent.getCustomName(), windowsAgent.getCustomName()));
+ ManagementCapability managementCapability = new ManagementCapability(managerAgent, alarmAgent.getCustomName(), detectorAgent.getCustomName(),
+ doorsAgent.getCustomName(), fansAgent.getCustomName(), lightsAgent.getCustomName(),
+ valveAgent.getCustomName(), windowsAgent.getCustomName());
+ this.managerAgent.setCapability(managementCapability);
}