diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java index 66e86ac3836260b524b912ec2e61fb6c4c60e658..a6cd34fb731bfcbf90e4ceb0f04a928f31d56d1d 100644 --- a/AMOEBAonAMAK/src/agents/context/Context.java +++ b/AMOEBAonAMAK/src/agents/context/Context.java @@ -108,7 +108,8 @@ public class Context extends AmoebaAgent { for (Percept p : var) { Range r; - Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(p); + //Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(p); + Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p); r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p); @@ -122,7 +123,7 @@ public class Context extends AmoebaAgent { p.addContextProjection(this); } - expand(); + //expand(); localModel = getAmas().buildLocalModel(this); firstPoint.setOracleProposition(getAmas().getHeadAgent().getOracleValue()); @@ -181,7 +182,9 @@ public class Context extends AmoebaAgent { ArrayList<Percept> var = getAmas().getPercepts(); for (Percept v : var) { Range r; - Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(v); + //Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(v); + Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(v); + r = new Range(this, v.getValue() - radiuses.getA(), v.getValue() + radiuses.getB(), 0, true, true, v); @@ -193,7 +196,7 @@ public class Context extends AmoebaAgent { v.addContextProjection(this);; } - expand(); + //expand(); this.confidence = bestNearestContext.confidence; if (bestNearestContext.getLocalModel().getType() == TypeLocalModel.MILLER_REGRESSION) { @@ -562,7 +565,7 @@ public class Context extends AmoebaAgent { for (Percept pct : getAmas().getPercepts()) { currentDistance = this.distance(ctxt, pct); - if(currentDistance<-pct.getMappingErrorAllowedMin() && getAmas().getCycle()>1000) { + if(currentDistance<-pct.getMappingErrorAllowedMin() && getAmas().getCycle()>500) { getEnvironment().trace(TRACE_LEVEL.DEBUG,new ArrayList<String>(Arrays.asList("OVERLAP",pct.getName(), ""+this,""+ctxt)) ); overlapCounts+=1; overlapDistances.put(pct, Math.abs(currentDistance)); @@ -572,7 +575,7 @@ public class Context extends AmoebaAgent { } - if (currentDistance > pct.getMappingErrorAllowedMin() && getAmas().getCycle()>2000) { + if (currentDistance > pct.getMappingErrorAllowedMin() && getAmas().getCycle()>1000) { getEnvironment().trace(TRACE_LEVEL.DEBUG,new ArrayList<String>(Arrays.asList("VOID",pct.getName(), ""+this,""+ctxt, "distance", ""+currentDistance)) ); voidDistances.put(pct, currentDistance); bounds.put(pct, this.voidBounds(ctxt, pct)); @@ -584,7 +587,7 @@ public class Context extends AmoebaAgent { } - if (overlapCounts == getAmas().getPercepts().size()) { + if (overlapCounts == getAmas().getPercepts().size() && getAmas().getCycle() > 500) { getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList(getAmas().getPercepts().size() + "OVERLAPS", ""+this,""+ctxt)) ); @@ -593,14 +596,14 @@ public class Context extends AmoebaAgent { return new EndogenousRequest(request, bounds, 7, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.OVERLAP); } } - else if(overlapCounts == getAmas().getPercepts().size()-1 && voidDistances.size() == 1) { + else if(overlapCounts == getAmas().getPercepts().size()-1 && voidDistances.size() == 1 && getAmas().getCycle() > 750) { getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("VOID", ""+this,""+ctxt)) ); HashMap<Percept, Double> request = boundsToRequest(bounds); if(request != null) { - if(getAmas().getHeadAgent().isVoid(request)) { + if(getAmas().getHeadAgent().isRealVoid(request)) { return new EndogenousRequest(request, bounds, 5, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.VOID); } } diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java index d07ae056426db010088f33f0bf74e9bb331f4b79..f754ed46322ad1fa2392af7602a0accde78e8304 100644 --- a/AMOEBAonAMAK/src/agents/head/Head.java +++ b/AMOEBAonAMAK/src/agents/head/Head.java @@ -107,9 +107,9 @@ public class Head extends AmoebaAgent { } private void playWithOracle() { - + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("\n\n"))); getAmas().data.executionTimes[0]=System.currentTimeMillis(); - getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("\n------------------------------------------------------------------------------------" + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------" + "---------------------------------------- PLAY WITH ORACLE"))); if (activatedContexts.size() > 0) { @@ -1693,6 +1693,14 @@ public class Head extends AmoebaAgent { } + + public Pair<Double, Double> getRadiusesForContextCreation(Percept pct) { + return new Pair<Double, Double>( + pct.getRadiusContextForCreation(), + pct.getRadiusContextForCreation()); + } + + public Pair<Double, Double> getMaxRadiusesForContextCreation(Percept pct) { // Pair<Double, Double> maxRadiuses = new Pair<Double, Double>( // Math.min(pct.getRadiusContextForCreation(), Math.abs(pct.getMin() - pct.getValue())), @@ -1853,15 +1861,21 @@ public class Head extends AmoebaAgent { } - public boolean isVoid(HashMap<Percept, Double> request) { + public boolean isRealVoid(HashMap<Percept, Double> request) { boolean test; for(Context ctxt : activatedNeighborsContexts) { + + test = true; for(Percept pct : getAmas().getPercepts()) { - test = test && ctxt.getRanges().get(pct).contains2(request.get(pct)); +// test = test && ctxt.getRanges().get(pct).contains2(request.get(pct)); + test = test && ctxt.getRanges().get(pct).contains(request.get(pct), pct.getMappingErrorAllowedMin()); } + + getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("IS REAL VOID",ctxt.getName(), "-->", ""+!test))); + if(test) { return false; } diff --git a/AMOEBAonAMAK/src/agents/percept/Percept.java b/AMOEBAonAMAK/src/agents/percept/Percept.java index fc6b22bb567c2e6d654a242e61674138076be6de..2820e695eecb8c41accb4e9fb7d4b2a1d2ed68ee 100644 --- a/AMOEBAonAMAK/src/agents/percept/Percept.java +++ b/AMOEBAonAMAK/src/agents/percept/Percept.java @@ -23,8 +23,8 @@ public class Percept extends AmoebaAgent { private HashSet<Context> validContextProjection = new HashSet<Context>(); private HashSet<Context> neighborContextProjection = new HashSet<Context>(); - private double min = Double.MAX_VALUE; - private double max = Double.MIN_VALUE; + private double min = Double.POSITIVE_INFINITY; + private double max = Double.NEGATIVE_INFINITY; private double value; diff --git a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java index 3198f183a3be69539d05feb8f83773625927ce37..099acfb8fc051ddd4d8bdc9e921b199dc79844f7 100644 --- a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java +++ b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java @@ -77,7 +77,7 @@ public class Main implements Runnable { Configuration.plotMilliSecondsUpdate = 20000; AMOEBA amoeba = new AMOEBA(); - StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone); + StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone, oracleNoiseRange); amoeba.setStudiedSystem(studiedSystem); IBackupSystem backupSystem = new BackupSystem(amoeba); File file = new File("resources/threeDimensionsLauncherUnity.xml"); diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java index 317b044f583928d8c3109629c6e47ad6ba2c71e5..300f91f974a5129d9488e6b97388d84df20173ea 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java @@ -8,6 +8,9 @@ import java.util.ArrayList; import experiments.FILE; import fr.irit.smac.amak.Configuration; import gui.AmoebaWindow; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.scene.control.Slider; import kernel.AMOEBA; import kernel.StudiedSystem; import kernel.backup.BackupSystem; @@ -21,16 +24,17 @@ import kernel.backup.SaveHelperImpl; public class F_N_Launcher implements Serializable { - public static final double oracleNoiseRange = 0.0; + public static final double oracleNoiseRange = 0.5; public static final double learningSpeed = 0.01; public static final int regressionPoints = 100; public static final int dimension = 2; public static final double spaceSize = 50.0 ; public static final int nbOfModels = 3 ; public static final int normType = 2 ; - public static final boolean randomExploration = true; + public static final boolean randomExploration = false; public static final boolean limitedToSpaceZone = true; - public static final double mappingErrorAllowed = 0.03; + //public static final double mappingErrorAllowed = 0.07; // BIG SQUARE + public static double mappingErrorAllowed = 0.03; // MULTI public static final double explorationIncrement = 1.0 ; public static final double explorationWidht = 0.5 ; @@ -60,7 +64,7 @@ public class F_N_Launcher implements Serializable { Configuration.plotMilliSecondsUpdate = 20000; AMOEBA amoeba = new AMOEBA(); - StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone); + StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone, oracleNoiseRange); amoeba.setStudiedSystem(studiedSystem); IBackupSystem backupSystem = new BackupSystem(amoeba); File file = new File("resources/twoDimensionsLauncher.xml"); @@ -73,6 +77,21 @@ public class F_N_Launcher implements Serializable { amoeba.data.numberOfPointsForRegression = regressionPoints; amoeba.getEnvironment().setMappingErrorAllowed(mappingErrorAllowed); + // Exemple for adding a tool in the toolbar + Slider slider = new Slider(0.01, 0.1, mappingErrorAllowed); + slider.setShowTickLabels(true); + slider.setShowTickMarks(true); + + slider.valueProperty().addListener(new ChangeListener<Number>() { + @Override + public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { + System.out.println("new Value "+newValue); + mappingErrorAllowed = (double)newValue; + amoeba.getEnvironment().setMappingErrorAllowed(mappingErrorAllowed); + } + }); + AmoebaWindow.addToolbar(slider); + studiedSystem.playOneStep(); amoeba.learn(studiedSystem.getOutput()); diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java index 331ba5275c774ff131f1d65609f152de6dccfef8..a5c51923a19dec1f5678edd58df31573c7561f4f 100644 --- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java +++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java @@ -41,6 +41,8 @@ public class F_N_Manager implements StudiedSystem{ HashMap<String,Double> selfRequest; boolean activeLearning = false; + double noiseRange; + /** The world. */ Random generator; @@ -53,13 +55,14 @@ public class F_N_Manager implements StudiedSystem{ private static final double gaussianVariance = 10; - public F_N_Manager(double size, int dim, int nbOfModels, int nrmType, boolean rndExploration, double explIncrement, double explnVariation, boolean limiteToSpace) { + public F_N_Manager(double size, int dim, int nbOfModels, int nrmType, boolean rndExploration, double explIncrement, double explnVariation, boolean limiteToSpace, double noise) { this.spaceSize= size; dimension = dim; numberOfModels = nbOfModels; normType = nrmType; x = new Double[dimension]; + noiseRange = noise; spaceLimited = limiteToSpace; //gaussianCoef = Math.random()*2000; @@ -270,12 +273,13 @@ public class F_N_Manager implements StudiedSystem{ center[0]=0.0; center[1]=0.0; //return gaussianModel(xRequest, center,gaussianCoef, gaussianVariance); + //return squareSimpleModel(xRequest); int subzone = subzone2D(xRequest); if(subzone == 1) { /* Disques */ - return modelN(xRequest); + return modelN(xRequest) ; }else if (subzone == 2) { /* Gaussian model */ return gaussianModel(xRequest, subZoneCenter3D(2), gaussianCoef, gaussianVariance); @@ -408,6 +412,13 @@ private double[] subZoneCenter3D(int nb) { xRequest[1] < (center[1]+spaceSize/2)) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]) ; } + private double squareSimpleModel(Double[] xRequest) { + return ((-spaceSize) < xRequest[0] && + xRequest[0] < (spaceSize) && + (-spaceSize) < xRequest[1] && + xRequest[1] < (+spaceSize)) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]) ; + } + private double gaussianModel() { double result = 1.0; for(int i=0;i<dimension;i++) { diff --git a/AMOEBAonAMAK/src/kernel/SITUATION.java b/AMOEBAonAMAK/src/kernel/SITUATION.java new file mode 100644 index 0000000000000000000000000000000000000000..46f38af74deb95e6667969036072e08859a55b78 --- /dev/null +++ b/AMOEBAonAMAK/src/kernel/SITUATION.java @@ -0,0 +1,12 @@ +package kernel; + +import java.io.Serializable; + +public enum SITUATION implements Serializable { + + LEARN, + REQUEST, + CONCURENCE, + INCOMPETENCE + +} diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java index e248a189449055d43fff29bc5ac33ff3d1e90fdf..5fe709fea42dfd30530f773a93033cd64684e139 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.ERROR; + public static TRACE_LEVEL minLevel = TRACE_LEVEL.DEBUG; private AMOEBA amoeba;