diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index 652269f825741479161dd1c5e09d7ec46280b150..5a38ebda96b28d52e37728c4cc628533d256d497 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -444,37 +444,6 @@ public class Context extends AmoebaAgent {
 		return maxExpansions;
 	}
 
-	// ---------
-	// TODO these methods look very similar, maybe factorization is possible ?
-	public void updateRequestNeighborState() { // faire le update dans le head attention partial et full
-		if (nonValidNeightborPercepts.size() == 0) {
-
-			getAmas().getHeadAgent().addRequestNeighbor(this);
-		} else {
-			getAmas().getHeadAgent().removeRequestNeighbor(this);
-		}
-	}
-
-	public void updateActivatedContexts() { // faire le update dans le head attention partial et full
-		if (nonValidPercepts.size() == 0) {
-
-			getAmas().getHeadAgent().addActivatedContext(this);
-		} else {
-			getAmas().getHeadAgent().removeActivatedContext(this);
-		}
-	}
-
-	public void updateActivatedContextsCopyForUpdate() { // faire le update dans le head attention partial et full
-		if (nonValidPercepts.size() == 0) {
-
-			getAmas().getHeadAgent().addActivatedContextCopy(this);
-		} else {
-			getAmas().getHeadAgent().removeActivatedContextCopy(this);
-		}
-
-	}
-	// --------
-
 	public void clearNonValidPerceptNeighbors() {
 		nonValidNeightborPercepts.clear();
 	}
@@ -604,7 +573,7 @@ public class Context extends AmoebaAgent {
 		
 		lastDistanceToModel = getLocalModel().distance(this.getCurrentExperiment());
 		lastAverageRegressionPerformanceIndicator = head.getAverageRegressionPerformanceIndicator();
-		if(lastDistanceToModel < lastAverageRegressionPerformanceIndicator) {
+		if(lastDistanceToModel <= lastAverageRegressionPerformanceIndicator) {
 		//if(getLocalModel().distance(this.getCurrentExperiment()) < head.getAverageRegressionPerformanceIndicator()) {
 		//if (head.getCriticity(this) < head.getErrorAllowed()) {
 			confidence++;
@@ -1811,56 +1780,6 @@ public class Context extends AmoebaAgent {
 			activations++;
 			getAmas().getHeadAgent().proposition(this);
 		}
-	}
-	
-	private void onActOld() {
-
-		if (nonValidPercepts.size() == 0) {
-
-			getAmas().getHeadAgent().proposition(this);
-
-//			for (Percept pct : getAmas().getPercepts()) {
-//				getAmas().getHeadAgent().addPartiallyActivatedContextInNeighbors(pct, this);
-//			}
-
-		} else if (nonValidPercepts.size() == 1) {
-			//getAmas().getHeadAgent().addPartiallyActivatedContext(nonValidPercepts.get(0), this);
-		}
-
-		if (nonValidNeightborPercepts.size() == 0) {
-
-			getAmas().getHeadAgent().addRequestNeighbor(this);
-		} else if (nonValidNeightborPercepts.size() == 1) {
-			//getAmas().getHeadAgent().addPartialRequestNeighborContext(nonValidNeightborPercepts.get(0), this);
-		}
-
-		if ((nonValidNeightborPercepts.size() == 0) && (nonValidPercepts.size() == 1)) {
-
-			//getAmas().getHeadAgent().addPartiallyActivatedContextInNeighbors(nonValidPercepts.get(0), this);
-
-		}
-
-		this.activations = 0;
-		//this.valid = false;
-
-		// Reset percepts validities
-		for (Percept percept : perceptValidities.keySet()) {
-			perceptValidities.put(percept, false);
-			perceptNeighborhoodValidities.put(percept, false);
-		}
-		
-	}
-	
-	public void computeContextNeighborsValidity() {
-
-		
-		if (nonValidNeightborPercepts.size() == 1) {
-			getAmas().getHeadAgent().addPartiallyActivatedContextInNeighbors(nonValidNeightborPercepts.get(0), this);
-		}
-
-
-
-		
 	}
 
 	/**
diff --git a/AMOEBAonAMAK/src/agents/context/Range.java b/AMOEBAonAMAK/src/agents/context/Range.java
index 082754b311e52a8b0eab6b7606df584eb60278c6..61b53491ba423c369b008b839cc336400ddf5f7b 100644
--- a/AMOEBAonAMAK/src/agents/context/Range.java
+++ b/AMOEBAonAMAK/src/agents/context/Range.java
@@ -1484,8 +1484,6 @@ public class Range implements Serializable, Comparable, Cloneable {
 				}
 			}
 
-			this.context.updateRequestNeighborState();
-
 			if (!this.contains2(percept.getValue())) {
 				if (!this.context.getNonValidPercepts().contains(this.percept)) {
 					this.context.addNonValidPercept(this.percept);
@@ -1496,10 +1494,6 @@ public class Range implements Serializable, Comparable, Cloneable {
 				}
 			}
 
-			this.context.updateActivatedContextsCopyForUpdate();
-
-			
-
 			if (!this.context.isDying() && !context.getAmas().getSpatiallyAlteredContextForUnityUI().contains(this.context)) {
 				context.getAmas().addSpatiallyAlteredContextForUnityUI(this.context);
 			}
@@ -1548,8 +1542,6 @@ public class Range implements Serializable, Comparable, Cloneable {
 				}
 			}
 
-			this.context.updateRequestNeighborState();
-
 			if (!this.contains2(percept.getValue())) {
 				if (!this.context.getNonValidPercepts().contains(this.percept)) {
 					this.context.addNonValidPercept(this.percept);
@@ -1560,10 +1552,6 @@ public class Range implements Serializable, Comparable, Cloneable {
 				}
 			}
 
-			this.context.updateActivatedContextsCopyForUpdate();
-
-			
-
 			if (!this.context.isDying() && !context.getAmas().getSpatiallyAlteredContextForUnityUI().contains(this.context)) {
 				context.getAmas().addSpatiallyAlteredContextForUnityUI(this.context);
 			}
diff --git a/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java b/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java
index 23bd22756f02eb8cb8053a71aea7e5d9bb875142..1a9bcee4aa2ff7bff3472e4d74067a55d44af682 100644
--- a/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java
+++ b/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java
@@ -132,13 +132,13 @@ public class LocalModelMillerRegression implements LocalModel{
 			throw new ArithmeticException("First coeficient of model cannot be NaN");
 		
 		for (int i = 1 ; i < coefs.length ; i++) {
-			
-			if (Double.isNaN(coefs[i])) coefs[i] = 0.0;
-			if(coefs[i]>0) {
-				result += coefs[i] * context.getRanges().get(percepts.get(i-1)).getEnd();
+			double coef = coefs[i];
+			if (Double.isNaN(coef)) coef = 0.0;
+			if(coef>0) {
+				result += coef * context.getRanges().get(percepts.get(i-1)).getEnd();
 			}
 			else {
-				result += coefs[i] * context.getRanges().get(percepts.get(i-1)).getStart();
+				result += coef * context.getRanges().get(percepts.get(i-1)).getStart();
 			}
 		}
 	
@@ -156,21 +156,21 @@ public class LocalModelMillerRegression implements LocalModel{
 			throw new ArithmeticException("First coeficient of model cannot be NaN");
 		
 		for (int i = 1 ; i < coefs.length ; i++) {
-			
-			if (Double.isNaN(coefs[i])) coefs[i] = 0.0;
+			double coef = coefs[i];
+			if (Double.isNaN(coef)) coef = 0.0;
 			double pos;
 			Percept p = percepts.get(i-1);
 			if(fixedPercepts.containsKey(p.getName())) {
 				pos = fixedPercepts.get(p.getName());
 			} else {
-				if(coefs[i]>0) {
+				if(coef>0) {
 					pos = context.getRanges().get(p).getEnd();
 				}
 				else {
 					pos = context.getRanges().get(p).getStart();
 				}
 			}
-			double value = coefs[i] * pos;
+			double value = coef * pos;
 			result.put("oracle", result.get("oracle") + value);
 			result.put(p.getName(), pos);
 		}
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index 390b128166c12cebf670282db9febcd3d78c957c..c5608c7afec57f521edbcacc540f18cae2f5ce48 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -17,9 +17,8 @@ import agents.percept.Percept;
 import kernel.AMOEBA;
 import ncs.NCS;
 import utils.Pair;
-import utils.RandomUtils;
 import utils.PrintOnce;
-import utils.Quadruplet;
+import utils.RandomUtils;
 import utils.TRACE_LEVEL;
 
 /**
@@ -32,7 +31,6 @@ public class Head extends AmoebaAgent {
 	private Context bestContext;
 	private Context lastUsedContext;
 	private Context newContext;
-	private String functionSelected;
 
 	HashMap<Percept, Double> currentSituation = new HashMap<Percept, Double>();
 
@@ -40,20 +38,8 @@ public class Head extends AmoebaAgent {
 	public Criticalities endogenousCriticalities;
 
 	private ArrayList<Context> activatedContexts = new ArrayList<Context>();
-	private ArrayList<Context> activatedContextsCopyForUpdates = new ArrayList<Context>();
 	private ArrayList<Context> activatedNeighborsContexts = new ArrayList<Context>();
 
-	private HashMap<Percept, ArrayList<Context>> partiallyActivatedContextInNeighbors = new HashMap<Percept, ArrayList<Context>>();
-	private HashMap<Percept, ArrayList<Context>> partiallyActivatedContexts = new HashMap<Percept, ArrayList<Context>>();
-	private HashMap<Percept, ArrayList<Context>> partialNeighborContexts = new HashMap<Percept, ArrayList<Context>>();
-
-	private ArrayList<Context> contextsNeighborsByInfluence = new ArrayList<Context>();
-
-	private HashMap<Percept, ContextPair<Context, Context>> requestSurroundings = new HashMap<Percept, ContextPair<Context, Context>>();
-	private HashMap<Percept, ContextPair<Context, Context>> sharedIncompetenceContextPairs = new HashMap<Percept, ContextPair<Context, Context>>();
-
-	private ArrayList<Context> contextsInCompetition = new ArrayList<Context>();
-
 	Queue<EndogenousRequest> endogenousRequests = new PriorityQueue<EndogenousRequest>(new Comparator<EndogenousRequest>(){
 		   public int compare(EndogenousRequest r1, EndogenousRequest r2) {
 			      return r2.getPriority().compareTo(r1.getPriority());
@@ -81,29 +67,6 @@ public class Head extends AmoebaAgent {
 		for(int i =0 ; i< 20;i++) {
 			getAmas().data.executionTimesSums[i]=0.0;
 		}
-		
-
-		
-		
-
-	}
-	
-	
-
-	public void addPartiallyActivatedContext(Percept nonValidPercept, Context validContextExecptOnTheNonValidPercept) {
-		partiallyActivatedContexts.get(nonValidPercept).add(validContextExecptOnTheNonValidPercept);
-
-	}
-
-	public void addPartiallyActivatedContextInNeighbors(Percept nonValidPercept,
-			Context validContextExecptOnTheNonValidPercept) {
-		partiallyActivatedContextInNeighbors.get(nonValidPercept).add(validContextExecptOnTheNonValidPercept);
-
-	}
-
-	public void addPartialRequestNeighborContext(Percept nonValidPercept, Context validContextNeighborExecptOnTheNonValidPercept) {
-		partialNeighborContexts.get(nonValidPercept).add(validContextNeighborExecptOnTheNonValidPercept);
-
 	}
 
 	/**
@@ -281,28 +244,6 @@ public class Head extends AmoebaAgent {
 
 	}
 
-	public double getSpatialGeneralizationScore() {
-		return getAmas().data.spatialGeneralizationScore;
-	}
-
-	private boolean nearestLocalNeighbor(Context ctxt1, Context ctxt2) {
-
-		boolean nearestLocalNeighborTest = false;
-
-		for (Percept pct : getAmas().getPercepts()) {
-
-			if (partiallyActivatedContextInNeighbors.get(pct).contains(ctxt1)
-					&& partiallyActivatedContextInNeighbors.get(pct).contains(ctxt2)) {
-				nearestLocalNeighborTest = nearestLocalNeighborTest
-						|| (Math.abs(partiallyActivatedContextInNeighbors.get(pct).indexOf(ctxt1)
-								- partiallyActivatedContextInNeighbors.get(pct).indexOf(ctxt2)) == 1);
-			}
-
-		}
-
-		return nearestLocalNeighborTest;
-	}
-
 	public double getMinMaxVolume() {
 		double minMaxVolume = 1;
 		for (Percept pct : getAmas().getPercepts()) {
@@ -337,7 +278,6 @@ public class Head extends AmoebaAgent {
 		} else {
 
 			getAmas().data.noBestContext = true;
-			ArrayList<Context> allContexts = getAmas().getContexts();
 			Context nearestContext = this.getNearestContext(activatedNeighborsContexts);
 			if(nearestContext != null) {
 				getAmas().data.prediction = nearestContext.getActionProposal();
@@ -387,12 +327,6 @@ public class Head extends AmoebaAgent {
 		getAmas().data.endogenousPredictionActivatedContextsSharedIncompetence = null;
 		getAmas().data.endogenousPredictionNContextsByInfluence = null;
 
-		for (Percept pcpt : getAmas().getPercepts()) {
-			requestSurroundings.get(pcpt).clear();
-			sharedIncompetenceContextPairs.get(pcpt).clear();
-		}
-		contextsInCompetition.clear();
-
 		if (uniqueActivatedContext()) {
 			getAmas().data.endogenousPredictionActivatedContextsOverlaps = activatedContexts.get(0).getActionProposal();
 			getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluence = activatedContexts.get(0)
@@ -443,6 +377,7 @@ public class Head extends AmoebaAgent {
 		getAmas().data.maxConfidence = Double.NEGATIVE_INFINITY;
 		getAmas().data.minConfidence = Double.POSITIVE_INFINITY;
 
+		ArrayList<Context> contextsNeighborsByInfluence = new ArrayList<>();
 		for (Context ctxt : getAmas().getContexts()) {
 
 			if (ctxt.getConfidence() > getAmas().data.maxConfidence) {
@@ -517,20 +452,16 @@ public class Head extends AmoebaAgent {
 		// Test if there are surrounding contexts
 		boolean testSurroudingContext = false;
 
-		for (Percept pct : getAmas().getPercepts()) {
-
-			computeNearestContextsByPercept(pct);
-
-		}
+		HashMap<Percept, ContextPair<Context, Context>> sharedIncompetenceContextPairs = getSharedIncompetenceContextPair();
 
 		// displayContexts();
 
 		for (Percept pcpt : getAmas().getPercepts()) {
 
-			requestSurroundings.get(pcpt).print(pcpt);
 			if (sharedIncompetenceContextPairs.get(pcpt) != null) {
 				if (sharedIncompetenceContextPairs.get(pcpt).containTwoContexts()) {
 					testSurroudingContext = true;
+					break;
 				}
 			}
 
@@ -539,43 +470,40 @@ public class Head extends AmoebaAgent {
 		return testSurroudingContext;
 	}
 
-	private void diplayListRanges(ArrayList<Context> list, Percept prct, String range) {
-
-		System.out.print(range + " ranges list" + "  ");
-		for (Context ctxt : list) {
-			System.out.print(ctxt.getRanges().get(prct).getRange(range) + "  ");
+	private HashMap<Percept, ContextPair<Context, Context>> getSharedIncompetenceContextPair() {
+		HashMap<Percept, ContextPair<Context, Context>> sharedIncompetenceContextPairs = new HashMap<>();
+		
+		for (Percept pct : getAmas().getPercepts()) {
+			ContextPair<Context, Context> nearestContexts = computeNearestContextsByPercept(pct);
+			if (nearestContexts.getL() != null && nearestContexts.getR() != null) {
+				sharedIncompetenceContextPairs.put(pct, nearestContexts);
+			}
 		}
-		System.out.println(" ");
-
+		
+		return sharedIncompetenceContextPairs;
 	}
 
-	private void computeNearestContextsByPercept(Percept pct) {
-		ContextPair<Context, Context> nearestContexts = new ContextPair(null, null);
+	private ContextPair<Context, Context> computeNearestContextsByPercept(Percept pct) {
+		ContextPair<Context, Context> nearestContexts = new ContextPair<>(null, null);
 		boolean startNeighbor = false;
 		boolean endNeighbor = false;
 
 		ArrayList<Context> activatedContextInOtherPercepts = getAllActivatedContextsExeptForOnePercept(pct);
-
 		if (activatedContextInOtherPercepts.size() > 0) {
 
-
-
 			CustomComparator rangeStartComparator = new CustomComparator(pct, "start");
 			Collections.sort(activatedContextInOtherPercepts, rangeStartComparator);
-			// diplayListRanges(activatedContextInOtherPercepts, pct, "start");
 
 			for (Context ctxt : activatedContextInOtherPercepts) {
 				if (ctxt.getRanges().get(pct).getRange("start") > pct.getValue() && !startNeighbor) {
 					nearestContexts.setR(ctxt);
 					startNeighbor = true;
 				}
-
 			}
 
 			CustomComparator rangeEndComparator = new CustomComparator(pct, "end");
 			Collections.sort(activatedContextInOtherPercepts, rangeEndComparator);
 			Collections.reverse(activatedContextInOtherPercepts);
-			// diplayListRanges(activatedContextInOtherPercepts, pct, "end");
 
 			for (Context ctxt : activatedContextInOtherPercepts) {
 				if (ctxt.getRanges().get(pct).getRange("end") < pct.getValue() && !endNeighbor) {
@@ -584,65 +512,26 @@ public class Head extends AmoebaAgent {
 				}
 			}
 
-			// nearestContexts.print(pct);
-			requestSurroundings.put(pct, nearestContexts);
-
-			if (nearestContexts.getL() != null && nearestContexts.getR() != null) {
-				sharedIncompetenceContextPairs.put(pct, nearestContexts);
-			}
-		} else {
-
-		}
-
-	}
-
-	private ArrayList<Context> getAllActivatedContextsExeptForOnePercept(Percept onePercept) {
-
-		return partiallyActivatedContexts.get(onePercept);
-	}
-
-	private ArrayList<Context> getAllActivatedNeighborContextsExeptForOnePercept(Percept onePercept) {
-
-		return partialNeighborContexts.get(onePercept);
-	}
-
-	public void displayPartiallyActivatedContexts() {
-		//////// System.out.println("PARTIALLY ACTIVATED CONTEXTS");
-		for (Percept pct : partiallyActivatedContexts.keySet()) {
-			//// System.out.print(pct.getName() + " : ");
-			if (partiallyActivatedContexts.get(pct).size() > 0)
-				for (Context ctxt : partiallyActivatedContexts.get(pct)) {
-					//// System.out.print(ctxt.getName() + " ; ");
-				}
-			//////// System.out.println(" ");
 		}
+		return nearestContexts;
 	}
 
-	public void displayContexts() {
-		//////// System.out.println("CONTEXTS");
-		for (Context ctxt : getAmas().getContexts()) {
-			//// System.out.print(ctxt.getName() + " ; ");
-		}
-		//////// System.out.println(" ");
-	}
-
-	private Percept getDifferentPercept(Percept p) {
-		for (Percept pct : partiallyActivatedContexts.keySet()) {
-			if (p != pct) {
-				return pct;
-			}
-		}
-		return null;
-	}
-
-	private boolean contextActivateInOtherPerceptsThan(Context ctxt, Percept p1, Percept p2) {
-		boolean test = true;
-		for (Percept prct : partiallyActivatedContexts.keySet()) {
-			if (prct != p1 && prct != p2) {
-				test = test & partiallyActivatedContexts.get(prct).contains(ctxt);
+	/**
+	 * Return a list of contexts that have been activated by all percepts except a particular one.
+	 * @param pct
+	 * @return
+	 */
+	private ArrayList<Context> getAllActivatedContextsExeptForOnePercept(Percept pct) {
+		ArrayList<Percept> percepts = new ArrayList<>(getAmas().getPercepts());
+		percepts.remove(pct);
+		ArrayList<Context> ret = new ArrayList<>(getAmas().getContexts());
+		ret.removeIf(c -> {
+			for(Percept p : percepts) {
+				if(!p.activateContext(c)) return true;
 			}
-		}
-		return test;
+			return false;
+		});
+		return ret;
 	}
 
 	private void NCS_EndogenousCompetition() {
@@ -747,6 +636,7 @@ public class Head extends AmoebaAgent {
 		double smallestDistanceBetweenContexts = Double.POSITIVE_INFINITY;
 		double currentDistance;
 
+		HashMap<Percept, ContextPair<Context, Context>> sharedIncompetenceContextPairs = getSharedIncompetenceContextPair();
 		for (Percept pct : sharedIncompetenceContextPairs.keySet()) {
 			if (sharedIncompetenceContextPairs.get(pct) != null) {
 				if (sharedIncompetenceContextPairs.get(pct).containTwoContexts()) {
@@ -827,11 +717,6 @@ public class Head extends AmoebaAgent {
 
 	}
 
-	private void NCS_EndogenousIncompetence() {
-		// Extrapolation of contexts by creating twin contexts that will give the
-		// prediction
-	}
-
 	private void NCSDetection_Create_New_Context() {
 		/* Finally, head agent check the need for a new context agent */
 
@@ -978,27 +863,16 @@ public class Head extends AmoebaAgent {
 		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);
-							
 						}
 					}
-					
-
 				}
 				i++;
 			}
@@ -1006,100 +880,17 @@ 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)));
-			
 		}
 		
 	}
 
-	private void selfAnalysationOfContexts2() {
-
-		if (activatedContexts.size() > 1) {
-			selfAnalysationOfContextOnSeveralActivatedContexts();
-
-		} else if (activatedContexts.size() == 1) {
-
-//			double distanceToOracleForActivatedContext = activatedContexts.get(0).getLocalModel().distance(activatedContexts.get(0).getCurrentExperiment());
-//			//System.out.println(distanceToOracleForActivatedContext + " ******************************************************************DISTANCE TO MODEL : " );
-//			if(activatedNeighborsContexts.size()>1) {
-//				
-//				Context closestContextToOracle = null;
-//				double minDistanceToOraclePredictionInNeighbors = Double.POSITIVE_INFINITY;
-//				double currentDistanceToOraclePrediction = 0.0; 
-//				for(Context contextNeighbor : activatedNeighborsContexts) {
-//					if(contextNeighbor != activatedContexts.get(0)) {
-//						currentDistanceToOraclePrediction = contextNeighbor.getLocalModel().distance(contextNeighbor.getCurrentExperiment());
-//						if(currentDistanceToOraclePrediction<minDistanceToOraclePredictionInNeighbors) {
-//							minDistanceToOraclePredictionInNeighbors = currentDistanceToOraclePrediction;
-//							closestContextToOracle = contextNeighbor;
-//						} 
-//					}
-//				}
-//				
-//				if(minDistanceToOraclePredictionInNeighbors>distanceToOracleForActivatedContext) {
-//					//System.out.println("OLD COEFS " + activatedContexts.get(0).getLocalModel().coefsToString());
-//					activatedContexts.get(0).getLocalModel().updateModel(activatedContexts.get(0).getCurrentExperiment(),learningSpeed,numberOfPointsForRegression);
-//					//System.out.println("NEW COEFS " + activatedContexts.get(0).getLocalModel().coefsToString());
-//					
-//				}else {
-//					closestContextToOracle.solveNCS_IncompetentHead(this);
-//					//activatedContexts.get(0).setLocalModel(new LocalModelMillerRegression(world, activatedContexts.get(0), closestContextToOracle.getLocalModel().getCoef(),closestContextToOracle.getLocalModel().getFirstExperiments()));
-//					//LocalModelAgent remplacementModel = new LocalModelMillerRegression(world, activatedContexts.get(0), closestContextToOracle.getLocalModel().getCoef().clone());
-//					//activatedContexts.get(0).setLocalModel(remplacementModel);
-//					
-//				}
-//
-//				
-//			}else {
-//				//System.out.println("OLD COEFS " + activatedContexts.get(0).getLocalModel().coefsToString());
-//				activatedContexts.get(0).getLocalModel().updateModel(activatedContexts.get(0).getCurrentExperiment(),learningSpeed,numberOfPointsForRegression);
-//				//System.out.println("NEW COEFS " + activatedContexts.get(0).getLocalModel().coefsToString());
-//				
-//				
-//			}
-
-			selfAnalysationOfContextOnUniqueActivatedContext();
-
-		}
-
-		for (Context ctxt : activatedNeighborsContexts) {
-
-			if (!activatedContexts.contains(ctxt)) {
-				ctxt.NCSDetection_Uselessness();
-			}
-
-		}
-	}
-
-	private void selfAnalysationOfContexts3() {
-
-		if (activatedContexts.size() > 1) {
-
-			selfAnalysationOfContextOnSeveralActivatedContexts();
-
-		} else if (activatedContexts.size() == 1) {
-
-			selfAnalysationOfContextOnUniqueActivatedContext();
-
-		}
-
-		for (Context ctxt : activatedNeighborsContexts) {
-
-			if (!activatedContexts.contains(ctxt)) {
-				ctxt.NCSDetection_Uselessness();
-			}
-
-		}
-	}
-
 	private void selfAnalysationOfContexts4() {
 
 		getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------"
 				+ "---------------------------------------- SELF ANALYSIS OF CTXT")));
 		
 		double currentDistanceToOraclePrediction;
-		Context closestContextToOracle = null;
 		double minDistanceToOraclePrediction = Double.POSITIVE_INFINITY;
 
 		for (Context activatedContext : activatedContexts) {
@@ -1123,7 +914,6 @@ public class Head extends AmoebaAgent {
 
 			if (currentDistanceToOraclePrediction < minDistanceToOraclePrediction) {
 				minDistanceToOraclePrediction = currentDistanceToOraclePrediction;
-				closestContextToOracle = activatedContext;
 			}
 
 			if (!getAmas().data.contextNotFinished) {
@@ -1163,135 +953,6 @@ public class Head extends AmoebaAgent {
 		}
 	}
 
-	private void selfAnalysationOfContextOnUniqueActivatedContext() {
-
-		if (activatedNeighborsContexts.size() > 0) {
-			double distanceToOracleForActivatedContext = activatedContexts.get(0).getLocalModel()
-					.distance(activatedContexts.get(0).getCurrentExperiment());
-			Quadruplet<Context, Double, Context, Double> closestAndFarestContextsToPredictionWithDistance = closestAndFarestContextsToPrediction();
-
-			double distanceToMin = Math
-					.abs(distanceToOracleForActivatedContext - closestAndFarestContextsToPredictionWithDistance.getB());
-			double distanceToMax = Math
-					.abs(distanceToOracleForActivatedContext - closestAndFarestContextsToPredictionWithDistance.getD());
-
-			if (distanceToMin < distanceToMax) {
-				getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE",
-						activatedContexts.get(0).getName(), "" + distanceToOracleForActivatedContext)));
-				activatedContexts.get(0).getLocalModel().updateModel(activatedContexts.get(0).getCurrentExperiment(),
-						getAmas().data.learningSpeed);
-
-			}
-		} else {
-			getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(
-					Arrays.asList("MODEL DISTANCE", activatedContexts.get(0).getName(), "" + activatedContexts.get(0)
-							.getLocalModel().distance(activatedContexts.get(0).getCurrentExperiment()))));
-			activatedContexts.get(0).getLocalModel().updateModel(activatedContexts.get(0).getCurrentExperiment(),
-					getAmas().data.learningSpeed);
-		}
-
-		// world.trace(new ArrayList<String>(Arrays.asList("MODEL
-		// DISTANCE",activatedContexts.get(0).getName(),
-		// ""+activatedContexts.get(0).getLocalModel().distance(activatedContexts.get(0).getCurrentExperiment()))));
-		// activatedContexts.get(0).getLocalModel().updateModel(activatedContexts.get(0).getCurrentExperiment(),learningSpeed,numberOfPointsForRegression);
-		activatedContexts.get(0).analyzeResults3(this, activatedContexts.get(0));
-	}
-
-	private Pair<Context, Double> maxModelDistanceToOraclePredictionInNeighbors() {
-		Context farestContextToOracle = null;
-		double maxDistanceToOraclePredictionInNeighbors = Double.NEGATIVE_INFINITY;
-		double currentDistanceToOraclePrediction = 0.0;
-		for (Context contextNeighbor : activatedNeighborsContexts) {
-			if (contextNeighbor != activatedContexts.get(0)) {
-				currentDistanceToOraclePrediction = contextNeighbor.getLocalModel()
-						.distance(contextNeighbor.getCurrentExperiment());
-				getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE", contextNeighbor.getName(),
-						"" + currentDistanceToOraclePrediction)));
-				if (currentDistanceToOraclePrediction > maxDistanceToOraclePredictionInNeighbors) {
-					maxDistanceToOraclePredictionInNeighbors = currentDistanceToOraclePrediction;
-					farestContextToOracle = contextNeighbor;
-				}
-			}
-		}
-		return new Pair<Context, Double>(farestContextToOracle, maxDistanceToOraclePredictionInNeighbors);
-	}
-
-	private Pair<Context, Double> minModelDistanceToOraclePredictionInNeighbors() {
-		Context closestContextToOracle = null;
-		double minDistanceToOraclePredictionInNeighbors = Double.POSITIVE_INFINITY;
-		double currentDistanceToOraclePrediction = 0.0;
-		for (Context contextNeighbor : activatedNeighborsContexts) {
-			if (contextNeighbor != activatedContexts.get(0)) {
-				currentDistanceToOraclePrediction = contextNeighbor.getLocalModel()
-						.distance(contextNeighbor.getCurrentExperiment());
-				getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE", contextNeighbor.getName(),
-						"" + currentDistanceToOraclePrediction)));
-				if (currentDistanceToOraclePrediction < minDistanceToOraclePredictionInNeighbors) {
-					minDistanceToOraclePredictionInNeighbors = currentDistanceToOraclePrediction;
-					closestContextToOracle = contextNeighbor;
-				}
-			}
-		}
-		return new Pair<Context, Double>(closestContextToOracle, minDistanceToOraclePredictionInNeighbors);
-	}
-
-	private Quadruplet<Context, Double, Context, Double> closestAndFarestContextsToPrediction() {
-		Context farestContextToOracle = null;
-		double maxDistanceToOraclePredictionInNeighbors = Double.NEGATIVE_INFINITY;
-		Context closestContextToOracle = null;
-		double minDistanceToOraclePredictionInNeighbors = Double.POSITIVE_INFINITY;
-
-		double currentDistanceToOraclePrediction = 0.0;
-		for (Context contextNeighbor : activatedNeighborsContexts) {
-			if (contextNeighbor != activatedContexts.get(0)) {
-				currentDistanceToOraclePrediction = contextNeighbor.getLocalModel()
-						.distance(contextNeighbor.getCurrentExperiment());
-				getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE", contextNeighbor.getName(),
-						"" + currentDistanceToOraclePrediction)));
-				if (currentDistanceToOraclePrediction > maxDistanceToOraclePredictionInNeighbors) {
-					maxDistanceToOraclePredictionInNeighbors = currentDistanceToOraclePrediction;
-					farestContextToOracle = contextNeighbor;
-				}
-				if (currentDistanceToOraclePrediction < minDistanceToOraclePredictionInNeighbors) {
-					minDistanceToOraclePredictionInNeighbors = currentDistanceToOraclePrediction;
-					closestContextToOracle = contextNeighbor;
-				}
-			}
-		}
-		return new Quadruplet<Context, Double, Context, Double>(closestContextToOracle,
-				minDistanceToOraclePredictionInNeighbors, farestContextToOracle,
-				maxDistanceToOraclePredictionInNeighbors);
-	}
-
-	private void selfAnalysationOfContextOnSeveralActivatedContexts() {
-
-		Context closestContextToOracle = null;
-		double minDistanceToOraclePrediction = Double.POSITIVE_INFINITY;
-		double currentDistanceToOraclePrediction = 0.0;
-
-		for (Context activatedContext : activatedContexts) {
-			currentDistanceToOraclePrediction = activatedContext.getLocalModel()
-					.distance(activatedContext.getCurrentExperiment());
-
-			getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE", activatedContext.getName(),
-					"" + activatedContext.getLocalModel().distance(activatedContext.getCurrentExperiment()))));
-			if (currentDistanceToOraclePrediction < minDistanceToOraclePrediction) {
-				minDistanceToOraclePrediction = currentDistanceToOraclePrediction;
-				closestContextToOracle = activatedContext;
-			}
-
-		}
-
-		closestContextToOracle.getLocalModel().updateModel(closestContextToOracle.getCurrentExperiment(), getAmas().data.learningSpeed);
-
-		activatedContextsCopyForUpdates = new ArrayList<Context>(activatedContexts);
-		for (Context activatedContext : activatedContexts) {
-			activatedContext.analyzeResults3(this, closestContextToOracle);
-
-		}
-		activatedContexts = activatedContextsCopyForUpdates;
-	}
-
 	private void setNearestContextAsBestContext() {
 		Context nearestContext = this.getNearestContext(activatedNeighborsContexts);
 
@@ -1304,25 +965,6 @@ public class Head extends AmoebaAgent {
 		bestContext = nearestContext;
 	}
 
-	private void setNearestGoodContextAsBestContext() {
-		Context nearestContext = this.getNearestGoodContext(activatedNeighborsContexts);
-
-		if (nearestContext != null) {
-			getAmas().data.prediction = nearestContext.getActionProposal();
-		} else {
-			getAmas().data.prediction = 0.0;
-		}
-
-		bestContext = nearestContext;
-	}
-
-	/**
-	 * Endogenous feedback.
-	 */
-	private void endogenousFeedback() {
-		// bestContext.growRanges(this);
-	}
-
 	/**
 	 * Gets the nearest good context.
 	 *
@@ -1362,28 +1004,6 @@ public class Head extends AmoebaAgent {
 
 	}
 
-	/**
-	 * Gets the distance to nearest good context.
-	 *
-	 * @param allContext the all context
-	 * @return the distance to nearest good context
-	 */
-	private Pair<Context, Double> getNearestGoodContextWithDistance(ArrayList<Context> contextNeighbors) {
-		double d = Double.MAX_VALUE;
-		Context nearestGoodContext = null;
-		for (Context c : contextNeighbors) {
-			if (Math.abs((c.getActionProposal() - getAmas().data.oracleValue)) <= getAmas().data.predictionPerformance.getPerformanceIndicator()
-					&& c != newContext && !c.isDying()) {
-				if (getExternalDistanceToContext(c) < d) {
-					d = getExternalDistanceToContext(c);
-					nearestGoodContext = c;
-				}
-			}
-		}
-		return new Pair<Context, Double>(nearestGoodContext, d);
-
-	}
-	
 	private Pair<Context, Double> getbestContextInNeighborsWithDistanceToModel(ArrayList<Context> contextNeighbors) {
 		double d = Double.MAX_VALUE;
 		Context bestContextInNeighbors = null;
@@ -1462,19 +1082,6 @@ public class Head extends AmoebaAgent {
 		return d;
 	}
 
-	private double getDistanceToContext(Context context) {
-		double totalDistance = 0.0;
-		for (Percept p : getAmas().getPercepts()) {
-			double distance = context.distance(p, p.getValue());
-			if (distance > 0) {
-				totalDistance += distance;
-			}
-
-		}
-
-		return totalDistance;
-	}
-
 	/**
 	 * One of proposed context was good.
 	 *
@@ -1949,24 +1556,6 @@ public class Head extends AmoebaAgent {
 		getAmas().data.useOracle = !getAmas().data.useOracle;
 	}
 
-	/**
-	 * Gets the function selected.
-	 *
-	 * @return the function selected
-	 */
-	public String getFunctionSelected() {
-		return functionSelected;
-	}
-
-	/**
-	 * Sets the function selected.
-	 *
-	 * @param functionSelected the new function selected
-	 */
-	public void setFunctionSelected(String functionSelected) {
-		this.functionSelected = functionSelected;
-	}
-
 	/**
 	 * Gets the n propositions received.
 	 *
@@ -2074,86 +1663,6 @@ public class Head extends AmoebaAgent {
 		this.getAmas().data.prediction = prediction;
 	}
 
-	public ArrayList<Context> getPartiallyActivatedContexts(Percept pct) {
-		return partiallyActivatedContexts.get(pct);
-	}
-
-	public ArrayList<Context> getPartiallyActivatedNeighborContexts(Percept pct) {
-		return partialNeighborContexts.get(pct);
-	}
-
-	public HashMap<Percept, ContextPair<Context, Context>> getRequestSurroundings() {
-		return requestSurroundings;
-	}
-
-	public boolean requestSurroundingContains(Context ctxt) {
-
-		for (Percept pct : requestSurroundings.keySet()) {
-
-			if (requestSurroundings.get(pct).contains(ctxt)) {
-				return true;
-			}
-		}
-		return false;
-
-	}
-
-	public ArrayList<Context> getContextsInCompetition() {
-		return contextsInCompetition;
-	}
-
-	public Head clone() throws CloneNotSupportedException {
-		return (Head) super.clone();
-	}
-
-	public void addRequestNeighbor(Context ctxt) {
-		if (!activatedNeighborsContexts.contains(ctxt)) {
-
-			activatedNeighborsContexts.add(ctxt);
-		}
-	}
-
-	public void addActivatedContext(Context ctxt) {
-		if (!activatedContexts.contains(ctxt)) {
-			activatedContexts.add(ctxt);
-
-
-			for (Context cxt : activatedContexts) {
-
-			}
-		}
-	}
-
-	public void addActivatedContextCopy(Context ctxt) {
-		if (!activatedContextsCopyForUpdates.contains(ctxt)) {
-			activatedContextsCopyForUpdates.add(ctxt);
-
-
-			for (Context cxt : activatedContextsCopyForUpdates) {
-
-			}
-		}
-	}
-
-	public void removeActivatedContext(Context ctxt) {
-		if (activatedContexts.contains(ctxt)) {
-			activatedContexts.remove(ctxt);
-		}
-	}
-
-	public void removeActivatedContextCopy(Context ctxt) {
-		if (activatedContextsCopyForUpdates.contains(ctxt)) {
-			activatedContextsCopyForUpdates.remove(ctxt);
-		}
-	}
-
-	public void removeRequestNeighbor(Context ctxt) {
-		if (activatedNeighborsContexts.contains(ctxt)) {
-
-			activatedNeighborsContexts.remove(ctxt);
-		}
-	}
-
 	public ArrayList<Context> getActivatedNeighborsContexts() {
 		return activatedNeighborsContexts;
 	}
@@ -2162,34 +1671,9 @@ public class Head extends AmoebaAgent {
 		activatedNeighborsContexts = neighbors;
 	}
 
-
-	public ArrayList<Context> getContextNeighborsByInfluence() {
-		return contextsNeighborsByInfluence;
-	}
-
-	public void displayActivatedNeighborsContexts() {
-		for (Context ctxt : activatedNeighborsContexts) {
-
-		}
-	}
-
-	public void clearActivatedNeighborsContexts() {
-		activatedNeighborsContexts.clear();
-	}
-
-	public void clearContextdNeighborsByInfluence() {
-		contextsNeighborsByInfluence.clear();
-	}
-
 	public void clearAllUseableContextLists() {
 		activatedContexts.clear();
 		activatedNeighborsContexts.clear();
-		contextsNeighborsByInfluence.clear();
-		for (Percept pct : getAmas().getPercepts()) {
-			partiallyActivatedContexts.get(pct).clear();
-			partiallyActivatedContextInNeighbors.get(pct).clear();
-			partialNeighborContexts.get(pct).clear();
-		}
 	}
 
 	public Double getMaxRadiusForContextCreation(Percept pct) {
@@ -2370,21 +1854,6 @@ public class Head extends AmoebaAgent {
 		
 	}
 	
-	public void updatePartiallyActivatedNeighbors() {
-		
-		for(Percept pct: getAmas().getPercepts()) {
-			
-			pct.computeContextNeighborsValidity(activatedNeighborsContexts);
-			
-		}
-		
-		for(Context ctxt : activatedNeighborsContexts) {
-			
-			ctxt.computeContextNeighborsValidity();
-			
-		}
-	}
-	
 	public boolean isVoid(HashMap<Percept, Double> request) {
 		boolean test;
 		
@@ -2408,18 +1877,11 @@ public class Head extends AmoebaAgent {
 		int numberOfRegressions = 0;
 		if(activatedNeighborsContexts.size()>0) {
 			double meanRegressionPerformanceIndicator = 0.0;
-			
 			for(Context ctxt : activatedNeighborsContexts) {
-				
-
-				if(ctxt.regressionPerformance != null) {
 					meanRegressionPerformanceIndicator += ctxt.regressionPerformance.performanceIndicator;
 					numberOfRegressions+=1;
-				}
-				
-				
 			}
-			
+			assert numberOfRegressions != 0;
 			return meanRegressionPerformanceIndicator/numberOfRegressions;
 		}
 		else{
@@ -2427,16 +1889,8 @@ public class Head extends AmoebaAgent {
 		}
 		
 	}
-	
-	
-	
-
-	// -----------------
-	// AMOEBAonAMAK ---
-	// -----------------
 
 	public void proposition(Context c) {
-
 		activatedContexts.add(c);
 	}
 	
@@ -2446,19 +1900,8 @@ public class Head extends AmoebaAgent {
 		getAmas().data.maxConfidence = Double.NEGATIVE_INFINITY;
 		getAmas().data.minConfidence = Double.POSITIVE_INFINITY;
 
-		// getAmas().data.mappingPerformance.setPerformanceIndicator(world.getMappingErrorAllowed());//
-		// Math.pow(world.getMappingErrorAllowed(),
-		// world.getScheduler().getPercepts().size());
-
 		criticalities = new Criticalities(getAmas().data.numberOfCriticityValuesForAverage);
 		endogenousCriticalities = new Criticalities(getAmas().data.numberOfCriticityValuesForAverageforVizualisation);
 	}
-
-	public void addPercept(Percept pct) {
-		partiallyActivatedContextInNeighbors.put(pct, new ArrayList<Context>());
-		partiallyActivatedContexts.put(pct, new ArrayList<Context>());
-		partialNeighborContexts.put(pct, new ArrayList<Context>());
-		requestSurroundings.put(pct, new ContextPair<Context, Context>(null, null));
-		sharedIncompetenceContextPairs.put(pct, new ContextPair<Context, Context>(null, null));
-	}
+	
 }
diff --git a/AMOEBAonAMAK/src/agents/percept/Percept.java b/AMOEBAonAMAK/src/agents/percept/Percept.java
index 064969461e53732961f008123fc2106b850b5bfe..52c9a398ded9453bac8fb6692c977517f61b5050 100644
--- a/AMOEBAonAMAK/src/agents/percept/Percept.java
+++ b/AMOEBAonAMAK/src/agents/percept/Percept.java
@@ -53,8 +53,6 @@ public class Percept extends AmoebaAgent {
 		value = getAmas().getPerceptions(this.name);
 		ajustMinMax();
 		computeContextProjectionValidityOptimized();
-		//computeContextProjectionValidity();
-
 	}
 
 	public void computeContextProjectionValidity() {
@@ -124,7 +122,7 @@ public class Percept extends AmoebaAgent {
 		}
 		
 		for (Context c : contexts) {
-			if (contextProjections.get(c).contains(this.value)) {
+			if (activateContext(c)) {
 				validContextProjection.add(c);
 			}
 		} 
@@ -137,7 +135,7 @@ public class Percept extends AmoebaAgent {
 		}
 		
 		for (Context c : neighborsContexts) {
-			if(contextProjections.get(c).inNeighborhood()) {
+			if(inNeighborhood(c)) {
 				neighborContextProjection.add(c);
 			}
 		} 
@@ -145,6 +143,24 @@ public class Percept extends AmoebaAgent {
 		
 		logger().debug("CYCLE "+getAmas().getCycle(), "%s's valid contexts : %s", toString(), validContextProjection.toString());
 	}
+	
+	/**
+	 * Return true if the context is activated by this percept.
+	 * @param context
+	 * @return
+	 */
+	public boolean activateContext(Context context) {
+		return contextProjections.get(context).contains(this.value);
+	}
+	
+	/**
+	 * Return true if the context is in the neighborhood of this percept.
+	 * @param context
+	 * @return
+	 */
+	public boolean inNeighborhood(Context context) {
+		return contextProjections.get(context).inNeighborhood();
+	}
 
 
 	/**
diff --git a/AMOEBAonAMAK/src/experiments/F_XY_System.java b/AMOEBAonAMAK/src/experiments/F_XY_System.java
index 86a0d739f772a9e98e7c03d1aa7b10eaeb764f28..30f3fdfdf8fa9706fea2abee71c0a9307b06fc2d 100644
--- a/AMOEBAonAMAK/src/experiments/F_XY_System.java
+++ b/AMOEBAonAMAK/src/experiments/F_XY_System.java
@@ -48,7 +48,7 @@ public class F_XY_System implements StudiedSystem {
 
 		out.put("px0", x);
 		out.put("px1", y);
-		out.put("oracle", result);
+		out.put("oracle", 0.0);
 		return out;
 	}
 
diff --git a/AMOEBAonAMAK/src/experiments/MinimalMain.java b/AMOEBAonAMAK/src/experiments/MinimalMain.java
index 60218985a5ed9718f003c4cfe7f8cf21f96a65a2..b9b0bde35821831dfe658b762a50be32ceb0540a 100644
--- a/AMOEBAonAMAK/src/experiments/MinimalMain.java
+++ b/AMOEBAonAMAK/src/experiments/MinimalMain.java
@@ -1,12 +1,7 @@
 package experiments;
 
-import java.util.HashMap;
-
-import fr.irit.smac.amak.Configuration;
-import fr.irit.smac.amak.tools.Log;
 import kernel.AMOEBA;
 import kernel.StudiedSystem;
-import kernel.backup.SaveHelperDummy;
 
 /**
  * The most minimal main possible producing a functioning amoeba.
@@ -16,61 +11,12 @@ import kernel.backup.SaveHelperDummy;
 public class MinimalMain {
 
 	public static void main(String[] args) throws InterruptedException {
-		Configuration.commandLineMode = true;
-		Log.defaultMinLevel = Log.Level.INFORM;
 		// create a system to be studied
-		StudiedSystem studiedSystem = new NDimCube(50.0, 3);
+		StudiedSystem studiedSystem = new F_XY_System(50.0);
 		// create the amoeba
 		// Make sure the path to the config file is correct.
-		AMOEBA amoeba = new AMOEBA("resources/threeDimensionsLauncher.xml", studiedSystem);
-		amoeba.saver = new SaveHelperDummy();
+		AMOEBA amoeba = new AMOEBA("resources/twoDimensionsLauncher.xml", studiedSystem);
 		// a window should have appeared, allowing you to control and visualize the amoeba.
-		
-		Thread.sleep(5000);
-		
-		long start = System.currentTimeMillis();
-		long end = System.currentTimeMillis();
-		for(int i = 0; i < 10000; i++) {
-			studiedSystem.playOneStep();
-			amoeba.learn(studiedSystem.getOutput());
-			if(i%100 == 99) {
-				end = System.currentTimeMillis();
-				System.out.println("Time for 100 learn: "+(end-start)/1000.0);
-				start = System.currentTimeMillis();
-			}
-		}
-		
-		start = System.currentTimeMillis();
-		end = System.currentTimeMillis();
-		for(int i = 0; i < 1000; i++) {
-			studiedSystem.playOneStep();
-			amoeba.request(studiedSystem.getOutput());
-			if(i%100 == 99) {
-				end = System.currentTimeMillis();
-				System.out.println("Time for 100 request: "+(end-start)/1000.0);
-				start = System.currentTimeMillis();
-			}
-		}
-		
-		start = System.currentTimeMillis();
-		end = System.currentTimeMillis();
-		for(int i = 0; i < 1000; i++) {
-			studiedSystem.playOneStep();
-			HashMap<String, Double> req = studiedSystem.getOutput();
-			req.remove("px1");
-			req.remove("px2");
-			req.remove("px3");
-			req.remove("oracle");
-			amoeba.maximize(req);
-			if(i%100 == 99) {
-				end = System.currentTimeMillis();
-				System.out.println("Time for 100 maximize: "+(end-start)/1000.0);
-				start = System.currentTimeMillis();
-			}
-		}
-		
-		System.exit(0);
-		
 	}
 
 }
diff --git a/AMOEBAonAMAK/src/experiments/SimpleReinforcement.java b/AMOEBAonAMAK/src/experiments/SimpleReinforcement.java
index 75c015c32db16918c66f2de5589ce3cc4a12de1a..b63df76532b63de09980521021efc64b13d007eb 100644
--- a/AMOEBAonAMAK/src/experiments/SimpleReinforcement.java
+++ b/AMOEBAonAMAK/src/experiments/SimpleReinforcement.java
@@ -16,6 +16,14 @@ import utils.Pair;
 import utils.RandomUtils;
 import utils.XmlConfigGenerator;
 
+/**
+ * Train an amoeba on a simple reinforcement task.
+ * The goal of the task is to get to the center. When the position of the agent cross 0, it gets a reward of 100.
+ * The agent can only moves in 2 directions, of a distance of 1. Moving give a reward of -1.
+ * If the agent moves outside of the allowed range, it gets a reward of -100. 
+ * @author Hugo
+ *
+ */
 public class SimpleReinforcement {
 	
 	private Random rand = new Random();
@@ -46,7 +54,7 @@ public class SimpleReinforcement {
 		for(int i = 0; i < 10000; i++) {
 			state.remove("oracle");
 			HashMap<String, Double> action = amoeba.maximize(state);
-			if(r.nextDouble() < 0.1 || action.get("oracle").equals(Double.NEGATIVE_INFINITY) ) {
+			if(r.nextDouble() < 0.2 || action.get("oracle").equals(Double.NEGATIVE_INFINITY) ) {
 				System.out.println("Random action");
 				action.put("a1", (r.nextBoolean() ? 10.0 : -10.0));
 			}
@@ -96,7 +104,7 @@ public class SimpleReinforcement {
 		HashMap<String, Double> ret = new HashMap<>();
 		ret.put("p1", x);
 		ret.put("oracle", reward);
-		pos.move(x, 0);
+		pos.move(x+0.5, 0.5);
 		return ret;
 	}
 	
diff --git a/AMOEBAonAMAK/src/experiments/TestingMain.java b/AMOEBAonAMAK/src/experiments/TestingMain.java
index 20332e2005b0b34e1b3965b4469a2a1362c2ad39..55bfd61be6a785e91185c2cf2eff2c396e810a15 100644
--- a/AMOEBAonAMAK/src/experiments/TestingMain.java
+++ b/AMOEBAonAMAK/src/experiments/TestingMain.java
@@ -16,7 +16,7 @@ import kernel.backup.SaveHelperDummy;
 public class TestingMain {
 
 	public static void main(String[] args) throws InterruptedException {
-		Configuration.commandLineMode = true;
+		Configuration.commandLineMode = false;
 		Log.defaultMinLevel = Log.Level.INFORM;
 		// create a system to be studied
 		StudiedSystem studiedSystem = new NDimCube(50.0, 3);
@@ -30,7 +30,7 @@ public class TestingMain {
 		
 		long start = System.currentTimeMillis();
 		long end = System.currentTimeMillis();
-		for(int i = 0; i < 10000; i++) {
+		for(int i = 0; i < 1000; i++) {
 			studiedSystem.playOneStep();
 			amoeba.learn(studiedSystem.getOutput());
 			if(i%100 == 99) {
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index c24ccaa1065a4bfe73b2a10343315454805b0539..2e0310717c904b7ffee6afa26c57f1f89c95cb61 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -85,6 +85,14 @@ public class F_N_Launcher implements Serializable {
 //		}
 //		long end = System.currentTimeMillis();
 //		System.out.println("Done in : " + (end - start) );
+//		
+//		start = System.currentTimeMillis();
+//		for (int i = 0; i < nbCycle; ++i) {
+//			studiedSystem.playOneStep();
+//			amoeba.request(studiedSystem.getOutput());
+//		}
+//		end = System.currentTimeMillis();
+//		System.out.println("Done in : " + (end - start) );
 		
 		
 //		/* XP PIERRE */
diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java
index d47419a8d3ec4e08d1581f201026119c763c73c0..502a41fd835f1a65aaeb864a7585496afe3a1d58 100644
--- a/AMOEBAonAMAK/src/kernel/AMOEBA.java
+++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java
@@ -679,15 +679,6 @@ public class AMOEBA extends Amas<World> implements IAMOEBA {
 		alteredContexts.add(context);
 	}
 	
-	/**
-	 * Gets the altered contexts.
-	 *
-	 * @return the altered contexts
-	 */
-	public ArrayList<Context> getAlteredContexts() {
-		return alteredContexts;
-	}
-	
 	/**
 	 * Return the current set of valid contexts.
 	 *
@@ -777,7 +768,6 @@ public class AMOEBA extends Amas<World> implements IAMOEBA {
 	
 	public void addPercept(Percept pct) {
 		percepts = null;
-		head.addPercept(pct);
 	}
 	
 }