bdi4jade

Min and Max attributes added to Outcome class and included on

9/14/2015 4:34:00 PM

Details

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