From e72a96ffbd0d7d39b7c1450b97083d5fa2a828cf Mon Sep 17 00:00:00 2001 From: Hugo Roussel <hugo.roussel@univ-tlse3.fr> Date: Thu, 11 Jul 2019 17:30:12 +0200 Subject: [PATCH] Changed LocalModel's getMax to getMaxWithConstraint --- .../agents/context/localModel/LocalModel.java | 4 +-- .../LocalModelMillerRegression.java | 32 +++++++++++-------- AMOEBAonAMAK/src/kernel/AMOEBA.java | 2 +- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/AMOEBAonAMAK/src/agents/context/localModel/LocalModel.java b/AMOEBAonAMAK/src/agents/context/localModel/LocalModel.java index 91d1f1da..2aab80c8 100644 --- a/AMOEBAonAMAK/src/agents/context/localModel/LocalModel.java +++ b/AMOEBAonAMAK/src/agents/context/localModel/LocalModel.java @@ -37,11 +37,11 @@ public interface LocalModel { public double getMaxProposition(); /** - * Return the point (percept value) that produce the max proposition + * Return the point (percept value) that produce the max proposition, considering some percepts are fixed. * @return a HashMap with percept names as key, and their corresponding value. The oracle is the max proposition * @see LocalModel#getMaxProposition(Context) */ - public HashMap<String, Double> getMax(); + public HashMap<String, Double> getMaxWithConstraint(HashMap<String, Double> fixedPercepts);; /** * Gets the proposition with the lowest value possible diff --git a/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java b/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java index 24c73fc0..23bd2275 100644 --- a/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java +++ b/AMOEBAonAMAK/src/agents/context/localModel/LocalModelMillerRegression.java @@ -128,7 +128,8 @@ public class LocalModelMillerRegression implements LocalModel{ ArrayList<Percept> percepts = context.getAmas().getPercepts(); double result = coefs[0]; - if (coefs[0] == Double.NaN) System.exit(0); + if (coefs[0] == Double.NaN) + throw new ArithmeticException("First coeficient of model cannot be NaN"); for (int i = 1 ; i < coefs.length ; i++) { @@ -145,7 +146,7 @@ public class LocalModelMillerRegression implements LocalModel{ } @Override - public HashMap<String, Double> getMax(){ + public HashMap<String, Double> getMaxWithConstraint(HashMap<String, Double> fixedPercepts){ ArrayList<Percept> percepts = context.getAmas().getPercepts(); HashMap<String, Double> result = new HashMap<String, Double>(); @@ -157,20 +158,23 @@ public class LocalModelMillerRegression implements LocalModel{ for (int i = 1 ; i < coefs.length ; i++) { if (Double.isNaN(coefs[i])) coefs[i] = 0.0; - if(coefs[i]>0) { - Percept p = percepts.get(i-1); - double value = coefs[i] * context.getRanges().get(p).getEnd(); - result.put("oracle", value); - result.put(p.getName(), context.getRanges().get(p).getEnd()); - } - else { - Percept p = percepts.get(i-1); - double value = coefs[i] * context.getRanges().get(p).getStart(); - result.put("oracle", value); - result.put(p.getName(), context.getRanges().get(p).getStart()); + double pos; + Percept p = percepts.get(i-1); + if(fixedPercepts.containsKey(p.getName())) { + pos = fixedPercepts.get(p.getName()); + } else { + if(coefs[i]>0) { + pos = context.getRanges().get(p).getEnd(); + } + else { + pos = context.getRanges().get(p).getStart(); + } } + double value = coefs[i] * pos; + result.put("oracle", result.get("oracle") + value); + result.put(p.getName(), pos); } - + return result; } diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java index ef405f38..d47419a8 100644 --- a/AMOEBAonAMAK/src/kernel/AMOEBA.java +++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java @@ -431,7 +431,7 @@ public class AMOEBA extends Amas<World> implements IAMOEBA { ArrayList<HashMap<String, Double>> sol = new ArrayList<>(); for(Context c : pac) { - sol.add(c.getLocalModel().getMax()); + sol.add(c.getLocalModel().getMaxWithConstraint(known)); } HashMap<String, Double> max = new HashMap<>(); -- GitLab