bdi4jade
Changes
bdi-jade-extensions/.gitignore 4(+4 -0)
Details
bdi-jade-extensions/.gitignore 4(+4 -0)
diff --git a/bdi-jade-extensions/.gitignore b/bdi-jade-extensions/.gitignore
index a56cb9b..bd8be03 100644
--- a/bdi-jade-extensions/.gitignore
+++ b/bdi-jade-extensions/.gitignore
@@ -1,2 +1,6 @@
/bin
.classpath
+/APDescription.txt
+/MTPs-Main-Container.txt
+/hs_err_pid11572.log
+/hs_err_pid11648.log
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java
index 9d21c0f..a68b14e 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java
@@ -42,7 +42,9 @@ public class LearningAlgorithm {
@SuppressWarnings("unchecked")
public double predictExpectedContribution(Plan plan, Softgoal softgoal) {
- double prediction = 1;
+ double expectedContribution = 1;
+ double predictedValue = 1;
+
PlanMetadata planMetadata = ((Map<Softgoal, PlanMetadata>) plan
.getMetadata(PlanMetadata.METADATA_NAME)).get(softgoal);
@@ -72,6 +74,9 @@ public class LearningAlgorithm {
Instance instance = new DenseInstance(numOfFactors);
+ // TODO This code snippet needs to be refactored to accept values
+ // different of doubles (allowing the use of
+ // NominalInfluenceFactors)
for (int i = 0; i < numOfFactors; i++) {
instance.setValue(trainingInstances.attribute(i),
(Double) planMetadata.getInfluenceFactors().get(i)
@@ -79,7 +84,13 @@ public class LearningAlgorithm {
}
try {
- prediction = planMetadata.getModel().classifyInstance(instance);
+ predictedValue = planMetadata.getModel().classifyInstance(
+ instance);
+ double min = planMetadata.getOutcome().getMin();
+ double max = planMetadata.getOutcome().getMax();
+ if (min != max) {
+ expectedContribution = (predictedValue - min) / (max - min);
+ }
} catch (Exception e) {
e.printStackTrace();
}
@@ -87,9 +98,9 @@ public class LearningAlgorithm {
switch (planMetadata.getOptimizationFunction()) {
case MINIMIZE:
- return 1 - prediction;
+ return 1 - expectedContribution;
default:
- return prediction;
+ return expectedContribution;
}
}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/Outcome.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/Outcome.java
index bc0cdb2..d130116 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/Outcome.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/Outcome.java
@@ -7,6 +7,14 @@ package bdi4jade.extension.planselection.learningbased;
* @author João Faccin
*/
public abstract class Outcome {
+
+ private double min;
+ private double max;
+
+ public Outcome() {
+ this.min = 0;
+ this.max = 0;
+ }
/**
* Gets the final measurement of an outcome value.
@@ -15,6 +23,22 @@ public abstract class Outcome {
*/
public abstract double getMeasurement();
+ public double getMin() {
+ return min;
+ }
+
+ public void setMin(double min) {
+ this.min = min;
+ }
+
+ public double getMax() {
+ return max;
+ }
+
+ public void setMax(double max) {
+ this.max = max;
+ }
+
/**
* Used in cases that a measurement is an interval between two values, e.g.
* difference between final and initial time.
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/PlanMetadata.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/PlanMetadata.java
index 2c886ff..cb25843 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/PlanMetadata.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/PlanMetadata.java
@@ -187,12 +187,19 @@ public class PlanMetadata {
}
/**
- * Represents the notification of an already ended plan execution.
+ * Represents the notification of an already ended plan execution and sets
+ * the result to the instances file.
*/
public void getNotifiedAtEndedPlanExecution() {
this.outcome.endMeasurement();
-
- this.currentInstance = currentInstance + this.outcome.getMeasurement();
+ double currentMeasurement = this.outcome.getMeasurement();
+ if (currentMeasurement >= this.outcome.getMax()) {
+ this.outcome.setMax(currentMeasurement);
+ }
+ if (currentMeasurement <= this.outcome.getMin()) {
+ this.outcome.setMin(currentMeasurement);
+ }
+ this.currentInstance = currentInstance + currentMeasurement;
saveInstance();
}