diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java index aeb93fd4c076c7ae331d2a7f8de9f8d5053ab8f5..d5bf2f26136b180a68a41c180b68d4be4ddde87a 100644 --- a/AMOEBAonAMAK/src/agents/context/Context.java +++ b/AMOEBAonAMAK/src/agents/context/Context.java @@ -111,7 +111,7 @@ public class Context extends AmoebaAgent { Experiment firstPoint = new Experiment(this); ArrayList<Percept> var = getAmas().getPercepts(); for (Percept p : var) { - Range r; + Range r = null; //Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(p); //TODO use neihbors sizes to define radiuses for creation !!!!!!!!!!! @@ -120,14 +120,33 @@ public class Context extends AmoebaAgent { - if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0) { - double radiusCreation = getAmas().getHeadAgent().minNeighborhoodRadius; - //double radiusCreation = getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p); - //double radiusCreation = getAmas().getHeadAgent().minMeanNeighborhoodRaduises; - getAmas().getEnvironment() - .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p).toString()))); - r = new Range(this, p.getValue() - radiusCreation, p.getValue() + radiusCreation, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); - }else { + if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0 && getAmas().data.isActiveLearning) { + + if(getAmas().getHeadAgent().lastEndogenousRequest != null) { + if(getAmas().getHeadAgent().lastEndogenousRequest.getType() == REQUEST.VOID) { + double startRange = getAmas().getHeadAgent().lastEndogenousRequest.getBounds().get(p).getA(); + double endRange = getAmas().getHeadAgent().lastEndogenousRequest.getBounds().get(p).getB(); + + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by VOID", this.getName(), p.getName(), getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p).toString()))); + r = new Range(this, startRange, endRange, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); + + } + } + if(r==null) { + double radiusCreation = getAmas().getHeadAgent().minNeighborhoodRadius; + //double radiusCreation = getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p); + //double radiusCreation = getAmas().getHeadAgent().minMeanNeighborhoodRaduises; + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p).toString()))); + r = new Range(this, p.getValue() - radiusCreation, p.getValue() + radiusCreation, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); + + } + + + + } + if(r==null){ r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p); getAmas().getEnvironment() .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString()))); @@ -199,25 +218,45 @@ public class Context extends AmoebaAgent { Experiment firstPoint = new Experiment(this); ArrayList<Percept> var = getAmas().getPercepts(); for (Percept p : var) { - Range r; + Range r = null; //Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(v); //TODO use neihbors sizes to define radiuses for creation !!!!!!!!!!! Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p); - if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0) { - double radiusCreation = getAmas().getHeadAgent().minNeighborhoodRadius; - //double radiusCreation = getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p); - //double radiusCreation = getAmas().getHeadAgent().minMeanNeighborhoodRaduises; - getAmas().getEnvironment() - .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p).toString()))); - r = new Range(this, p.getValue() - radiusCreation, p.getValue() + radiusCreation, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); - }else { + if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0 && getAmas().data.isActiveLearning) { + + + + if(getAmas().getHeadAgent().lastEndogenousRequest != null) { + if(getAmas().getHeadAgent().lastEndogenousRequest.getType() == REQUEST.VOID) { + double startRange = getAmas().getHeadAgent().lastEndogenousRequest.getBounds().get(p).getA(); + double endRange = getAmas().getHeadAgent().lastEndogenousRequest.getBounds().get(p).getB(); + System.out.println(startRange + " " + endRange); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by VOID", this.getName(), p.getName(), getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p).toString()))); + r = new Range(this, startRange, endRange, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); + + } + } + if(r==null) { + double radiusCreation = getAmas().getHeadAgent().minNeighborhoodRadius; + //double radiusCreation = getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p); + //double radiusCreation = getAmas().getHeadAgent().minMeanNeighborhoodRaduises; + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p).toString()))); + r = new Range(this, p.getValue() - radiusCreation, p.getValue() + radiusCreation, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); + + } + + } + if(r==null) { r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p); getAmas().getEnvironment() .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString()))); } + ranges.put(p, r); ranges.get(p).setValue(p.getValue()); @@ -811,6 +850,7 @@ public class Context extends AmoebaAgent { } getEnvironment().trace(TRACE_LEVEL.EVENT,new ArrayList<String>(Arrays.asList("NEW ENDO REQUEST","10", ""+request, ""+this.getName()))); getAmas().getHeadAgent().addSelfRequest(request, 10,this); + } private Double getRandomValueInRange(Percept pct) { diff --git a/AMOEBAonAMAK/src/agents/head/EndogenousRequest.java b/AMOEBAonAMAK/src/agents/head/EndogenousRequest.java index e6c7ea98015042a6cc07c5e84d199b729cb16343..599f41ebe8967811363e03d149e0fef7cf5b1153 100644 --- a/AMOEBAonAMAK/src/agents/head/EndogenousRequest.java +++ b/AMOEBAonAMAK/src/agents/head/EndogenousRequest.java @@ -97,6 +97,10 @@ public class EndogenousRequest { return requestType; } + public HashMap<Percept, Pair<Double, Double>> getBounds(){ + return bounds; + } + } diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index 1a0c84121e30d7b5369124ee08921b720cb7ca42..ec4984207c658bc87acb97f65c1a91481707abf6 100644 --- a/AMOEBAonAMAK/src/agents/head/Head.java +++ b/AMOEBAonAMAK/src/agents/head/Head.java @@ -55,6 +55,7 @@ public class Head extends AmoebaAgent { public Double minNeighborhoodStartIncrement = null; public Double minNeighborhoodEndIncrement = null; + public EndogenousRequest lastEndogenousRequest = null; Queue<EndogenousRequest> endogenousRequests = new PriorityQueue<EndogenousRequest>(new Comparator<EndogenousRequest>(){ public int compare(EndogenousRequest r1, EndogenousRequest r2) { @@ -405,6 +406,11 @@ public class Head extends AmoebaAgent { getAmas().data.executionTimes[7]=System.currentTimeMillis(); + + if(isSelfRequest()) { + getAmas().data.activeLearning = true; + } + criticalities.addCriticality("spatialCriticality", (getMinMaxVolume() - getVolumeOfAllContexts()) / getMinMaxVolume()); @@ -972,19 +978,23 @@ public class Head extends AmoebaAgent { private void NCSDetection_ChildContext() { - getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" - + "---------------------------------------- NCS DETECTION CHILD CONTEXT"))); - - if(bestContext!=null) { - if(!bestContext.getLocalModel().finishedFirstExperiments() && getAmas().data.firstContext && getAmas().getCycle()>0 && !bestContext.isDying()) { - bestContext.solveNCS_ChildContext(); - - + if(getAmas().data.isActiveLearning) { + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" + + "---------------------------------------- NCS DETECTION CHILD CONTEXT"))); + + if(bestContext!=null) { + if(!bestContext.getLocalModel().finishedFirstExperiments() && getAmas().data.firstContext && getAmas().getCycle()>0 && !bestContext.isDying()) { + bestContext.solveNCS_ChildContext(); + + + } } } + + } @@ -1184,28 +1194,33 @@ public class Head extends AmoebaAgent { private void NCSDetection_PotentialRequest() { - getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" - + "---------------------------------------- NCS DETECTION POTENTIAL REQUESTS"))); - - if (activatedNeighborsContexts.size() > 1) { - int i = 1; - for (Context ctxt : activatedNeighborsContexts) { - for (Context otherCtxt : activatedNeighborsContexts.subList(i, activatedNeighborsContexts.size())) { - if(!this.isDying() && !ctxt.isDying()) { - EndogenousRequest potentialRequest = ctxt.endogenousRequest(otherCtxt); - if(potentialRequest != null) { - addEndogenousRequest(potentialRequest); + if(getAmas().data.isActiveLearning) { + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" + + "---------------------------------------- NCS DETECTION POTENTIAL REQUESTS"))); + + if (activatedNeighborsContexts.size() > 1) { + int i = 1; + for (Context ctxt : activatedNeighborsContexts) { + for (Context otherCtxt : activatedNeighborsContexts.subList(i, activatedNeighborsContexts.size())) { + if(!this.isDying() && !ctxt.isDying()) { + EndogenousRequest potentialRequest = ctxt.endogenousRequest(otherCtxt); + if(potentialRequest != null) { + getAmas().data.activeLearning = true; + addEndogenousRequest(potentialRequest); + } } } + i++; } - i++; + } + + getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO REQUESTS", ""+endogenousRequests.size()))); + for(EndogenousRequest endoRequest : endogenousRequests) { + getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("" + endoRequest))); } } - getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO REQUESTS", ""+endogenousRequests.size()))); - for(EndogenousRequest endoRequest : endogenousRequests) { - getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("" + endoRequest))); - } + } @@ -1496,6 +1511,7 @@ public class Head extends AmoebaAgent { getAmas().data.firstContext = true; } + resetLastEndogenousRequest(); return context; } @@ -2170,7 +2186,11 @@ public class Head extends AmoebaAgent { public boolean isActiveLearning() { - return isSelfRequest(); + return isSelfRequest() && getAmas().data.activeLearning; + } + + public boolean isSelfLearning() { + return isSelfRequest() && getAmas().data.selfLearning; } @@ -2178,12 +2198,22 @@ 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()))); EndogenousRequest futureRequest = endogenousRequests.poll(); + lastEndogenousRequest = futureRequest; for(Context ctxt : futureRequest.getAskingContexts()) { ctxt.deleteWaitingRequest(futureRequest); } + return futureRequest.getRequest(); } + public EndogenousRequest getLastEndogenousRequest() { + return lastEndogenousRequest; + } + + public void resetLastEndogenousRequest() { + lastEndogenousRequest = null; + } + public void deleteRequest(Context ctxt) { } @@ -2194,6 +2224,7 @@ public class Head extends AmoebaAgent { public void addSelfRequest(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)); } diff --git a/AMOEBAonAMAK/src/agents/percept/Percept.java b/AMOEBAonAMAK/src/agents/percept/Percept.java index eaa2e3173840ae973d0e0be823418e94b501d757..7bb940b25a64554e3644babd5ff984a21880baab 100644 --- a/AMOEBAonAMAK/src/agents/percept/Percept.java +++ b/AMOEBAonAMAK/src/agents/percept/Percept.java @@ -396,7 +396,7 @@ public class Percept extends AmoebaAgent { } public double getMappingErrorAllowedOverMapping() { - return getMinMaxDistance() * getEnvironment().getMappingErrorAllowed() * 1.0; + return getMinMaxDistance() * getEnvironment().getMappingErrorAllowed() * 0.5; } public double getMappingErrorAllowedMax() { diff --git a/AMOEBAonAMAK/src/experiments/F_XY_System.java b/AMOEBAonAMAK/src/experiments/F_XY_System.java index 0a15425a9c996d2cf9188a8dbc1c583b86691d66..42897851276311ddec61ba99286aa73334231878 100644 --- a/AMOEBAonAMAK/src/experiments/F_XY_System.java +++ b/AMOEBAonAMAK/src/experiments/F_XY_System.java @@ -101,4 +101,10 @@ public class F_XY_System implements StudiedSystem { // TODO Auto-generated method stub } + + @Override + public void setSelfLearning(boolean value) { + // TODO Auto-generated method stub + + } } \ No newline at end of file diff --git a/AMOEBAonAMAK/src/experiments/benchmark/NDimCube.java b/AMOEBAonAMAK/src/experiments/benchmark/NDimCube.java index 86c4ca726342fc1d2ef7157836142891b2556fc9..25e9bfc9ad8b04a2d47a7723424a98796dfa0de6 100644 --- a/AMOEBAonAMAK/src/experiments/benchmark/NDimCube.java +++ b/AMOEBAonAMAK/src/experiments/benchmark/NDimCube.java @@ -148,4 +148,10 @@ public class NDimCube implements StudiedSystem{ // TODO Auto-generated method stub } + + @Override + public void setSelfLearning(boolean value) { + // TODO Auto-generated method stub + + } } \ No newline at end of file diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java index 3c0ec95825723b5a2eb231d653e20edd38585f97..427434b0d473503205fd6dbf2d7bb42f8e14b0af 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java @@ -41,7 +41,7 @@ public class F_N_Launcher extends Application implements Serializable { public static double mappingErrorAllowed = 0.03; // MULTI public static final double explorationIncrement = 1.0 ; public static final double explorationWidht = 0.5 ; - + public static final boolean setActiveLearning = true ; public static final int nbCycle = 1000; @@ -81,6 +81,7 @@ public class F_N_Launcher extends Application implements Serializable { amoeba.setRenderUpdate(true); amoeba.data.learningSpeed = learningSpeed; amoeba.data.numberOfPointsForRegression = regressionPoints; + amoeba.data.isActiveLearning = setActiveLearning; amoeba.getEnvironment().setMappingErrorAllowed(mappingErrorAllowed); diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java index 968cac30920cc02e6018c124babb7807e8c64cfd..acfcc27f01967090b26d12b9092fea0115b662eb 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java @@ -41,6 +41,7 @@ public class F_N_Manager implements StudiedSystem{ HashMap<String,Double> selfRequest; boolean activeLearning = false; + boolean selfLearning = false; double noiseRange; @@ -153,6 +154,11 @@ public class F_N_Manager implements StudiedSystem{ nonRandomExplorationStep(); + } + else if(selfLearning) { + + selfLearning = false; + } else if(activeLearning) { @@ -691,6 +697,11 @@ private double[] subZoneCenter3D(int nb) { activeLearning = value; } + @Override + public void setSelfLearning(boolean value) { + selfLearning = value; + } + @Override public void setSelfRequest(HashMap<Percept, Double> request){ HashMap<String,Double> newRequest = new HashMap<String,Double>(); diff --git a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementManager2D.java b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementManager2D.java index 1a2788d1de53db70fe80156c48509c4388674c53..56f3dc2dac3ffd382b692002544eafcf8775d770 100644 --- a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementManager2D.java +++ b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementManager2D.java @@ -512,6 +512,17 @@ public class ReinforcementManager2D implements StudiedSystem{ } + + + + + + @Override + public void setSelfLearning(boolean value) { + // TODO Auto-generated method stub + + } + diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java index 866b77c0947fd938b4c5ef417dda4addf5b97d62..d246a9e00f672798511c0ab6b19ca606617c451f 100644 --- a/AMOEBAonAMAK/src/kernel/AMOEBA.java +++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java @@ -248,10 +248,16 @@ public class AMOEBA extends Amas<World> implements IAMOEBA { if(studiedSystem != null) { if(head.isActiveLearning()) { + data.activeLearning = false; studiedSystem.setActiveLearning(true); studiedSystem.setSelfRequest(head.getSelfRequest()); } + else if(head.isSelfLearning()) { + data.selfLearning = false; + studiedSystem.setSelfLearning(true); + studiedSystem.setSelfRequest(head.getSelfRequest()); + } } super.onSystemCycleEnd(); diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java index 449f40008954bd32bf04b3b46e72a301638d57dc..6e32b074e225279bc62f5394dca51a0487470a37 100644 --- a/AMOEBAonAMAK/src/kernel/AmoebaData.java +++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java @@ -46,7 +46,10 @@ public class AmoebaData implements Serializable { public boolean newContextWasCreated = false; public boolean contextFromPropositionWasSelected = false; + public boolean isActiveLearning; + public boolean activeLearning = false; + public boolean selfLearning = false; public HashMap<String, Double> selfRequest; diff --git a/AMOEBAonAMAK/src/kernel/StudiedSystem.java b/AMOEBAonAMAK/src/kernel/StudiedSystem.java index b233951eaf945ee789545b3325e8ce0924bcda40..88ec60c66a966bc527bfc14404444a68c96d08fd 100644 --- a/AMOEBAonAMAK/src/kernel/StudiedSystem.java +++ b/AMOEBAonAMAK/src/kernel/StudiedSystem.java @@ -37,7 +37,7 @@ public interface StudiedSystem extends Serializable{ public double requestOracle(HashMap<String, Double> request); public void setActiveLearning(boolean value); - + public void setSelfLearning(boolean value); public void setSelfRequest(HashMap<Percept, Double> request);