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