From 5cb47f1cbc5006f2f7453ea912090f7dcd1f35d5 Mon Sep 17 00:00:00 2001
From: BrunoDatoMeneses <bruno.dato.meneses@gmail.com>
Date: Thu, 9 Jan 2020 18:10:24 +0100
Subject: [PATCH] FIX: errors with context creation with neighbors

---
 AMOEBAonAMAK/src/agents/context/Context.java | 16 ++--
 AMOEBAonAMAK/src/agents/head/Head.java       | 93 ++++++++++++--------
 AMOEBAonAMAK/src/kernel/AmoebaData.java      |  7 +-
 3 files changed, 69 insertions(+), 47 deletions(-)

diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index 0fcecfa9..5d7db655 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -114,14 +114,14 @@ public class Context extends AmoebaAgent {
 			//TODO use neihbors sizes to define radiuses for creation !!!!!!!!!!!
 			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p);
 
-			if(getAmas().data.meanNeighborhoodRaduises != null) {
+			if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0) {
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().data.meanNeighborhoodRaduises.get(p).toString())));
-				r = new Range(this, p.getValue() - getAmas().data.meanNeighborhoodRaduises.get(p), p.getValue() + getAmas().data.meanNeighborhoodRaduises.get(p), 0, true, true, p, getAmas().data.meanNeighborhoodStartIncrements.get(p), getAmas().data.meanNeighborhoodEndIncrements.get(p));
+				.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() - getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p), p.getValue() + getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p), 0, true, true, p, getAmas().getHeadAgent().meanNeighborhoodStartIncrements.get(p), getAmas().getHeadAgent().meanNeighborhoodEndIncrements.get(p));
 			}else {
 				r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p);
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString())));
+				.trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString())));
 			}
 			
 
@@ -196,14 +196,14 @@ public class Context extends AmoebaAgent {
 			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p);
 			
 
-			if(getAmas().data.meanNeighborhoodRaduises != null) {
+			if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0) {
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().data.meanNeighborhoodRaduises.get(p).toString())));
-				r = new Range(this, p.getValue() - getAmas().data.meanNeighborhoodRaduises.get(p), p.getValue() + getAmas().data.meanNeighborhoodRaduises.get(p), 0, true, true, p, getAmas().data.meanNeighborhoodStartIncrements.get(p), getAmas().data.meanNeighborhoodEndIncrements.get(p));
+				.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() - getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p), p.getValue() + getAmas().getHeadAgent().meanNeighborhoodRaduises.get(p), 0, true, true, p, getAmas().getHeadAgent().meanNeighborhoodStartIncrements.get(p), getAmas().getHeadAgent().meanNeighborhoodEndIncrements.get(p));
 			}else {
 				r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p);
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString())));
+				.trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString())));
 			}
 
 			ranges.put(p, r);
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index d43646b7..3762dee3 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -40,7 +40,13 @@ public class Head extends AmoebaAgent {
 	public Criticalities endogenousCriticalities;
 
 	private ArrayList<Context> activatedContexts = new ArrayList<Context>();
-	private ArrayList<Context> activatedNeighborsContexts = new ArrayList<Context>();
+	public ArrayList<Context> activatedNeighborsContexts = new ArrayList<Context>();
+	
+	public Double meanNeighborhoodVolume;
+	public HashMap<Percept, Double> meanNeighborhoodRaduises;
+	public HashMap<Percept, Double> meanNeighborhoodStartIncrements;
+	public HashMap<Percept, Double> meanNeighborhoodEndIncrements;
+	
 
 	Queue<EndogenousRequest> endogenousRequests = new PriorityQueue<EndogenousRequest>(new Comparator<EndogenousRequest>(){
 		   public int compare(EndogenousRequest r1, EndogenousRequest r2) {
@@ -78,10 +84,11 @@ public class Head extends AmoebaAgent {
 	@Override
 	public void onAct() {
 		
-		getAmas().data.meanNeighborhoodVolume = null;
-		getAmas().data.meanNeighborhoodRaduises = null; 
-		getAmas().data.meanNeighborhoodEndIncrements = null; 
-		getAmas().data.meanNeighborhoodStartIncrements = null; 
+		
+		meanNeighborhoodVolume = null;
+		meanNeighborhoodRaduises = null; 
+		meanNeighborhoodEndIncrements = null; 
+		meanNeighborhoodStartIncrements = null; 
 		
 		getAmas().data.currentCriticalityPrediction = 0;
 		getAmas().data.currentCriticalityMapping = 0;
@@ -134,7 +141,7 @@ public class Head extends AmoebaAgent {
 			
 			ArrayList<Context> usedNeighbors = new ArrayList<Context>();
 			
-			if(activatedNeighborsContexts.size()>0) {
+			if(activatedNeighborsContexts.size()>0) { ////////////// TODO no good version
 				
 				meanNeighborsLastPredictions = 0.0;
 				for (Context ctxt : activatedNeighborsContexts) {
@@ -158,13 +165,13 @@ public class Head extends AmoebaAgent {
 				else {
 					meanNeighborsLastPredictions = null;
 				}
-				getAmas().data.meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size();
+				meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size();
 				
-				getAmas().data.meanNeighborhoodRaduises = new HashMap<Percept, Double>();
+				meanNeighborhoodRaduises = new HashMap<Percept, Double>();
 				for (Percept pct : getAmas().getPercepts()) {
-					getAmas().data.meanNeighborhoodRaduises.put(pct, neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size());
-					getAmas().data.meanNeighborhoodStartIncrements.put(pct, neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size());
-					getAmas().data.meanNeighborhoodEndIncrements.put(pct, neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size());
+					meanNeighborhoodRaduises.put(pct, neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size());
+					meanNeighborhoodStartIncrements.put(pct, neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size());
+					meanNeighborhoodEndIncrements.put(pct, neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size());
 				}
 				
 				
@@ -172,13 +179,13 @@ public class Head extends AmoebaAgent {
 			
 			
 			getAmas().getEnvironment()
-			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", getAmas().data.meanNeighborhoodVolume.toString())));
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", meanNeighborhoodVolume.toString())));
 			getAmas().getEnvironment()
-			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", getAmas().data.meanNeighborhoodRaduises.toString())));
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", meanNeighborhoodRaduises.toString())));
 			getAmas().getEnvironment()
-			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", getAmas().data.meanNeighborhoodStartIncrements.toString())));
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", meanNeighborhoodStartIncrements.toString())));
 			getAmas().getEnvironment()
-			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", getAmas().data.meanNeighborhoodEndIncrements.toString())));
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", meanNeighborhoodEndIncrements.toString())));
 			
 			if(meanNeighborsLastPredictions != null) {
 //				System.out.println("####################### NEIGHBORS #############################");
@@ -202,7 +209,10 @@ public class Head extends AmoebaAgent {
 			
 			
 			
-		}else {
+		}
+		else {
+			
+			
 			double neighborhoodVolumesSum = 0;
 			HashMap<Percept,Double> neighborhoodRangesSums = new HashMap<Percept,Double>();
 			HashMap<Percept,Double> neighborhoodStartIncrementSums = new HashMap<Percept,Double>();
@@ -217,42 +227,55 @@ public class Head extends AmoebaAgent {
 			
 			if(activatedNeighborsContexts.size()>0) {
 				
-		
+				System.out.println(activatedNeighborsContexts);
+				
 				for (Context ctxt : activatedNeighborsContexts) {
 					
 					neighborhoodVolumesSum += ctxt.getVolume();
+					
 					for (Percept pct : ctxt.getRanges().keySet()) {
-						neighborhoodRangesSums.put(pct, neighborhoodRangesSums.get(pct) + ctxt.getRanges().get(pct).getRadius());
-						neighborhoodStartIncrementSums.put(pct, neighborhoodStartIncrementSums.get(pct) + ctxt.getRanges().get(pct).getStartIncrement());
-						neighborhoodEndIncrementSums.put(pct, neighborhoodEndIncrementSums.get(pct) + ctxt.getRanges().get(pct).getEndIncrement());
+						Double oldRadiusSum = neighborhoodRangesSums.get(pct);
+						Double oldStartIncrSum = neighborhoodStartIncrementSums.get(pct);
+						Double oldEndIncrSum = neighborhoodEndIncrementSums.get(pct);
+						neighborhoodRangesSums.put(pct, oldRadiusSum + ctxt.getRanges().get(pct).getRadius());
+						neighborhoodStartIncrementSums.put(pct, oldStartIncrSum + ctxt.getRanges().get(pct).getStartIncrement());
+						neighborhoodEndIncrementSums.put(pct, oldEndIncrSum + ctxt.getRanges().get(pct).getEndIncrement());
 					}
 
 					
 				}
+		
+			meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size();
+			
+			meanNeighborhoodRaduises = new HashMap<Percept, Double>();
+			meanNeighborhoodStartIncrements = new HashMap<Percept, Double>();
+			meanNeighborhoodEndIncrements = new HashMap<Percept, Double>();
+			
+			
+			for (Percept pct : getAmas().getPercepts()) {
 				
-				getAmas().data.meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size();
 				
-				getAmas().data.meanNeighborhoodRaduises = new HashMap<Percept, Double>();
-				getAmas().data.meanNeighborhoodStartIncrements = new HashMap<Percept, Double>();
-				getAmas().data.meanNeighborhoodEndIncrements = new HashMap<Percept, Double>();
-				for (Percept pct : getAmas().getPercepts()) {
-					getAmas().data.meanNeighborhoodRaduises.put(pct, neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size());
-					getAmas().data.meanNeighborhoodStartIncrements.put(pct, neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size());
-					getAmas().data.meanNeighborhoodEndIncrements.put(pct, neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size());
-				}
+				
+				meanNeighborhoodRaduises.put(pct, neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size());
+				meanNeighborhoodStartIncrements.put(pct, neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size());
+				meanNeighborhoodEndIncrements.put(pct, neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size());
 				
 				
+			}
 				
+			
 				
 				
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", getAmas().data.meanNeighborhoodVolume.toString())));
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "size", ""+activatedNeighborsContexts.size())));
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", ""+meanNeighborhoodVolume)));
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", getAmas().data.meanNeighborhoodRaduises.toString())));
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", ""+meanNeighborhoodRaduises)));
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", getAmas().data.meanNeighborhoodStartIncrements.toString())));
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", ""+meanNeighborhoodStartIncrements)));
 				getAmas().getEnvironment()
-				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", getAmas().data.meanNeighborhoodEndIncrements.toString())));
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", ""+meanNeighborhoodEndIncrements)));
 			}
 			
 			
@@ -331,7 +354,7 @@ public class Head extends AmoebaAgent {
 		getAmas().data.executionTimes[5]=System.currentTimeMillis()- getAmas().data.executionTimes[5];
 
 		getAmas().data.executionTimes[6]=System.currentTimeMillis();
-		//NCSDetection_Context_Overmapping();
+		NCSDetection_Context_Overmapping();
 		getAmas().data.executionTimes[6]=System.currentTimeMillis()- getAmas().data.executionTimes[6];
 
 
@@ -341,7 +364,7 @@ public class Head extends AmoebaAgent {
 		getAmas().data.executionTimes[11]=System.currentTimeMillis()- getAmas().data.executionTimes[11];
 		
 		getAmas().data.executionTimes[12]=System.currentTimeMillis();
-		//NCSDetection_PotentialRequest();
+		NCSDetection_PotentialRequest();
 		getAmas().data.executionTimes[12]=System.currentTimeMillis()- getAmas().data.executionTimes[12];
 		
 		
diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java
index 4f885da6..449f4000 100644
--- a/AMOEBAonAMAK/src/kernel/AmoebaData.java
+++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java
@@ -1,8 +1,10 @@
 package kernel;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
 
+import agents.context.Context;
 import agents.head.DynamicPerformance;
 import agents.percept.Percept;
 /**
@@ -83,8 +85,5 @@ public class AmoebaData implements Serializable {
 	
 	public double averageRegressionPerformanceIndicator;
 	
-	public Double meanNeighborhoodVolume;
-	public HashMap<Percept, Double> meanNeighborhoodRaduises;
-	public HashMap<Percept, Double> meanNeighborhoodStartIncrements;
-	public HashMap<Percept, Double> meanNeighborhoodEndIncrements;
+	
 }
\ No newline at end of file
-- 
GitLab