From 8a301f16e72dfb1dc579fc6a64334441fc3ea8c2 Mon Sep 17 00:00:00 2001 From: BrunoDatoMeneses <bruno.dato.meneses@gmail.com> Date: Tue, 28 Jan 2020 18:46:48 +0100 Subject: [PATCH] RLS: ACTIVE LEARNING --- AMOEBAonAMAK/src/agents/context/Context.java | 2 +- AMOEBAonAMAK/src/agents/head/Head.java | 55 +++++++++++++++---- .../src/experiments/UnityLauncher/Main.java | 2 +- .../nDimensionsLaunchers/F_N_Launcher.java | 2 +- .../F_N_LauncherMultiUI.java | 4 +- .../nDimensionsLaunchers/F_N_Manager.java | 36 ++++++------ .../ReinforcementLauncher2D.java | 2 +- .../ReinforcementWithControlLauncher2D.java | 2 +- AMOEBAonAMAK/src/kernel/AMOEBA.java | 2 +- 9 files changed, 71 insertions(+), 36 deletions(-) diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java index e5fcadd1..9504f902 100644 --- a/AMOEBAonAMAK/src/agents/context/Context.java +++ b/AMOEBAonAMAK/src/agents/context/Context.java @@ -876,7 +876,7 @@ public class Context extends AmoebaAgent { request.put(pct, getRandomValueInRange(pct)); } getEnvironment().trace(TRACE_LEVEL.EVENT,new ArrayList<String>(Arrays.asList("NEW ENDO REQUEST","10", ""+request, ""+this.getName()))); - getAmas().getHeadAgent().addSelfRequest(request, 10,this); + getAmas().getHeadAgent().addChildRequest(request, 10,this); } diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index e0b425f0..a80074d1 100644 --- a/AMOEBAonAMAK/src/agents/head/Head.java +++ b/AMOEBAonAMAK/src/agents/head/Head.java @@ -63,6 +63,12 @@ public class Head extends AmoebaAgent { } }); + Queue<EndogenousRequest> endogenousChildRequests = new PriorityQueue<EndogenousRequest>(new Comparator<EndogenousRequest>(){ + public int compare(EndogenousRequest r1, EndogenousRequest r2) { + return r2.getPriority().compareTo(r1.getPriority()); + } + }); + static double lembda = 0.99; // ----------------------------- @@ -244,12 +250,16 @@ public class Head extends AmoebaAgent { } - if(isSelfRequest()) { - if(getAmas().data.isSelfLearning && endogenousRequests.element().getType() != REQUEST.SELF) { + if(isSelfRequest() ) { + if(getAmas().data.isSelfLearning) { getAmas().data.selfLearning = true; }else if(getAmas().data.isActiveLearning) { getAmas().data.activeLearning = true; } + }else if(isSelfChildRequest()) { + if(getAmas().data.isActiveLearning) { + getAmas().data.activeLearning = true; + } } updateStatisticalInformations(); /// regarder dans le détail, possible que ce pas trop utile @@ -1217,7 +1227,7 @@ public class Head extends AmoebaAgent { if(potentialRequest != null) { - addEndogenousRequest(potentialRequest); + addEndogenousRequest(potentialRequest, endogenousRequests); } } } @@ -2206,7 +2216,7 @@ public class Head extends AmoebaAgent { public HashMap<Percept, Double> getSelfRequest(){ - getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("FUTURE ACTIVE LEARNING", ""+endogenousRequests.element()))); + getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("FUTURE SELF LEARNING", ""+endogenousRequests.element()))); EndogenousRequest futureRequest = endogenousRequests.poll(); lastEndogenousRequest = futureRequest; for(Context ctxt : futureRequest.getAskingContexts()) { @@ -2216,6 +2226,23 @@ public class Head extends AmoebaAgent { return futureRequest.getRequest(); } + public HashMap<Percept, Double> getActiveRequest(){ + EndogenousRequest futureRequest = null; + if(endogenousChildRequests.size()>0) { + futureRequest = endogenousChildRequests.poll(); + }else if(endogenousRequests.size()>0) { + futureRequest = endogenousRequests.poll(); + } + getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("FUTURE ACTIVE LEARNING", ""+futureRequest))); + + lastEndogenousRequest = futureRequest; + for(Context ctxt : futureRequest.getAskingContexts()) { + ctxt.deleteWaitingRequest(futureRequest); + } + + return futureRequest.getRequest(); + } + public EndogenousRequest getLastEndogenousRequest() { return lastEndogenousRequest; } @@ -2228,6 +2255,14 @@ public class Head extends AmoebaAgent { } + public boolean isSelfChildRequest(){ + getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO CHILD REQUESTS", ""+endogenousChildRequests.size()))); + for(EndogenousRequest endoRequest : endogenousChildRequests) { + getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("" + endoRequest))); + } + return endogenousChildRequests.size()>0; + } + public boolean isSelfRequest(){ getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO REQUESTS", ""+endogenousRequests.size()))); for(EndogenousRequest endoRequest : endogenousRequests) { @@ -2236,19 +2271,19 @@ public class Head extends AmoebaAgent { return endogenousRequests.size()>0; } - public void addSelfRequest(HashMap<Percept, Double> request, int priority, Context ctxt){ + public void addChildRequest(HashMap<Percept, Double> request, int priority, Context ctxt){ getAmas().data.activeLearning = true; - addEndogenousRequest(new EndogenousRequest(request, null, priority,new ArrayList<Context>(Arrays.asList(ctxt)), REQUEST.SELF)); + addEndogenousRequest(new EndogenousRequest(request, null, priority,new ArrayList<Context>(Arrays.asList(ctxt)), REQUEST.SELF), endogenousChildRequests); } - public void addEndogenousRequest(EndogenousRequest request) { + public void addEndogenousRequest(EndogenousRequest request, Queue<EndogenousRequest> endogenousRequestsList) { boolean existingRequestTest = false; if(request.getAskingContexts().size()>1) { - Iterator<EndogenousRequest> itr = endogenousRequests.iterator(); + Iterator<EndogenousRequest> itr = endogenousRequestsList.iterator(); while(!existingRequestTest && itr.hasNext()) { EndogenousRequest currentRequest = itr.next(); @@ -2266,12 +2301,12 @@ public class Head extends AmoebaAgent { for(Context ctxt : request.getAskingContexts()) { ctxt.addWaitingRequest(request); } - endogenousRequests.add(request); + endogenousRequestsList.add(request); getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEW ADDED ENDO REQUEST", ""+request))); } }else { request.getAskingContexts().get(0).addWaitingRequest(request); - endogenousRequests.add(request); + endogenousRequestsList.add(request); getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEW ADDED ENDO REQUEST", ""+request))); } diff --git a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java index 80756bc9..b8100b80 100644 --- a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java +++ b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java @@ -111,7 +111,7 @@ public class Main implements Runnable { if(amoeba.getHeadAgent().isActiveLearning()) { studiedSystem.setActiveLearning(true); - studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest()); + studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest()); //TODO self active ... } diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java index 6c4ea496..1ccc5f44 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java @@ -33,7 +33,7 @@ public class F_N_Launcher extends Application implements Serializable { public static final int regressionPoints = 100; public static final int dimension = 2; public static final double spaceSize = 50.0 ; - public static final int nbOfModels = 3 ; + public static final int nbOfModels = 2 ; public static final int normType = 2 ; public static final boolean randomExploration = true; public static final boolean limitedToSpaceZone = true; diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java index 0256e545..903eda8e 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java @@ -273,7 +273,7 @@ public class F_N_LauncherMultiUI extends Application implements Serializable { amoeba.learn(studiedSystem.getOutput()); if(amoeba.getHeadAgent().isActiveLearning()) { studiedSystem.setActiveLearning(true); - studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest()); + studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest()); //TODO self active ... } System.out.println(status); @@ -344,7 +344,7 @@ public class F_N_LauncherMultiUI extends Application implements Serializable { amoeba2.learn(studiedSystem2.getOutput()); if(amoeba2.getHeadAgent().isActiveLearning()) { studiedSystem2.setActiveLearning(true); - studiedSystem2.setSelfRequest(amoeba2.getHeadAgent().getSelfRequest()); + studiedSystem2.setSelfRequest(amoeba2.getHeadAgent().getSelfRequest()); //TODO self active ... } System.out.println(status); diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java index dd70ab14..9ce57be5 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java @@ -280,23 +280,23 @@ public class F_N_Manager implements StudiedSystem{ int subzone = subzone2D(xRequest); /* Multi */ -// if(subzone == 1) { -// /* Disques */ -// return modelN(xRequest) ; -// }else if (subzone == 2) { -// /* Gaussian model */ -// return gaussianModel(xRequest, subZoneCenter3D(2), gaussianCoef, gaussianVariance); -// -// }else if (subzone == 3) { -// /* Square */ -// return square2DModel(xRequest, subZoneCenter3D(3)); -// -// }else if (subzone == 4) { -// /* Exp */ -// return gaussianMapping2D(xRequest); -// } -// -// return model1(); + if(subzone == 1) { + /* Disques */ + return modelN(xRequest) ; + }else if (subzone == 2) { + /* Gaussian model */ + return gaussianModel(xRequest, subZoneCenter3D(2), gaussianCoef, gaussianVariance); + + }else if (subzone == 3) { + /* Square */ + return square2DModel(xRequest, subZoneCenter3D(3)); + + }else if (subzone == 4) { + /* Exp */ + return gaussianMapping2D(xRequest); + } + + return model1(); /* Disc */ @@ -307,7 +307,7 @@ public class F_N_Manager implements StudiedSystem{ //return model1(); /* Triangle */ - return (xRequest[0] > xRequest[1]) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]); + //return (xRequest[0] > xRequest[1]) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]); /* Split */ //return ( x <= 0 ) ? 2*x + y : 5*x - 8*y; diff --git a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java index 4b1cb0bb..b9804256 100644 --- a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java +++ b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java @@ -185,7 +185,7 @@ public class ReinforcementLauncher2D extends Application implements Serializable amoebaSpatialReward.learn(studiedSystem.getOutput()); if(amoebaSpatialReward.getHeadAgent().isActiveLearning()) { studiedSystem.setActiveLearning(true); - studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest()); + studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest()); //TODO self active ... } //System.out.println(status); diff --git a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java index 278ee8db..3fae320a 100644 --- a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java +++ b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java @@ -219,7 +219,7 @@ public class ReinforcementWithControlLauncher2D extends Application implements S amoebaSpatialReward.learn(studiedSystem.getOutput()); if(amoebaSpatialReward.getHeadAgent().isActiveLearning()) { studiedSystem.setActiveLearning(true); - studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest()); + studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest()); //TODO self active ... } //System.out.println(status); diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java index 76f1154d..1d95549f 100644 --- a/AMOEBAonAMAK/src/kernel/AMOEBA.java +++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java @@ -262,7 +262,7 @@ public class AMOEBA extends Amas<World> implements IAMOEBA { else if(data.activeLearning) { data.activeLearning = false; studiedSystem.setActiveLearning(true); - studiedSystem.setSelfRequest(head.getSelfRequest()); + studiedSystem.setSelfRequest(head.getActiveRequest()); } } -- GitLab