From 6310910973a7a6df30d43bc4df2ec017cc854501 Mon Sep 17 00:00:00 2001 From: BrunoDatoMeneses <bruno.dato.meneses@gmail.com> Date: Wed, 22 Jan 2020 18:23:16 +0100 Subject: [PATCH] ADD: start learning without oracle --- AMOEBAonAMAK/src/agents/head/Head.java | 102 ++++++++++-------- .../nDimensionsLaunchers/F_N_Launcher.java | 2 + .../nDimensionsLaunchers/F_N_Manager.java | 15 +-- AMOEBAonAMAK/src/kernel/AMOEBA.java | 18 ++-- AMOEBAonAMAK/src/kernel/AmoebaData.java | 5 +- 5 files changed, 84 insertions(+), 58 deletions(-) diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index ec498420..4c88fd82 100644 --- a/AMOEBAonAMAK/src/agents/head/Head.java +++ b/AMOEBAonAMAK/src/agents/head/Head.java @@ -243,6 +243,15 @@ public class Head extends AmoebaAgent { playWithoutOracle(); } + + if(isSelfRequest()) { + if(getAmas().data.isSelfLearning) { + getAmas().data.selfLearning = true; + }else if(getAmas().data.isActiveLearning) { + getAmas().data.selfLearning = true; + } + } + updateStatisticalInformations(); /// regarder dans le détail, possible que ce pas trop utile newContext = null; @@ -326,7 +335,7 @@ public class Head extends AmoebaAgent { getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("\n\n"))); getAmas().data.executionTimes[0]=System.currentTimeMillis(); - getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" + getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" + "---------------------------------------- PLAY WITH ORACLE"))); if (activatedContexts.size() > 0) { @@ -407,9 +416,7 @@ public class Head extends AmoebaAgent { getAmas().data.executionTimes[7]=System.currentTimeMillis(); - if(isSelfRequest()) { - getAmas().data.activeLearning = true; - } + criticalities.addCriticality("spatialCriticality", (getMinMaxVolume() - getVolumeOfAllContexts()) / getMinMaxVolume()); @@ -531,6 +538,9 @@ public class Head extends AmoebaAgent { * Play without oracle. */ private void playWithoutOracle() { + + getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" + + "---------------------------------------- PLAY WITHOUT ORACLE"))); logger().debug("HEAD without oracle", "Nombre de contextes activés: " + activatedContexts.size()); @@ -572,7 +582,7 @@ public class Head extends AmoebaAgent { logger().debug("HEAD without oracle", "no Best context selected "); } - getAmas().data.criticity = Math.abs(getAmas().data.oracleValue - getAmas().data.prediction); + //getAmas().data.criticity = Math.abs(getAmas().data.oracleValue - getAmas().data.prediction); if(getAmas().isReinforcement()) { if (activatedNeighborsContexts.size() > 1) { @@ -1205,7 +1215,8 @@ public class Head extends AmoebaAgent { if(!this.isDying() && !ctxt.isDying()) { EndogenousRequest potentialRequest = ctxt.endogenousRequest(otherCtxt); if(potentialRequest != null) { - getAmas().data.activeLearning = true; + + addEndogenousRequest(potentialRequest); } } @@ -1214,10 +1225,7 @@ public class Head extends AmoebaAgent { } } - 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))); - } + } @@ -1520,47 +1528,49 @@ public class Head extends AmoebaAgent { */ private void updateStatisticalInformations() { - - if(Math.abs(getAmas().data.oracleValue)>getAmas().data.maxPrediction) { - getAmas().data.maxPrediction = Math.abs(getAmas().data.oracleValue); - } - + if(getAmas().data.oracleValue != null) { + if(Math.abs(getAmas().data.oracleValue)>getAmas().data.maxPrediction) { + getAmas().data.maxPrediction = Math.abs(getAmas().data.oracleValue); + } + - getAmas().data.normalizedCriticality = getAmas().data.criticity/getAmas().data.maxPrediction; - criticalities.addCriticality("predictionCriticality", getAmas().data.normalizedCriticality); - - criticalities.updateMeans(); + getAmas().data.normalizedCriticality = getAmas().data.criticity/getAmas().data.maxPrediction; + criticalities.addCriticality("predictionCriticality", getAmas().data.normalizedCriticality); + + criticalities.updateMeans(); - if (severalActivatedContexts()) { + if (severalActivatedContexts()) { - endogenousCriticalities.addCriticality("predictionCriticality", getAmas().data.criticity); - endogenousCriticalities.addCriticality("endogenousPredictionActivatedContextsOverlapspredictionCriticality", - Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlaps)); - endogenousCriticalities.addCriticality( - "endogenousPredictionActivatedContextsOverlapsWorstDimInfluencepredictionCriticality", - Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluence)); - endogenousCriticalities.addCriticality( - "endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidencepredictionCriticality", - Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidence)); - endogenousCriticalities.addCriticality( - "endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidencepredictionCriticality", - Math.abs(getAmas().data.oracleValue - - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidence)); - endogenousCriticalities.addCriticality( - "endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolumepredictionCriticality", - Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolume)); - endogenousCriticalities.addCriticality( - "endogenousPredictionActivatedContextsSharedIncompetencepredictionCriticality", - Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsSharedIncompetence)); + endogenousCriticalities.addCriticality("predictionCriticality", getAmas().data.criticity); + endogenousCriticalities.addCriticality("endogenousPredictionActivatedContextsOverlapspredictionCriticality", + Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlaps)); + endogenousCriticalities.addCriticality( + "endogenousPredictionActivatedContextsOverlapsWorstDimInfluencepredictionCriticality", + Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluence)); + endogenousCriticalities.addCriticality( + "endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidencepredictionCriticality", + Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidence)); + endogenousCriticalities.addCriticality( + "endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidencepredictionCriticality", + Math.abs(getAmas().data.oracleValue + - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidence)); + endogenousCriticalities.addCriticality( + "endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolumepredictionCriticality", + Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolume)); + endogenousCriticalities.addCriticality( + "endogenousPredictionActivatedContextsSharedIncompetencepredictionCriticality", + Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsSharedIncompetence)); - endogenousCriticalities.updateMeans(); + endogenousCriticalities.updateMeans(); - } + } - getAmas().data.predictionPerformance.update(criticalities.getCriticalityMean("predictionCriticality")); - if (criticalities.getCriticalityMean("distanceToRegression") != null) { - getAmas().data.regressionPerformance.update(criticalities.getCriticalityMean("distanceToRegression")); + getAmas().data.predictionPerformance.update(criticalities.getCriticalityMean("predictionCriticality")); + if (criticalities.getCriticalityMean("distanceToRegression") != null) { + getAmas().data.regressionPerformance.update(criticalities.getCriticalityMean("distanceToRegression")); + } } + // getAmas().data.mappingPerformance.update(?); } @@ -2219,6 +2229,10 @@ public class Head extends AmoebaAgent { } public boolean isSelfRequest(){ + 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))); + } return endogenousRequests.size()>0; } diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java index 427434b0..74ec2e40 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java @@ -42,6 +42,7 @@ public class F_N_Launcher extends Application implements Serializable { public static final double explorationIncrement = 1.0 ; public static final double explorationWidht = 0.5 ; public static final boolean setActiveLearning = true ; + public static final boolean setSelfLearning = true ; public static final int nbCycle = 1000; @@ -82,6 +83,7 @@ public class F_N_Launcher extends Application implements Serializable { amoeba.data.learningSpeed = learningSpeed; amoeba.data.numberOfPointsForRegression = regressionPoints; amoeba.data.isActiveLearning = setActiveLearning; + amoeba.data.isSelfLearning = setSelfLearning; 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 acfcc27f..dd70ab14 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java @@ -154,11 +154,6 @@ public class F_N_Manager implements StudiedSystem{ nonRandomExplorationStep(); - } - else if(selfLearning) { - - selfLearning = false; - } else if(activeLearning) { @@ -573,7 +568,15 @@ private double[] subZoneCenter3D(int nb) { out.put("px" + i,x[i]); } - out.put("oracle",result); + if(selfLearning) { + selfLearning = false; + out.put("oracle",null); + }else { + out.put("oracle",result); + } + //out.put("oracle",result); + System.out.println(out); + return out; } diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java index d246a9e0..76f1154d 100644 --- a/AMOEBAonAMAK/src/kernel/AMOEBA.java +++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java @@ -217,6 +217,12 @@ public class AMOEBA extends Amas<World> implements IAMOEBA { perceptions = studiedSystem.getOutput(); + if(perceptions.get("oracle")==null) { + data.useOracle = false; + }else { + data.useOracle = true; + } + } environment.preCycleActions(); @@ -247,15 +253,15 @@ public class AMOEBA extends Amas<World> implements IAMOEBA { protected void onSystemCycleEnd() { if(studiedSystem != null) { - if(head.isActiveLearning()) { - data.activeLearning = false; - studiedSystem.setActiveLearning(true); + if(data.selfLearning) { + data.selfLearning = false; + studiedSystem.setSelfLearning(true); studiedSystem.setSelfRequest(head.getSelfRequest()); } - else if(head.isSelfLearning()) { - data.selfLearning = false; - studiedSystem.setSelfLearning(true); + else if(data.activeLearning) { + data.activeLearning = false; + studiedSystem.setActiveLearning(true); studiedSystem.setSelfRequest(head.getSelfRequest()); } } diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java index 6e32b074..a413c55a 100644 --- a/AMOEBAonAMAK/src/kernel/AmoebaData.java +++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java @@ -32,8 +32,8 @@ public class AmoebaData implements Serializable { public Double endogenousPredictionNContexts = 0.0; public Double endogenousPredictionNContextsByInfluence = 0.0; - public double oracleValue; - public double oldOracleValue; + public Double oracleValue; + public Double oldOracleValue; public double criticity = 0.0; public double distanceToRegression; public double oldCriticity; @@ -47,6 +47,7 @@ public class AmoebaData implements Serializable { public boolean contextFromPropositionWasSelected = false; public boolean isActiveLearning; + public boolean isSelfLearning; public boolean activeLearning = false; public boolean selfLearning = false; -- GitLab