bdi4jade
Changes
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleAgent.java 44(+44 -0)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java 78(+78 -0)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleGoal.java 9(+9 -0)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlan.java 12(+12 -0)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlanBody.java 16(+16 -0)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleRunner.java 70(+70 -0)
bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome01.java 12(+12 -0)
Details
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleAgent.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleAgent.java
new file mode 100644
index 0000000..5681684
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleAgent.java
@@ -0,0 +1,44 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import java.util.Random;
+
+import bdi4jade.core.SingleCapabilityAgent;
+import bdi4jade.extension.planselection.utilitybased.SoftgoalPreferences;
+import bdi4jade.goal.Softgoal;
+
+public class ExampleAgent extends SingleCapabilityAgent {
+
+ private static final long serialVersionUID = 3086657102660054554L;
+
+ public ExampleAgent() {
+ super(new ExampleCapability());
+ }
+
+ @Override
+ protected void init() {
+ for (Softgoal softgoal : Softgoals.SOFTGOALS) {
+ this.addSoftgoal(softgoal);
+ }
+
+ this.initPreferences();
+ }
+
+ private void initPreferences() {
+ Random rand = new Random();
+ SoftgoalPreferences preferences = (SoftgoalPreferences) this
+ .getCapability().getBeliefBase()
+ .getBelief(SoftgoalPreferences.NAME);
+
+ double total = 0;
+ for (Softgoal softgoal : Softgoals.SOFTGOALS) {
+ double value = rand.nextDouble();
+ total += value;
+ preferences.setPreferenceForSoftgoal(softgoal, value);
+ }
+ for (Softgoal softgoal : Softgoals.SOFTGOALS) {
+ double value = preferences.getPreferenceForSoftgoal(softgoal);
+ double normValue = value / total;
+ preferences.setPreferenceForSoftgoal(softgoal, normValue);
+ }
+ }
+}
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
new file mode 100644
index 0000000..c03f4fd
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleCapability.java
@@ -0,0 +1,78 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import weka.classifiers.functions.LinearRegression;
+import weka.classifiers.functions.MultilayerPerceptron;
+import bdi4jade.annotation.Belief;
+import bdi4jade.annotation.Plan;
+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.goal.Softgoal;
+
+public class ExampleCapability extends LearningBasedCapability {
+
+ private static final long serialVersionUID = -7400340155463062034L;
+
+ @Belief
+ private TransientBelief<String, Double> belief01 = new TransientBelief<String, Double>(
+ "BELIEF01", 0.0);
+ @Belief
+ private TransientBelief<String, Double> belief02 = new TransientBelief<String, Double>(
+ "BELIEF02", 0.0);
+ @Belief
+ private TransientBelief<String, Double> belief03 = new TransientBelief<String, Double>(
+ "BELIEF03", 0.0);
+
+ @Plan
+ ExamplePlan plan01 = new ExamplePlan("PLAN01");
+ @Plan
+ ExamplePlan plan02 = new ExamplePlan("PLAN02");
+
+ public ExampleCapability() {
+ init();
+ }
+
+ private void init() {
+
+ Map<Softgoal, PlanMetadata> metadata = new HashMap<Softgoal, PlanMetadata>();
+
+ PlanMetadata planMetadata = new PlanMetadata(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);
+
+ planMetadata = new PlanMetadata(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);
+
+ plan01.putMetadata(PlanMetadata.METADATA_NAME, metadata);
+
+ metadata = new HashMap<Softgoal, PlanMetadata>();
+
+ planMetadata = new PlanMetadata(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);
+
+ planMetadata = new PlanMetadata(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);
+
+ plan02.putMetadata(PlanMetadata.METADATA_NAME, metadata);
+ }
+}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleGoal.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleGoal.java
new file mode 100644
index 0000000..474120b
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleGoal.java
@@ -0,0 +1,9 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import bdi4jade.goal.Goal;
+
+public class ExampleGoal implements Goal {
+
+ private static final long serialVersionUID = 7543444275157177431L;
+
+}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlan.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlan.java
new file mode 100644
index 0000000..fc2f48b
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlan.java
@@ -0,0 +1,12 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import bdi4jade.goal.GoalTemplateFactory;
+import bdi4jade.plan.DefaultPlan;
+
+public class ExamplePlan extends DefaultPlan {
+
+ public ExamplePlan(String id) {
+ super(id, GoalTemplateFactory.goalOfType(ExampleGoal.class), ExamplePlanBody.class);
+ }
+}
+
\ No newline at end of file
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlanBody.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlanBody.java
new file mode 100644
index 0000000..2f8fff5
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExamplePlanBody.java
@@ -0,0 +1,16 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import bdi4jade.extension.planselection.learningbased.LearningBasedPlanBody;
+import bdi4jade.plan.Plan.EndState;
+
+public class ExamplePlanBody extends LearningBasedPlanBody {
+
+ private static final long serialVersionUID = 9022081049199181816L;
+
+ @Override
+ public void action() {
+ System.out.println("Acting...DONE!");
+ setEndState(EndState.SUCCESSFUL);
+ }
+
+}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleRunner.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleRunner.java
new file mode 100644
index 0000000..0429d6c
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/ExampleRunner.java
@@ -0,0 +1,70 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import jade.BootProfileImpl;
+import jade.core.ProfileImpl;
+import jade.wrapper.AgentContainer;
+import jade.wrapper.AgentController;
+import jade.wrapper.PlatformController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import bdi4jade.event.GoalEvent;
+import bdi4jade.event.GoalListener;
+
+public class ExampleRunner implements GoalListener {
+
+ public static final int ITERATIONS = 500;
+
+ public static void main(String[] args) {
+ ExampleRunner runner = new ExampleRunner();
+ runner.run();
+ }
+
+ private ProfileImpl bootProfile;
+ private int iteration;
+ private jade.core.Runtime runtime;
+
+ private final ExampleAgent exampleAgent;
+
+ public ExampleRunner() {
+ List<String> params = new ArrayList<String>();
+ params.add("-gui");
+ params.add("-detect-main:false");
+
+ this.bootProfile = new BootProfileImpl(params.toArray(new String[0]));
+ this.runtime = jade.core.Runtime.instance();
+ PlatformController controller = runtime
+ .createMainContainer(bootProfile);
+
+ this.exampleAgent = new ExampleAgent();
+
+ try {
+ AgentController ac = ((AgentContainer) controller).acceptNewAgent(
+ exampleAgent.getClass().getSimpleName(),
+ exampleAgent);
+ ac.start();
+ } catch (Exception e) {
+ System.out.println(e);
+ }
+
+ this.iteration = 0;
+ }
+
+ @Override
+ public void goalPerformed(GoalEvent event) {
+ if (event.getStatus().isFinished()
+ && event.getGoal() instanceof ExampleGoal) {
+ if (iteration < ITERATIONS) {
+ run();
+ } else {
+ System.out.println("Iterations finished!!");
+ }
+ }
+ }
+
+ public void run() {
+ exampleAgent.addGoal(new ExampleGoal(), this);
+ iteration++;
+ }
+}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome01.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome01.java
new file mode 100644
index 0000000..5ce24b5
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome01.java
@@ -0,0 +1,12 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import bdi4jade.extension.planselection.learningbased.Outcome;
+
+public class Outcome01 extends Outcome {
+
+ @Override
+ public double getMeasurement() {
+ return 1;
+ }
+
+}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome02.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome02.java
new file mode 100644
index 0000000..df106f1
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Outcome02.java
@@ -0,0 +1,12 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import bdi4jade.extension.planselection.learningbased.Outcome;
+
+public class Outcome02 extends Outcome {
+
+ @Override
+ public double getMeasurement() {
+ return 0;
+ }
+
+}
diff --git a/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Softgoals.java b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Softgoals.java
new file mode 100644
index 0000000..4b7159d
--- /dev/null
+++ b/bdi-jade-extensions/src/bdi4jade/extension/planselection/learningbased/example/Softgoals.java
@@ -0,0 +1,13 @@
+package bdi4jade.extension.planselection.learningbased.example;
+
+import bdi4jade.goal.NamedSoftgoal;
+import bdi4jade.goal.Softgoal;
+
+public class Softgoals {
+
+ public static final Softgoal COST = new NamedSoftgoal("COST");
+ public static final Softgoal PERFORMANCE = new NamedSoftgoal("PERFORMANCE");
+
+ public static final Softgoal SOFTGOALS[] = { COST, PERFORMANCE };
+
+}