bdi4jade

PlanMetadata renamed to PlanMetadataElement and min and max

9/18/2015 4:41:35 PM

Details

diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java
index c03f4fd..f32ac76 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java
@@ -11,7 +11,7 @@ import bdi4jade.belief.TransientBelief;
 import bdi4jade.extension.planselection.learningbased.LearningBasedCapability;
 import bdi4jade.extension.planselection.learningbased.NumericInfluenceFactor;
 import bdi4jade.extension.planselection.learningbased.OptimizationFunction;
-import bdi4jade.extension.planselection.learningbased.PlanMetadata;
+import bdi4jade.extension.planselection.learningbased.PlanMetadataElement;
 import bdi4jade.goal.Softgoal;
 
 public class ExampleCapability extends LearningBasedCapability {
@@ -39,40 +39,40 @@ public class ExampleCapability extends LearningBasedCapability {
 
 	private void init() {
 
-		Map<Softgoal, PlanMetadata> metadata = new HashMap<Softgoal, PlanMetadata>();
+		Map<Softgoal, PlanMetadataElement> metadata = new HashMap<Softgoal, PlanMetadataElement>();
 
-		PlanMetadata planMetadata = new PlanMetadata(plan01, Softgoals.COST,
+		PlanMetadataElement planMetadataElement = new PlanMetadataElement(plan01, Softgoals.COST,
 				new Outcome01(), OptimizationFunction.MINIMIZE,
 				LinearRegression.class, 50, 100);
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief01));
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief02));
-		metadata.put(Softgoals.COST, planMetadata);
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief01));
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief02));
+		metadata.put(Softgoals.COST, planMetadataElement);
 
-		planMetadata = new PlanMetadata(plan01, Softgoals.PERFORMANCE,
+		planMetadataElement = new PlanMetadataElement(plan01, Softgoals.PERFORMANCE,
 				new Outcome02(), OptimizationFunction.MAXIMIZE,
 				MultilayerPerceptron.class, 50, 100);
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief02));
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief03));
-		metadata.put(Softgoals.PERFORMANCE, planMetadata);
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief02));
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief03));
+		metadata.put(Softgoals.PERFORMANCE, planMetadataElement);
 
-		plan01.putMetadata(PlanMetadata.METADATA_NAME, metadata);
+		plan01.putMetadata(PlanMetadataElement.METADATA_NAME, metadata);
 
-		metadata = new HashMap<Softgoal, PlanMetadata>();
+		metadata = new HashMap<Softgoal, PlanMetadataElement>();
 
-		planMetadata = new PlanMetadata(plan02, Softgoals.COST,
+		planMetadataElement = new PlanMetadataElement(plan02, Softgoals.COST,
 				new Outcome01(), OptimizationFunction.MINIMIZE,
 				LinearRegression.class, 50, 100);
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief01));
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief02));
-		metadata.put(Softgoals.COST, planMetadata);
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief01));
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief02));
+		metadata.put(Softgoals.COST, planMetadataElement);
 
-		planMetadata = new PlanMetadata(plan02, Softgoals.PERFORMANCE,
+		planMetadataElement = new PlanMetadataElement(plan02, Softgoals.PERFORMANCE,
 				new Outcome02(), OptimizationFunction.MAXIMIZE,
 				MultilayerPerceptron.class, 50, 100);
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief02));
-		planMetadata.addInfluenceFactor(new NumericInfluenceFactor(belief03));
-		metadata.put(Softgoals.PERFORMANCE, planMetadata);
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief02));
+		planMetadataElement.addInfluenceFactor(new NumericInfluenceFactor(belief03));
+		metadata.put(Softgoals.PERFORMANCE, planMetadataElement);
 
-		plan02.putMetadata(PlanMetadata.METADATA_NAME, metadata);
+		plan02.putMetadata(PlanMetadataElement.METADATA_NAME, metadata);
 	}
 }
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 262cfcb..a891f51 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java
@@ -45,8 +45,8 @@ public class LearningAlgorithm {
 		double expectedContribution = 1;
 		double predictedValue = 1;
 
-		PlanMetadata planMetadata = ((Map<Softgoal, PlanMetadata>) plan
-				.getMetadata(PlanMetadata.METADATA_NAME)).get(softgoal);
+		PlanMetadataElement planMetadata = ((Map<Softgoal, PlanMetadataElement>) plan
+				.getMetadata(PlanMetadataElement.METADATA_NAME)).get(softgoal);
 
 		if (planMetadata.getPlanExecutionsCounter() < planMetadata
 				.getMinPlanExecutions()) {
@@ -74,13 +74,13 @@ 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)
-								.getBeliefValue());
+				InfluenceFactor influenceFactor = planMetadata.getInfluenceFactors().get(i);
+				if (influenceFactor instanceof NumericInfluenceFactor) {
+					instance.setValue(trainingInstances.attribute(i), (double) influenceFactor.getBeliefValue());
+				} else if (influenceFactor instanceof NominalInfluenceFactor) {
+					instance.setValue(trainingInstances.attribute(i), (String) influenceFactor.getBeliefValue());
+				}
 			}
 
 			try {
@@ -89,19 +89,23 @@ public class LearningAlgorithm {
 				double min = planMetadata.getOutcome().getMin();
 				double max = planMetadata.getOutcome().getMax();
 				if (min != max) {
-					expectedContribution = (predictedValue - min) / (max - min);
+					double value = (predictedValue - min) / (max - min);
+					expectedContribution = (value > 1) ? 1 : value;
+				}
+				
+				
+				switch (planMetadata.getOptimizationFunction()) {
+				case MINIMIZE:
+					return 1 - expectedContribution;
+				default:
+					return expectedContribution;
 				}
 			} catch (Exception e) {
 				e.printStackTrace();
 			}
 		}
 
-		switch (planMetadata.getOptimizationFunction()) {
-		case MINIMIZE:
-			return 1 - expectedContribution;
-		default:
-			return expectedContribution;
-		}
+		return expectedContribution;
 	}
 
 	/**
@@ -116,8 +120,8 @@ public class LearningAlgorithm {
 	@SuppressWarnings("unchecked")
 	private void learnFromTrainingSet(Plan plan, Softgoal softgoal) {
 
-		PlanMetadata planMetadata = ((Map<Softgoal, PlanMetadata>) plan
-				.getMetadata(PlanMetadata.METADATA_NAME)).get(softgoal);
+		PlanMetadataElement planMetadata = ((Map<Softgoal, PlanMetadataElement>) plan
+				.getMetadata(PlanMetadataElement.METADATA_NAME)).get(softgoal);
 
 		try {
 			trainingInstances = new Instances(new BufferedReader(
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningBasedPlanBody.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningBasedPlanBody.java
index 204b20e..5299528 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningBasedPlanBody.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningBasedPlanBody.java
@@ -23,10 +23,10 @@ public abstract class LearningBasedPlanBody extends AbstractPlanBody {
 	@SuppressWarnings("unchecked")
 	@Override
 	public void onStart() {
-		Collection<PlanMetadata> planMetadata = ((Map<Softgoal, PlanMetadata>) this
-				.getPlan().getMetadata(PlanMetadata.METADATA_NAME)).values();
+		Collection<PlanMetadataElement> planMetadata = ((Map<Softgoal, PlanMetadataElement>) this
+				.getPlan().getMetadata(PlanMetadataElement.METADATA_NAME)).values();
 
-		for (PlanMetadata metadata : planMetadata) {
+		for (PlanMetadataElement metadata : planMetadata) {
 			metadata.getNotifiedAtStartedPlanExecution();
 		}
 	}
@@ -38,10 +38,10 @@ public abstract class LearningBasedPlanBody extends AbstractPlanBody {
 	@SuppressWarnings("unchecked")
 	@Override
 	public int onEnd() {
-		Collection<PlanMetadata> planMetadata = ((Map<Softgoal, PlanMetadata>) this
-				.getPlan().getMetadata(PlanMetadata.METADATA_NAME)).values();
+		Collection<PlanMetadataElement> planMetadata = ((Map<Softgoal, PlanMetadataElement>) this
+				.getPlan().getMetadata(PlanMetadataElement.METADATA_NAME)).values();
 
-		for (PlanMetadata metadata : planMetadata) {
+		for (PlanMetadataElement metadata : planMetadata) {
 			metadata.getNotifiedAtEndedPlanExecution();
 			metadata.increasePlanExecutionsCounter();
 		}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/NumericInfluenceFactor.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/NumericInfluenceFactor.java
index 2da3609..b555c78 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/NumericInfluenceFactor.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/NumericInfluenceFactor.java
@@ -20,4 +20,15 @@ public class NumericInfluenceFactor extends InfluenceFactor {
 		return influenceFactor;
 	}
 	
+	@Override
+	public Object getBeliefValue() {
+		double value = 0.0;
+		if (super.getBeliefValue() instanceof Integer) {
+			value = ((Integer) super.getBeliefValue()).doubleValue();
+		} else if (super.getBeliefValue() instanceof Double) {
+			value = ((Double) super.getBeliefValue()).doubleValue();
+		}
+		return value;
+	}
+	
 }
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 d130116..7cbba71 100644
--- a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/Outcome.java
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/Outcome.java
@@ -12,8 +12,8 @@ public abstract class Outcome {
 	private double max;
 	
 	public Outcome() {
-		this.min = 0;
-		this.max = 0;
+		this.min = 0.0;
+		this.max = 0.0;
 	}
 
 	/**