diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index ec4984207c658bc87acb97f65c1a91481707abf6..4c88fd824ea6b782740b376fad9ee557d297fb56 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 427434b0d473503205fd6dbf2d7bb42f8e14b0af..74ec2e4074aa7c06fae97522013879c4a6ca7393 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 acfcc27f01967090b26d12b9092fea0115b662eb..dd70ab146915ef3a97ce87ac7ac5a178dbe4f95e 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 d246a9e00f672798511c0ab6b19ca606617c451f..76f1154d33df6e3809e96e7bcc10bd6517f7f3b9 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 6e32b074e225279bc62f5394dca51a0487470a37..a413c55a28cc554b120c0f9b02363f8a1ce2c6b6 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;