diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java index a6cd34fb731bfcbf90e4ceb0f04a928f31d56d1d..9cf57cf509fc3d7f4aad60f2750594701635e15f 100644 --- a/AMOEBAonAMAK/src/agents/context/Context.java +++ b/AMOEBAonAMAK/src/agents/context/Context.java @@ -593,7 +593,24 @@ public class Context extends AmoebaAgent { HashMap<Percept, Double> request = boundsToRequest(bounds); if(request != null) { - return new EndogenousRequest(request, bounds, 7, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.OVERLAP); + + double currentDistanceToOraclePrediction = this.getLocalModel().distance(this.getCurrentExperiment()); + double otherContextDistanceToOraclePrediction = ctxt.getLocalModel().distance(ctxt.getCurrentExperiment()); + + Double averageDistanceToOraclePrediction = getAmas().getHeadAgent().getAverageRegressionPerformanceIndicator(); + Double distanceDifference = Math.abs(currentDistanceToOraclePrediction-otherContextDistanceToOraclePrediction); + + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>( Arrays.asList(this.getName(),"currentDistanceToOraclePrediction",""+ currentDistanceToOraclePrediction,"otherContextDistanceToOraclePrediction",""+ otherContextDistanceToOraclePrediction, "distanceDifference", ""+distanceDifference))); + + if(distanceDifference<averageDistanceToOraclePrediction) { + return new EndogenousRequest(request, bounds, 6, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.CONCURRENCE); + } + else { + return new EndogenousRequest(request, bounds, 7, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.CONFLICT); + } + + + } } else if(overlapCounts == getAmas().getPercepts().size()-1 && voidDistances.size() == 1 && getAmas().getCycle() > 750) { @@ -700,10 +717,13 @@ public class Context extends AmoebaAgent { //double minDistanceToOraclePrediction = Math.min(getAmas().getHeadAgent().getDistanceToRegressionAllowed(), getAmas().getHeadAgent().getDistanceToRegressionAllowed()); Double averageDistanceToOraclePrediction = getAmas().getHeadAgent().getAverageRegressionPerformanceIndicator(); - - if((currentDistanceToOraclePrediction<averageDistanceToOraclePrediction) && (otherContextDistanceToOraclePrediction<averageDistanceToOraclePrediction)) { + Double distanceDifference = Math.abs(currentDistanceToOraclePrediction-otherContextDistanceToOraclePrediction); + + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>( Arrays.asList(this.getName(),"currentDistanceToOraclePrediction",""+ currentDistanceToOraclePrediction,"otherContextDistanceToOraclePrediction",""+ otherContextDistanceToOraclePrediction, "distanceDifference", ""+distanceDifference))); + + if(distanceDifference<averageDistanceToOraclePrediction) { - getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>( Arrays.asList(this.getName(),"currentDistanceToOraclePrediction",""+ currentDistanceToOraclePrediction,"otherContextDistanceToOraclePrediction",""+ otherContextDistanceToOraclePrediction))); + for(Percept pct : ranges.keySet()) { diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index f754ed46322ad1fa2392af7602a0accde78e8304..261df1a11146fb554e063c0d72abb80bddd11757 100644 --- a/AMOEBAonAMAK/src/agents/head/Head.java +++ b/AMOEBAonAMAK/src/agents/head/Head.java @@ -89,6 +89,7 @@ public class Head extends AmoebaAgent { setContextFromPropositionWasSelected(false); getAmas().data.oldOracleValue = getAmas().data.oracleValue; getAmas().data.oracleValue = getAmas().getPerceptions("oracle"); + setAverageRegressionPerformanceIndicator(); /* The head memorize last used context agent */ lastUsedContext = bestContext; @@ -174,11 +175,18 @@ public class Head extends AmoebaAgent { getAmas().data.executionTimes[6]=System.currentTimeMillis()- getAmas().data.executionTimes[6]; - getAmas().data.executionTimes[7]=System.currentTimeMillis(); + getAmas().data.executionTimes[11]=System.currentTimeMillis(); NCSDetection_ChildContext(); + getAmas().data.executionTimes[11]=System.currentTimeMillis()- getAmas().data.executionTimes[11]; + getAmas().data.executionTimes[12]=System.currentTimeMillis(); NCSDetection_PotentialRequest(); + getAmas().data.executionTimes[12]=System.currentTimeMillis()- getAmas().data.executionTimes[12]; + + + + getAmas().data.executionTimes[7]=System.currentTimeMillis(); criticalities.addCriticality("spatialCriticality", (getMinMaxVolume() - getVolumeOfAllContexts()) / getMinMaxVolume()); @@ -235,12 +243,13 @@ public class Head extends AmoebaAgent { getAmas().data.executionTimes[7]=System.currentTimeMillis()- getAmas().data.executionTimes[7]; - for(int i = 0 ; i<20;i++) { getAmas().data.executionTimesSums[i] += getAmas().data.executionTimes[i]; } + + } public double getMinMaxVolume() { @@ -893,26 +902,28 @@ public class Head extends AmoebaAgent { double minDistanceToOraclePrediction = Double.POSITIVE_INFINITY; for (Context activatedContext : activatedContexts) { - currentDistanceToOraclePrediction = activatedContext.getLocalModel() - .distance(activatedContext.getCurrentExperiment()); - getAmas().data.distanceToRegression = currentDistanceToOraclePrediction; + currentDistanceToOraclePrediction = activatedContext.getLocalModel().distance(activatedContext.getCurrentExperiment()); + getAmas().data.contextNotFinished = false; getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE", activatedContext.getName(), "" + activatedContext.getLocalModel().distance(activatedContext.getCurrentExperiment())))); if (!activatedContext.getLocalModel().finishedFirstExperiments()) { + activatedContext.getLocalModel().updateModel(activatedContext.getCurrentExperiment(), getAmas().data.learningSpeed); getAmas().data.contextNotFinished = true; + } - else if (currentDistanceToOraclePrediction < getAverageRegressionPerformanceIndicator()) { //else if (currentDistanceToOraclePrediction < regressionPerformance.getPerformanceIndicator()) { + activatedContext.getLocalModel().updateModel(activatedContext.getCurrentExperiment(), getAmas().data.learningSpeed); } if (currentDistanceToOraclePrediction < minDistanceToOraclePrediction) { minDistanceToOraclePrediction = currentDistanceToOraclePrediction; + getAmas().data.distanceToRegression = minDistanceToOraclePrediction; } if (!getAmas().data.contextNotFinished) { @@ -932,6 +943,7 @@ public class Head extends AmoebaAgent { activatedContexts.get(i).criticalities.updateMeans(); if (activatedContexts.get(i).criticalities.getCriticalityMean("distanceToRegression") != null) { + activatedContexts.get(i).regressionPerformance.update(activatedContexts.get(i).criticalities.getCriticalityMean("distanceToRegression")); getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("UPDATE REGRESSION PERFORMANCE", activatedContexts.get(i).getName(), ""+activatedContexts.get(i).regressionPerformance.getPerformanceIndicator()))); } @@ -1835,7 +1847,7 @@ public class Head extends AmoebaAgent { EndogenousRequest currentRequest = itr.next(); - if(currentRequest.getType() == REQUEST.OVERLAP) { + if(currentRequest.getType() == REQUEST.CONFLICT || currentRequest.getType() == REQUEST.CONCURRENCE) { existingRequestTest = existingRequestTest || currentRequest.testIfContextsAlreadyAsked(request.getAskingContexts()); } @@ -1887,6 +1899,12 @@ public class Head extends AmoebaAgent { public Double getAverageRegressionPerformanceIndicator() { + return getAmas().data.averageRegressionPerformanceIndicator; + + } + + public void setAverageRegressionPerformanceIndicator() { + int numberOfRegressions = 0; if(activatedNeighborsContexts.size()>0) { double meanRegressionPerformanceIndicator = 0.0; @@ -1895,13 +1913,14 @@ public class Head extends AmoebaAgent { numberOfRegressions+=1; } assert numberOfRegressions != 0; - return meanRegressionPerformanceIndicator/numberOfRegressions; + getAmas().data.averageRegressionPerformanceIndicator = (meanRegressionPerformanceIndicator/numberOfRegressions > getAmas().data.initRegressionPerformance) ? meanRegressionPerformanceIndicator/numberOfRegressions : getAmas().data.initRegressionPerformance; } else{ - return getAmas().data.initRegressionPerformance; + getAmas().data.averageRegressionPerformanceIndicator = getAmas().data.initRegressionPerformance; } } + public void proposition(Context c) { activatedContexts.add(c); diff --git a/AMOEBAonAMAK/src/agents/head/REQUEST.java b/AMOEBAonAMAK/src/agents/head/REQUEST.java index 2cb7d78652523f7ce9f3d3fe3b9ed10f03cf4efe..64ec5f2d25528b862f3fb52151d431d68066335c 100644 --- a/AMOEBAonAMAK/src/agents/head/REQUEST.java +++ b/AMOEBAonAMAK/src/agents/head/REQUEST.java @@ -5,6 +5,8 @@ import java.io.Serializable; public enum REQUEST implements Serializable { OVERLAP, + CONFLICT, + CONCURRENCE, VOID, SELF diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java index 300f91f974a5129d9488e6b97388d84df20173ea..ffd17fe59ad4e7b8d2bcd7b5023e7057099d6127 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java @@ -31,7 +31,7 @@ public class F_N_Launcher implements Serializable { public static final double spaceSize = 50.0 ; public static final int nbOfModels = 3 ; public static final int normType = 2 ; - public static final boolean randomExploration = false; + public static final boolean randomExploration = true; public static final boolean limitedToSpaceZone = true; //public static final double mappingErrorAllowed = 0.07; // BIG SQUARE public static double mappingErrorAllowed = 0.03; // MULTI diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java index 2ad515d0aaeea48a41fd1ccc4c222f8d6bff8145..dd2b1e7a6e324d66aac411429f0a847ac00ce42b 100644 --- a/AMOEBAonAMAK/src/kernel/AMOEBA.java +++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java @@ -165,6 +165,8 @@ public class AMOEBA extends Amas<World> implements IAMOEBA { timeExecution.addData("BestContextInNeighbors", cycle, data.executionTimesSums[8], notify); timeExecution.addData("CreateContext", cycle, data.executionTimesSums[9], notify); timeExecution.addData("UpdateStatitics", cycle, data.executionTimesSums[10], notify); + timeExecution.addData("ChildContext", cycle, data.executionTimesSums[11], notify); + timeExecution.addData("PotentialRequest", cycle, data.executionTimesSums[12], notify); criticalities.addData("Prediction", cycle, data.evolutionCriticalityPrediction, notify); criticalities.addData("Mapping", cycle, data.evolutionCriticalityMapping, notify); diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java index d843af0d4cec13c5e5f121d0c9e9de0570364df9..5f2e57a82c17eef5f047bdf4a699585dd9f6b8a0 100644 --- a/AMOEBAonAMAK/src/kernel/AmoebaData.java +++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java @@ -78,4 +78,6 @@ public class AmoebaData implements Serializable { public double[] executionTimesSums = new double[20]; public double initRegressionPerformance = 1.0; + + public double averageRegressionPerformanceIndicator; } \ No newline at end of file diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java index 5fe709fea42dfd30530f773a93033cd64684e139..e248a189449055d43fff29bc5ac33ff3d1e90fdf 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.DEBUG; + public static TRACE_LEVEL minLevel = TRACE_LEVEL.ERROR; private AMOEBA amoeba;