Это очень упрощенный отрывок из моего кода я использую, чтобы получить самую низкую вычисленное значение и его параметров с помощью SortedMap:Добавить все значения 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;
}
}
Я использую SortedMap
, чтобы получить самый низкий вычислен значение в зависимости от параметров Alpha
, Beta
и Gamma
. (Я знаю, что это не тот случай, потому что это очень упрощен отрывок.)
Я хотел бы получить всех возможных значения (переменная value
), хранящихся в зависимости от Alpha
, Beta
и Gamma
в minFromMap
и получить параметры, для которых value
- самое низкое значение. Тем не менее, выход публикуемого кода:
Значение: +2,990180006385608 Alpha: 0,9 Beta: 0,9 Лямбда: 0,9 к: 2
Я знаю, что значение не изменяется, и поэтому только один запись сохраняется в SortedMap, но как только что было упомянуто: существует ли возможность хранить все записи со значениями и параметрами и сортировать их как SortedMap
? Может ли кто-нибудь помочь мне решить эту проблему? Благодарю.