bdi4jade
Changes
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java 42(+21 -21)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningAlgorithm.java 38(+21 -17)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/LearningBasedPlanBody.java 12(+6 -6)
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;
}
/**