bdi4jade

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 };
+
+}