From e2b05e2cc4e56b407662f19040405e6d974c5b1f Mon Sep 17 00:00:00 2001 From: BrunoDatoMeneses <bruno.dato.meneses@gmail.com> Date: Mon, 13 Jan 2020 18:27:29 +0100 Subject: [PATCH] ADD: volume for best context selection --- AMOEBAonAMAK/src/agents/context/Context.java | 12 +- AMOEBAonAMAK/src/agents/context/Range.java | 53 +++-- AMOEBAonAMAK/src/agents/head/Head.java | 235 ++++++++++--------- AMOEBAonAMAK/src/kernel/World.java | 2 +- 4 files changed, 162 insertions(+), 140 deletions(-) diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java index db891d06..7dcef4ea 100644 --- a/AMOEBAonAMAK/src/agents/context/Context.java +++ b/AMOEBAonAMAK/src/agents/context/Context.java @@ -119,7 +119,7 @@ public class Context extends AmoebaAgent { if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0) { getAmas().getEnvironment() .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)); + r = new Range(this, p.getValue() - getAmas().getHeadAgent().minMeanNeighborhoodRaduises, p.getValue() + getAmas().getHeadAgent().minMeanNeighborhoodRaduises, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); }else { r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p); getAmas().getEnvironment() @@ -201,7 +201,7 @@ public class Context extends AmoebaAgent { if(getAmas().getHeadAgent().activatedNeighborsContexts.size()>0) { getAmas().getEnvironment() .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)); + r = new Range(this, p.getValue() - getAmas().getHeadAgent().minMeanNeighborhoodRaduises, p.getValue() + getAmas().getHeadAgent().minMeanNeighborhoodRaduises, 0, true, true, p, getAmas().getHeadAgent().minMeanNeighborhoodStartIncrements, getAmas().getHeadAgent().minMeanNeighborhoodEndIncrements); }else { r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p); getAmas().getEnvironment() @@ -785,7 +785,7 @@ public class Context extends AmoebaAgent { this.getRanges().get(pct).setStart(Math.min(this.getRanges().get(pct).getStart(), fusionContext.getRanges().get(pct).getStart())); } - this.setConfidence(Math.max(this.getConfidence(), fusionContext.getConfidence())); + this.setConfidence(2*Math.max(this.getConfidence(), fusionContext.getConfidence())); regressionPerformance.setPerformanceIndicator(Math.max(this.regressionPerformance.getPerformanceIndicator(), fusionContext.regressionPerformance.getPerformanceIndicator())); @@ -889,7 +889,7 @@ public class Context extends AmoebaAgent { // ranges.get(p).adapt(p.getValue()); // } - ranges.get(p).adapt(p.getValue()); + ranges.get(p).adapt(p.getValue(), false, null); // if(perceptForAdapatationAndOverlapingContext.getB()!=null) { // if(testIfOtherContextShouldFinalyShrink(perceptForAdapatationAndOverlapingContext.getB(), perceptForAdapatationAndOverlapingContext.getA())){ @@ -1220,7 +1220,7 @@ public class Context extends AmoebaAgent { getEnvironment().trace(TRACE_LEVEL.NCS, new ArrayList<String>(Arrays.asList(this.getName(), "CONTAINED", ""+contain))); if (!contain && !fusionned) { if(ranges.get(pct).getLenght()<pct.getMappingErrorAllowedMax()) { - ranges.get(pct).adapt(pct.getValue()); + ranges.get(pct).adapt(pct.getValue(), false, null); } //ranges.get(pct).extend(pct.getValue(), pct); @@ -1245,7 +1245,7 @@ public class Context extends AmoebaAgent { } else { - ranges.get(perceptWithBiggerImpactOnOverlap).adapt(perceptWithBiggerImpactOnOverlap.getValue()); + ranges.get(perceptWithBiggerImpactOnOverlap).adapt(perceptWithBiggerImpactOnOverlap.getValue(), true, bestContext); } } diff --git a/AMOEBAonAMAK/src/agents/context/Range.java b/AMOEBAonAMAK/src/agents/context/Range.java index a40fd60b..25ba066f 100644 --- a/AMOEBAonAMAK/src/agents/context/Range.java +++ b/AMOEBAonAMAK/src/agents/context/Range.java @@ -217,12 +217,12 @@ public class Range implements Serializable, Comparable, Cloneable { * @param oracleValue the oracle value * @param p the p */ - public void adapt(Double oracleValue, double increment) { + public void adapt(Double oracleValue, double increment, boolean isOverlap, Context bestContext) { if (!isPerceptEnum()) { double minIncrement = Math.min(increment, getIncrement()); - staticAdapt(oracleValue, minIncrement); + staticAdapt(oracleValue, minIncrement, isOverlap, bestContext); // adaptUsingAVT(c, oracleValue); // adaptWithoutAVT(c, oracleValue); @@ -235,10 +235,10 @@ public class Range implements Serializable, Comparable, Cloneable { } } - public void adapt(Double oracleValue) { + public void adapt(Double oracleValue, boolean isOverlap, Context bestContext) { if (!isPerceptEnum()) { - staticAdapt(oracleValue, getIncrement()); + staticAdapt(oracleValue, getIncrement(), isOverlap, bestContext); // adaptUsingAVT(c, oracleValue); // adaptWithoutAVT(c, oracleValue); @@ -250,6 +250,8 @@ public class Range implements Serializable, Comparable, Cloneable { // } } } + + /** * Adapt without AVT. @@ -310,11 +312,11 @@ public class Range implements Serializable, Comparable, Cloneable { } - private void staticAdapt(double oracleValue, double increment) { + private void staticAdapt(double oracleValue, double increment, boolean isOverlap, Context bestContext) { if (Math.abs(end - oracleValue) < Math.abs(oracleValue - start)) { - adaptEnd(oracleValue, increment); + adaptEnd(oracleValue, increment, isOverlap, bestContext); } else { - adaptStart(oracleValue, increment); + adaptStart(oracleValue, increment, isOverlap, bestContext); } } @@ -399,15 +401,15 @@ public class Range implements Serializable, Comparable, Cloneable { } - private void adaptEnd(double oracleValue, double increment) { + private void adaptEnd(double oracleValue, double increment, boolean isOverlap, Context bestContext) { world.trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("INCREMENT ON END ADAPT", context.getName(), percept.getName(), "" + increment ))); - classicEndAdapt(oracleValue, increment); + classicEndAdapt(oracleValue, increment, isOverlap, bestContext); // adaptEndWithSplitting(oracleValue, increment); } - private void classicEndAdapt(double oracleValue, double increment) { + private void classicEndAdapt(double oracleValue, double increment, boolean isOverlap, Context bestContext) { if (!(contains(oracleValue) == 0.0)) { // value not contained --> end range will grow (growing direction = 1) if (lastEndDirection == -1) { // opposite direction -> negative feedback @@ -424,7 +426,10 @@ public class Range implements Serializable, Comparable, Cloneable { // endIncrement *=2; } + this.setEnd(end + endIncrement); + + } else { // value contained --> end range will shrink (shrinking direction = -1) if (lastEndDirection == 1) { // opposite direction -> negative feedback @@ -441,7 +446,12 @@ public class Range implements Serializable, Comparable, Cloneable { // endIncrement *=2; } - this.setEnd(end - endIncrement); + if(isOverlap) { + this.setEnd(bestContext.getRanges().get(this.percept).getStart()); + }else { + this.setEnd(end - endIncrement); + } + } @@ -570,16 +580,16 @@ public class Range implements Serializable, Comparable, Cloneable { } - private void adaptStart(double oracleValue, double increment) { + private void adaptStart(double oracleValue, double increment, boolean isOverlap, Context bestContext) { world.trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("INCREMENT ON END ADAPT", context.getName(), percept.getName(), "" + increment ))); - classicStartAdapt(oracleValue, increment); + classicStartAdapt(oracleValue, increment, isOverlap, bestContext); // adaptStartWithSplitting(oracleValue, increment); } - private void classicStartAdapt(double oracleValue, double increment) { + private void classicStartAdapt(double oracleValue, double increment, boolean isOverlap, Context bestContext) { if (!(contains(oracleValue) == 0.0)) { if (lastStartDirection == -1) { @@ -635,7 +645,12 @@ public class Range implements Serializable, Comparable, Cloneable { // startIncrement // ); - this.setStart(start + startIncrement); + + if(isOverlap) { + this.setStart(bestContext.getRanges().get(this.percept).getEnd()); + }else { + this.setStart(start + startIncrement); + } } // this.setStart(start + getIncrementDependingOnNeighboorDistances("start")); @@ -1022,16 +1037,16 @@ public class Range implements Serializable, Comparable, Cloneable { if (overlapDistance(overlappingContextRanges) > nonOverlapDistance(overlappingContextRanges)) { if (Math.abs(end - border) > Math.abs(border - start)) { - adaptEnd(border, increment); + adaptEnd(border, increment, false, null); } else { - adaptStart(border, increment); + adaptStart(border, increment, false, null); } } else { if (Math.abs(end - border) < Math.abs(border - start)) { - adaptEnd(border, increment); + adaptEnd(border, increment, false, null); } else { - adaptStart(border, increment); + adaptStart(border, increment, false, null); } } diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index 154f21ab..2a82381f 100644 --- a/AMOEBAonAMAK/src/agents/head/Head.java +++ b/AMOEBAonAMAK/src/agents/head/Head.java @@ -47,6 +47,10 @@ public class Head extends AmoebaAgent { public HashMap<Percept, Double> meanNeighborhoodStartIncrements; public HashMap<Percept, Double> meanNeighborhoodEndIncrements; + public Double minMeanNeighborhoodRaduises = null; + public Double minMeanNeighborhoodStartIncrements = null; + public Double minMeanNeighborhoodEndIncrements = null; + Queue<EndogenousRequest> endogenousRequests = new PriorityQueue<EndogenousRequest>(new Comparator<EndogenousRequest>(){ public int compare(EndogenousRequest r1, EndogenousRequest r2) { @@ -90,6 +94,10 @@ public class Head extends AmoebaAgent { meanNeighborhoodEndIncrements = null; meanNeighborhoodStartIncrements = null; + minMeanNeighborhoodRaduises = Double.POSITIVE_INFINITY; + minMeanNeighborhoodStartIncrements = Double.POSITIVE_INFINITY; + minMeanNeighborhoodEndIncrements = Double.POSITIVE_INFINITY; + getAmas().data.currentCriticalityPrediction = 0; getAmas().data.currentCriticalityMapping = 0; getAmas().data.currentCriticalityConfidence = 0; @@ -108,6 +116,97 @@ public class Head extends AmoebaAgent { /* The head memorize last used context agent */ lastUsedContext = bestContext; bestContext = null; + + /* Neighbors */ + + + double neighborhoodVolumesSum = 0; + HashMap<Percept,Double> neighborhoodRangesSums = new HashMap<Percept,Double>(); + HashMap<Percept,Double> neighborhoodStartIncrementSums = new HashMap<Percept,Double>(); + HashMap<Percept,Double> neighborhoodEndIncrementSums = new HashMap<Percept,Double>(); + for (Percept pct : getAmas().getPercepts()) { + neighborhoodRangesSums.put(pct, 0.0); + neighborhoodStartIncrementSums.put(pct, 0.0); + neighborhoodEndIncrementSums.put(pct, 0.0); + } + + + + if(activatedNeighborsContexts.size()>0) { + + System.out.println(activatedNeighborsContexts); + + for (Context ctxt : activatedNeighborsContexts) { + + neighborhoodVolumesSum += ctxt.getVolume(); + + for (Percept pct : ctxt.getRanges().keySet()) { + 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()) { + + + double meanRadius = neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size(); + double meanStartIncrement = neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size(); + double meanEndIncrement = neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size(); + meanNeighborhoodRaduises.put(pct, meanRadius); + meanNeighborhoodStartIncrements.put(pct, meanStartIncrement); + meanNeighborhoodEndIncrements.put(pct, meanEndIncrement); + + if(meanRadius < minMeanNeighborhoodRaduises) { + minMeanNeighborhoodRaduises = meanRadius; + } + if(meanStartIncrement < minMeanNeighborhoodStartIncrements) { + minMeanNeighborhoodStartIncrements = meanStartIncrement; + } + if(meanEndIncrement < minMeanNeighborhoodEndIncrements) { + minMeanNeighborhoodEndIncrements = meanEndIncrement; + } + + + } + + + + + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "size", ""+activatedNeighborsContexts.size()))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", ""+meanNeighborhoodVolume))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", ""+meanNeighborhoodRaduises))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", ""+meanNeighborhoodStartIncrements))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", ""+meanNeighborhoodEndIncrements))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "minMeanNeighborhoodRaduises", ""+minMeanNeighborhoodRaduises))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "minMeanNeighborhoodStartIncrements", ""+minMeanNeighborhoodStartIncrements))); + getAmas().getEnvironment() + .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "minMeanNeighborhoodEndIncrements", ""+minMeanNeighborhoodEndIncrements))); + } + + + + + if (getAmas().data.useOracle) { playWithOracle(); @@ -128,30 +227,19 @@ public class Head extends AmoebaAgent { int nb=0; Double meanNeighborsLastPredictions = null; - double neighborhoodVolumesSum = 0; - HashMap<Percept,Double> neighborhoodRangesSums = new HashMap<Percept,Double>(); - HashMap<Percept,Double> neighborhoodStartIncrementSums = new HashMap<Percept,Double>(); - HashMap<Percept,Double> neighborhoodEndIncrementSums = new HashMap<Percept,Double>(); - for (Percept pct : getAmas().getPercepts()) { - neighborhoodRangesSums.put(pct, 0.0); - neighborhoodStartIncrementSums.put(pct, 0.0); - neighborhoodEndIncrementSums.put(pct, 0.0); - } + + + ArrayList<Context> usedNeighbors = new ArrayList<Context>(); - if(activatedNeighborsContexts.size()>0) { ////////////// TODO no good version + if(activatedNeighborsContexts.size()>0) { meanNeighborsLastPredictions = 0.0; 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()); - } + if(ctxt.lastPrediction != null) { usedNeighbors.add(ctxt); @@ -165,27 +253,16 @@ public class Head extends AmoebaAgent { else { meanNeighborsLastPredictions = null; } - meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size(); - meanNeighborhoodRaduises = new HashMap<Percept, Double>(); - for (Percept pct : getAmas().getPercepts()) { - 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", meanNeighborhoodVolume.toString()))); - getAmas().getEnvironment() - .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", meanNeighborhoodStartIncrements.toString()))); - getAmas().getEnvironment() - .trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", meanNeighborhoodEndIncrements.toString()))); + if(meanNeighborsLastPredictions != null) { // System.out.println("####################### NEIGHBORS #############################"); @@ -210,78 +287,7 @@ public class Head extends AmoebaAgent { } - else { - - - double neighborhoodVolumesSum = 0; - HashMap<Percept,Double> neighborhoodRangesSums = new HashMap<Percept,Double>(); - HashMap<Percept,Double> neighborhoodStartIncrementSums = new HashMap<Percept,Double>(); - HashMap<Percept,Double> neighborhoodEndIncrementSums = new HashMap<Percept,Double>(); - for (Percept pct : getAmas().getPercepts()) { - neighborhoodRangesSums.put(pct, 0.0); - neighborhoodStartIncrementSums.put(pct, 0.0); - neighborhoodEndIncrementSums.put(pct, 0.0); - } - - - - if(activatedNeighborsContexts.size()>0) { - - System.out.println(activatedNeighborsContexts); - - for (Context ctxt : activatedNeighborsContexts) { - - neighborhoodVolumesSum += ctxt.getVolume(); - - for (Percept pct : ctxt.getRanges().keySet()) { - 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()) { - - - - 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.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "size", ""+activatedNeighborsContexts.size()))); - getAmas().getEnvironment() - .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", ""+meanNeighborhoodVolume))); - getAmas().getEnvironment() - .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", ""+meanNeighborhoodRaduises))); - getAmas().getEnvironment() - .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", ""+meanNeighborhoodStartIncrements))); - getAmas().getEnvironment() - .trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", ""+meanNeighborhoodEndIncrements))); - } - - - - - } @@ -295,9 +301,9 @@ public class Head extends AmoebaAgent { + "---------------------------------------- PLAY WITH ORACLE"))); if (activatedContexts.size() > 0) { - //selectBestContext(); // using highest confidence - selectBestContextWithDistanceToModel(); // using closest distance - // selectBestContextWithDistanceToModel(); + //selectBestContextWithConfidenceAndVolume(); // using highest confidence and volume + selectBestContextWithDistanceToModelAndVolume(); // using closest distance and volume + } else { bestContext = lastUsedContext; } @@ -494,7 +500,7 @@ public class Head extends AmoebaAgent { logger().debug("HEAD without oracle", "Nombre de contextes activés: " + activatedContexts.size()); - selectBestContext(); + selectBestContextWithConfidenceAndVolume(); if (bestContext != null) { getAmas().data.noBestContext = false; getAmas().data.prediction = bestContext.getActionProposal(); @@ -1536,7 +1542,7 @@ public class Head extends AmoebaAgent { /** * Select best context. */ - private void selectBestContext() { + private void selectBestContextWithConfidenceAndVolume() { if(activatedContexts != null && !activatedContexts.isEmpty()) { Context bc; @@ -1544,9 +1550,10 @@ public class Head extends AmoebaAgent { double currentConfidence = bc.getConfidence(); for (Context context : activatedContexts) { - if (context.getConfidence() > currentConfidence) { + double confidenceWithVolume = context.getConfidence()*context.getVolume(); + if (confidenceWithVolume > currentConfidence) { bc = context; - currentConfidence = bc.getConfidence(); + currentConfidence = confidenceWithVolume; } } bestContext = bc; @@ -1557,20 +1564,20 @@ public class Head extends AmoebaAgent { - private void selectBestContextWithDistanceToModel() { + private void selectBestContextWithDistanceToModelAndVolume() { Context bc; bc = activatedContexts.get(0); double distanceToModel = bc.getLocalModel().distance(bc.getCurrentExperiment()); - double currentDistanceToModel; + double currentDistanceToModelWithVolume; for (Context context : activatedContexts) { - currentDistanceToModel = context.getLocalModel().distance(context.getCurrentExperiment()); - if (currentDistanceToModel < distanceToModel) { + currentDistanceToModelWithVolume = context.getLocalModel().distance(context.getCurrentExperiment())/context.getVolume(); + if (currentDistanceToModelWithVolume < distanceToModel) { bc = context; - distanceToModel = currentDistanceToModel; + distanceToModel = currentDistanceToModelWithVolume; } } bestContext = bc; diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java index c065a4d4..5fe709fe 100644 --- a/AMOEBAonAMAK/src/kernel/World.java +++ b/AMOEBAonAMAK/src/kernel/World.java @@ -34,7 +34,7 @@ public class World extends Environment { - public static TRACE_LEVEL minLevel = TRACE_LEVEL.INFORM; + public static TRACE_LEVEL minLevel = TRACE_LEVEL.DEBUG; private AMOEBA amoeba; -- GitLab