Ceci est un extrait très simplifiée de mon code que je utilise pour obtenir la valeur la plus basse calculée et ses paramètres à l'aide SortedMap:Ajouter toutes les valeurs à SortedMap (Java)
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) throws Exception {
getMinValue();
}
public static Parameter getMinValue() throws Exception {
SortedMap<Double, Parameter> minFromMap = new TreeMap<Double, Parameter>();
List<Double> real = new ArrayList<>(
Arrays.asList(4.0, 3.0, 3.0, 1.0, 0.0, 2.0, 5.0, 1.0, 0.0, 0.0,
1.0, 7.0, 4.0, 1.0, 2.0, 4.0, 0.0));
int k = 2;
BigDecimal step = new BigDecimal("0.1");
for (BigDecimal alphaNew = BigDecimal.ZERO; alphaNew
.compareTo(BigDecimal.ONE) < 0; alphaNew = alphaNew.add(step)) {
for (BigDecimal betaNew = BigDecimal.ZERO; betaNew
.compareTo(BigDecimal.ONE) < 0; betaNew = betaNew.add(step)) {
for (BigDecimal lambda = BigDecimal.ZERO; lambda
.compareTo(BigDecimal.ONE) < 0; lambda = lambda
.add(step)) {
Parameter param = new Parameter();
param.setAlpha(alphaNew.doubleValue());
param.setBeta(betaNew.doubleValue());
param.setGamma(lambda.doubleValue());
param.setK(k);
double sumUp = 0;
double value = 0;
int observations = 0;
for (int i = 0; i < real.size(); i++) {
double pow = Math.pow(real.get(i), 2);
sumUp += pow;
observations++;
}
value = Math.sqrt(sumUp/observations);
param.setValue(value);
minFromMap.put(value, param);
}
}
}
for (Entry<Double, Parameter> en : minFromMap.entrySet()) {
System.out.println("Value: " + en.getKey() + " Alpha: "
+ en.getValue().getAlpha() + " Beta: "
+ en.getValue().getBeta() + " Lambda: "
+ en.getValue().getGamma() + " k: " + en.getValue().getK());
}
Parameter param = new Parameter();
param.setAlpha(minFromMap.get(minFromMap.firstKey()).getAlpha());
param.setBeta(minFromMap.get(minFromMap.firstKey()).getBeta());
param.setGamma(minFromMap.get(minFromMap.firstKey()).getGamma());
param.setK(minFromMap.get(minFromMap.firstKey()).getK());
param.setValue(minFromMap.get(minFromMap.firstKey()).getValue());
return param;
}
}
public class Parameter {
private double alpha;
private double beta;
private double gamma;
private int k;
private double value;
public double getAlpha() {
return alpha;
}
public void setAlpha(double alpha) {
this.alpha = alpha;
}
public double getBeta() {
return beta;
}
public void setBeta(double beta) {
this.beta = beta;
}
public double getGamma() {
return gamma;
}
public void setGamma(double gamma) {
this.gamma = gamma;
}
public int getK() {
return k;
}
public void setK(int k) {
this.k = k;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
}
J'utilise SortedMap
pour obtenir le plus bas calculé valeur en fonction des paramètres Alpha
, Beta
et Gamma
. (Je sais que ce n'est pas le cas ici, car il est un extrait très simplifié.)
Je voudrais obtenir toutes les valeurs possibles (variables value
) stockées en fonction de Alpha
, Beta
et Gamma
dans minFromMap
et pour obtenir le paramètres pour lesquels value
est la valeur la plus basse. Cependant, la sortie du code affiché est:
Valeur: 2,990180006385608 Alpha: 0.9 Beta: 0,9 Lambda: 0,9 k: 2
Je sais que la valeur ne change pas et c'est pourquoi une seule L'entrée est stockée dans SortedMap mais comme mentionné précédemment: est-il possible de stocker toutes les entrées avec des valeurs et des paramètres et de les trier comme SortedMap
? Quelqu'un peut-il m'aider à résoudre ce problème? Merci.