2017-09-10 15:45:47 +00:00
|
|
|
package presenter.evaluation;
|
2017-08-01 19:59:33 +00:00
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
import model.Interval;
|
|
|
|
import model.Line;
|
|
|
|
import model.LineModel;
|
2017-09-12 05:58:33 +00:00
|
|
|
import model.Point;
|
2017-09-19 11:34:06 +00:00
|
|
|
import presenter.algorithms.advanced.LeastMedianOfSquaresEstimator;
|
|
|
|
import presenter.algorithms.advanced.RepeatedMedianEstimator;
|
|
|
|
import presenter.algorithms.advanced.TheilSenEstimator;
|
2017-09-15 18:18:36 +00:00
|
|
|
import presenter.algorithms.naiv.NaivLeastMedianOfSquaresEstimator;
|
|
|
|
import presenter.algorithms.naiv.NaivRepeatedMedianEstimator;
|
|
|
|
import presenter.algorithms.naiv.NaivTheilSenEstimator;
|
2017-10-15 07:55:29 +00:00
|
|
|
import presenter.algorithms.util.IntersectionComputer;
|
2017-09-15 18:18:36 +00:00
|
|
|
import presenter.algorithms.util.IntersectionCounter;
|
2017-09-10 15:45:47 +00:00
|
|
|
import presenter.generator.DatasetGenerator;
|
2017-09-19 11:34:06 +00:00
|
|
|
import presenter.io.DataImporter;
|
2017-08-01 19:59:33 +00:00
|
|
|
|
2017-09-19 11:34:06 +00:00
|
|
|
import java.io.File;
|
2017-08-01 19:59:33 +00:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.LinkedList;
|
2017-08-02 20:42:01 +00:00
|
|
|
import java.util.Observable;
|
2017-08-01 19:59:33 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
|
|
|
*
|
|
|
|
* @Author: Armin Wolf
|
|
|
|
* @Email: a_wolf28@uni-muenster.de
|
|
|
|
* @Date: 01.08.2017.
|
|
|
|
*/
|
2017-08-03 06:27:38 +00:00
|
|
|
public class EvaluateAlgorithms extends Observable {
|
|
|
|
|
2017-08-02 20:42:01 +00:00
|
|
|
private LineModel arrangement;
|
2017-09-05 18:39:52 +00:00
|
|
|
|
2017-09-12 05:58:33 +00:00
|
|
|
private LinkedList<Line> lmsL;
|
|
|
|
private LinkedList<Line> rmL;
|
|
|
|
private LinkedList<Line> tsL;
|
|
|
|
|
2017-09-18 18:44:10 +00:00
|
|
|
private ArrayList<Point> lmsP;
|
|
|
|
private ArrayList<Point> tsP;
|
2017-09-12 05:58:33 +00:00
|
|
|
|
2017-08-02 20:42:01 +00:00
|
|
|
private Thread lmsThread;
|
|
|
|
private Thread rmThread;
|
|
|
|
private Thread tsThread;
|
2017-08-01 19:59:33 +00:00
|
|
|
|
2017-08-03 18:37:59 +00:00
|
|
|
private Double[] tsRes = new Double[2];
|
|
|
|
private Double[] rmRes = new Double[2];
|
|
|
|
private Double[] lmsRes = new Double[2];
|
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
private DatasetGenerator generator;
|
2017-08-01 19:59:33 +00:00
|
|
|
|
2017-09-19 11:34:06 +00:00
|
|
|
private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE", "Steigung", "y-Achsenabschnitt", "S-MSE", "S-RMSE", "S-MAE", "S-MDAE", "Brute-force Steigung", "Brute-force y-Achsenabschnitt"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE", "Steigung", "y-Achsenabschnitt"}};
|
2017-08-01 19:59:33 +00:00
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
//übergebene Parameter
|
|
|
|
private int type;
|
|
|
|
private int iterations;
|
|
|
|
private int alg;
|
2017-08-02 20:42:01 +00:00
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
/**
|
2017-09-10 15:45:47 +00:00
|
|
|
* Konstruktor zur evaluation
|
|
|
|
*
|
|
|
|
* @param type Typ der evaluation
|
|
|
|
* @param n Größe des Datensatzes
|
|
|
|
* @param alg 0 = lms,
|
|
|
|
* 1 = rm,
|
|
|
|
* 2 = ts,
|
|
|
|
* 3 = lms, rm,
|
|
|
|
* 4 = lms, ts,
|
|
|
|
* 5 = rm, ts,
|
|
|
|
* 6 = lms, rm, ts,
|
2017-09-08 19:23:02 +00:00
|
|
|
*/
|
2017-09-10 15:45:47 +00:00
|
|
|
public EvaluateAlgorithms(int type, int n, int alg, String datasettyp) {
|
2017-09-07 17:39:55 +00:00
|
|
|
this.arrangement = new LineModel();
|
|
|
|
generator = new DatasetGenerator();
|
2017-09-10 15:45:47 +00:00
|
|
|
switch (datasettyp) {
|
2017-09-08 19:23:02 +00:00
|
|
|
case "Punktwolke":
|
|
|
|
arrangement.setLines(generator.generateDataCloud(n));
|
|
|
|
break;
|
|
|
|
case "Gerade":
|
|
|
|
arrangement.setLines(generator.generateDataLines(n));
|
|
|
|
break;
|
|
|
|
case "Kreis und Gerade":
|
|
|
|
arrangement.setLines(generator.generateCircle(n));
|
|
|
|
break;
|
|
|
|
}
|
2017-09-07 17:39:55 +00:00
|
|
|
this.type = type;
|
2017-09-08 19:23:02 +00:00
|
|
|
this.iterations = n;
|
2017-09-07 17:39:55 +00:00
|
|
|
this.alg = alg;
|
2017-08-03 06:27:38 +00:00
|
|
|
|
2017-10-15 07:55:29 +00:00
|
|
|
//IntersectionCounter counter = new IntersectionCounter();
|
|
|
|
//counter.run(arrangement.getLines(), new Interval(-99999, 99999));
|
|
|
|
//counter.calculateIntersectionAbscissas(arrangement);
|
2017-09-12 05:58:33 +00:00
|
|
|
|
2017-10-15 07:55:29 +00:00
|
|
|
IntersectionComputer computer = new IntersectionComputer(arrangement.getLines());
|
|
|
|
arrangement.setNodes(computer.compute());
|
2017-09-12 05:58:33 +00:00
|
|
|
|
|
|
|
lmsL = new LinkedList<>(arrangement.getLines());
|
|
|
|
rmL = new LinkedList<>(arrangement.getLines());
|
|
|
|
tsL = new LinkedList<>(arrangement.getLines());
|
|
|
|
|
2017-09-18 18:44:10 +00:00
|
|
|
lmsP = new ArrayList<>(arrangement.getNodes());
|
|
|
|
tsP = new ArrayList<>(arrangement.getNodes());
|
2017-09-07 17:39:55 +00:00
|
|
|
}
|
2017-08-03 06:27:38 +00:00
|
|
|
|
2017-09-19 11:34:06 +00:00
|
|
|
|
|
|
|
public EvaluateAlgorithms(int type, int n, int alg, File file) {
|
|
|
|
this.arrangement = new LineModel();
|
|
|
|
|
|
|
|
DataImporter importer = new DataImporter(file);
|
|
|
|
this.arrangement.setLines(importer.run());
|
|
|
|
|
|
|
|
this.type = type;
|
|
|
|
this.iterations = n;
|
|
|
|
this.alg = alg;
|
|
|
|
|
2017-10-15 07:55:29 +00:00
|
|
|
//IntersectionCounter counter = new IntersectionCounter();
|
|
|
|
//counter.run(arrangement.getLines(), new Interval(-99999, 99999));
|
|
|
|
//counter.calculateIntersectionAbscissas(arrangement);
|
|
|
|
|
|
|
|
IntersectionComputer computer = new IntersectionComputer(arrangement.getLines());
|
|
|
|
arrangement.setNodes(computer.compute());
|
2017-09-19 11:34:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
lmsL = new LinkedList<>(arrangement.getLines());
|
|
|
|
rmL = new LinkedList<>(arrangement.getLines());
|
|
|
|
tsL = new LinkedList<>(arrangement.getLines());
|
|
|
|
|
|
|
|
lmsP = new ArrayList<>(arrangement.getNodes());
|
|
|
|
tsP = new ArrayList<>(arrangement.getNodes());
|
|
|
|
}
|
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
public void run() throws InterruptedException {
|
2017-09-08 19:23:02 +00:00
|
|
|
setChanged();
|
|
|
|
String[] msg = {"eval-dataset-generated"};
|
|
|
|
notifyObservers(msg);
|
|
|
|
ArrayList<String> result;
|
|
|
|
ArrayList<ArrayList<String>> multipleResults = new ArrayList<>();
|
2017-09-05 18:39:52 +00:00
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
switch (type) {
|
2017-09-07 17:39:55 +00:00
|
|
|
case 0:
|
2017-09-10 15:45:47 +00:00
|
|
|
//der alg der gewählt wurde
|
|
|
|
if (alg == 0) {
|
2017-09-16 13:26:33 +00:00
|
|
|
final double[] m = new double[1];
|
|
|
|
final double[] b = new double[1];
|
|
|
|
Thread t = new Thread(() -> {
|
|
|
|
NaivLeastMedianOfSquaresEstimator l = new NaivLeastMedianOfSquaresEstimator(arrangement.getLines());
|
|
|
|
l.run();
|
|
|
|
m[0] = l.getM();
|
|
|
|
b[0] = l.getB();
|
|
|
|
});
|
|
|
|
t.start();
|
2017-09-10 15:45:47 +00:00
|
|
|
startLMS();
|
2017-09-16 13:26:33 +00:00
|
|
|
t.join();
|
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
result = getScaleDependentMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
2017-09-19 11:34:06 +00:00
|
|
|
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1], m[0], b[0]));
|
|
|
|
Double[] tmp = {lmsRes[0], lmsRes[1], m[0], b[0]};
|
2017-09-16 13:26:33 +00:00
|
|
|
sendPlotLineResults(tmp, 0);
|
2017-09-10 15:45:47 +00:00
|
|
|
} else if (alg == 1) {
|
2017-09-16 13:26:33 +00:00
|
|
|
final double[] m = new double[1];
|
|
|
|
final double[] b = new double[1];
|
|
|
|
Thread t = new Thread(() -> {
|
|
|
|
NaivRepeatedMedianEstimator r = new NaivRepeatedMedianEstimator(arrangement.getLines());
|
|
|
|
r.run();
|
|
|
|
m[0] = r.getM();
|
|
|
|
b[0] = r.getB();
|
|
|
|
});
|
|
|
|
t.start();
|
2017-09-10 15:45:47 +00:00
|
|
|
startRM();
|
|
|
|
result = getScaleDependentMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
2017-09-19 11:34:06 +00:00
|
|
|
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1], m[0], b[0]));
|
|
|
|
Double[] tmp = {rmRes[0], rmRes[1], m[0], b[0]};
|
2017-09-16 13:26:33 +00:00
|
|
|
sendPlotLineResults(tmp, 1);
|
2017-09-10 15:45:47 +00:00
|
|
|
} else {
|
2017-09-16 13:26:33 +00:00
|
|
|
final double[] m = new double[1];
|
|
|
|
final double[] b = new double[1];
|
|
|
|
Thread t = new Thread(() -> {
|
|
|
|
NaivTheilSenEstimator ts = new NaivTheilSenEstimator(arrangement.getLines());
|
|
|
|
ts.run();
|
|
|
|
m[0] = ts.getM();
|
|
|
|
b[0] = ts.getB();
|
|
|
|
});
|
|
|
|
t.start();
|
2017-09-10 15:45:47 +00:00
|
|
|
startTS();
|
|
|
|
result = getScaleDependentMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
2017-09-19 11:34:06 +00:00
|
|
|
result.addAll(getScaledErrorBasedMeasure(arrangement.getLines(), tsRes[0], tsRes[1], m[0], b[0]));
|
|
|
|
Double[] tmp = {tsRes[0], tsRes[1], m[0], b[0]};
|
2017-09-16 13:26:33 +00:00
|
|
|
sendPlotLineResults(tmp, 2);
|
2017-09-10 15:45:47 +00:00
|
|
|
}
|
2017-09-08 19:23:02 +00:00
|
|
|
sendTableApproximationTypes();
|
|
|
|
sendTableApproximationData(result, alg);
|
2017-09-07 17:39:55 +00:00
|
|
|
break;
|
|
|
|
case 1:
|
2017-09-08 19:23:02 +00:00
|
|
|
ArrayList<Double[]> lineRes;
|
2017-09-10 15:45:47 +00:00
|
|
|
switch (alg) {
|
2017-09-08 19:23:02 +00:00
|
|
|
case 3:
|
2017-10-12 15:21:16 +00:00
|
|
|
startLMS();
|
|
|
|
startRM();
|
2017-09-08 19:23:02 +00:00
|
|
|
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = fillPseudoResults();
|
|
|
|
multipleResults.add(result);
|
|
|
|
|
|
|
|
lineRes = new ArrayList<>();
|
|
|
|
lineRes.add(lmsRes);
|
|
|
|
lineRes.add(rmRes);
|
2017-09-19 11:34:06 +00:00
|
|
|
sendPloteLineResults(lineRes, new Integer[]{0, 1});
|
2017-09-12 05:58:33 +00:00
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
2017-10-12 15:21:16 +00:00
|
|
|
startLMS();
|
|
|
|
startTS();
|
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = fillPseudoResults();
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
|
|
|
|
lineRes = new ArrayList<>();
|
|
|
|
lineRes.add(lmsRes);
|
|
|
|
lineRes.add(tsRes);
|
2017-09-10 15:45:47 +00:00
|
|
|
sendPloteLineResults(lineRes, new Integer[]{0, 2});
|
2017-09-08 19:23:02 +00:00
|
|
|
break;
|
|
|
|
case 5:
|
2017-10-12 15:21:16 +00:00
|
|
|
startRM();
|
|
|
|
startTS();
|
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
result = fillPseudoResults();
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
|
|
|
|
lineRes = new ArrayList<>();
|
|
|
|
lineRes.add(rmRes);
|
|
|
|
lineRes.add(tsRes);
|
2017-09-10 15:45:47 +00:00
|
|
|
sendPloteLineResults(lineRes, new Integer[]{1, 2});
|
2017-09-08 19:23:02 +00:00
|
|
|
break;
|
|
|
|
case 6:
|
2017-10-12 15:21:16 +00:00
|
|
|
startLMS();
|
|
|
|
startRM();
|
|
|
|
startTS();
|
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
|
|
|
multipleResults.add(result);
|
|
|
|
|
|
|
|
lineRes = new ArrayList<>();
|
|
|
|
lineRes.add(lmsRes);
|
|
|
|
lineRes.add(rmRes);
|
|
|
|
lineRes.add(tsRes);
|
2017-09-10 15:45:47 +00:00
|
|
|
sendPloteLineResults(lineRes, new Integer[]{0, 1, 2});
|
2017-09-08 19:23:02 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
sendTableApproximationData(multipleResults);
|
2017-09-07 17:39:55 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
|
2017-08-03 18:37:59 +00:00
|
|
|
}
|
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
public void sendTableApproximationData(ArrayList<String> result, int col) {
|
2017-09-07 17:39:55 +00:00
|
|
|
ArrayList<String> tableInput = new ArrayList<>();
|
2017-09-08 19:23:02 +00:00
|
|
|
tableInput.add("eval-d");
|
2017-09-10 15:45:47 +00:00
|
|
|
tableInput.add("" + col);
|
|
|
|
for (int i = 0; i < names[type].length; i++) {
|
2017-09-07 17:39:55 +00:00
|
|
|
tableInput.add(result.get(i));
|
2017-09-08 19:23:02 +00:00
|
|
|
}
|
|
|
|
tableInput.add("");
|
|
|
|
setChanged();
|
|
|
|
notifyObservers(tableInput.stream().toArray(String[]::new));
|
|
|
|
tableInput.clear();
|
|
|
|
}
|
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
public void sendTableApproximationData(ArrayList<ArrayList<String>> result) {
|
2017-09-08 19:23:02 +00:00
|
|
|
ArrayList<String> tableInput = new ArrayList<>();
|
|
|
|
|
|
|
|
//iteration über die ApproximationsGüten -- Zeilen
|
2017-09-10 15:45:47 +00:00
|
|
|
for (int j = 0; j <= result.get(0).size(); j++) {
|
2017-09-08 19:23:02 +00:00
|
|
|
tableInput.add("eval-ds");
|
2017-09-10 15:45:47 +00:00
|
|
|
if (j != result.get(0).size()) {
|
2017-09-08 19:23:02 +00:00
|
|
|
|
|
|
|
tableInput.add(names[type][j]);
|
|
|
|
//iteration über die alg. -- Spalten
|
|
|
|
for (int i = 0; i < 3; i++) {
|
|
|
|
tableInput.add(result.get(i).get(j));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
tableInput.add("");
|
|
|
|
tableInput.add("");
|
|
|
|
tableInput.add("");
|
|
|
|
tableInput.add("");
|
|
|
|
}
|
2017-08-03 18:37:59 +00:00
|
|
|
setChanged();
|
2017-09-08 19:23:02 +00:00
|
|
|
notifyObservers(tableInput.stream().toArray(String[]::new));
|
2017-09-07 17:39:55 +00:00
|
|
|
tableInput.clear();
|
2017-08-03 06:27:38 +00:00
|
|
|
}
|
2017-08-03 18:37:59 +00:00
|
|
|
|
2017-09-08 19:23:02 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
public void sendTableApproximationTypes() {
|
2017-09-08 19:23:02 +00:00
|
|
|
ArrayList<String> tableInput = new ArrayList<>();
|
|
|
|
tableInput.add("eval-t");
|
2017-09-10 15:45:47 +00:00
|
|
|
tableInput.add("" + 0);
|
|
|
|
for (int i = 0; i < names[type].length; i++) {
|
2017-09-08 19:23:02 +00:00
|
|
|
tableInput.add(names[type][i]);
|
|
|
|
}
|
|
|
|
tableInput.add("");
|
2017-08-03 18:37:59 +00:00
|
|
|
setChanged();
|
2017-09-08 19:23:02 +00:00
|
|
|
notifyObservers(tableInput.stream().toArray(String[]::new));
|
|
|
|
tableInput.clear();
|
|
|
|
}
|
2017-08-03 18:37:59 +00:00
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
public void sendPlotLineResults(Double[] res, int alg) {
|
2017-09-05 18:39:52 +00:00
|
|
|
//visualisiere m,b
|
|
|
|
|
|
|
|
ArrayList<String> lines = new ArrayList<>();
|
|
|
|
lines.add("lines-res");
|
2017-09-10 15:45:47 +00:00
|
|
|
lines.add("" + alg);
|
2017-09-05 18:39:52 +00:00
|
|
|
//lms res
|
2017-09-19 11:34:06 +00:00
|
|
|
for (int i = 0; i < res.length; i++) {
|
2017-09-16 13:26:33 +00:00
|
|
|
lines.add(res[i] + "");
|
|
|
|
}
|
2017-09-08 19:23:02 +00:00
|
|
|
setChanged();
|
|
|
|
notifyObservers(lines.stream().toArray(String[]::new));
|
|
|
|
}
|
2017-08-03 18:37:59 +00:00
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
public void sendPloteLineResults(ArrayList<Double[]> res, Integer[] algs) {
|
2017-09-08 19:23:02 +00:00
|
|
|
ArrayList<String> lines = new ArrayList<>();
|
|
|
|
lines.add("lines-res-mult");
|
2017-09-10 15:45:47 +00:00
|
|
|
for (int i = 0; i < algs.length; i++) {
|
|
|
|
lines.add("" + algs[i]);
|
2017-09-08 19:23:02 +00:00
|
|
|
//lms res
|
|
|
|
Double[] tmp = res.get(i);
|
2017-09-10 15:45:47 +00:00
|
|
|
lines.add(tmp[0] + "");
|
|
|
|
lines.add(tmp[1] + "");
|
2017-09-08 19:23:02 +00:00
|
|
|
}
|
2017-09-05 18:39:52 +00:00
|
|
|
setChanged();
|
|
|
|
notifyObservers(lines.stream().toArray(String[]::new));
|
2017-08-01 19:59:33 +00:00
|
|
|
}
|
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
public void startLMS() throws InterruptedException {
|
2017-09-12 05:58:33 +00:00
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
lmsThread = new Thread(() -> {
|
2017-09-19 11:34:06 +00:00
|
|
|
LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(lmsL, lmsP);
|
2017-09-07 17:39:55 +00:00
|
|
|
lmsAlg.run();
|
|
|
|
lmsAlg.getResult();
|
|
|
|
lmsRes[0] = lmsAlg.getSlope();
|
|
|
|
lmsRes[1] = lmsAlg.getyInterception();
|
|
|
|
});
|
|
|
|
lmsThread.start();
|
|
|
|
lmsThread.join();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void startRM() throws InterruptedException {
|
|
|
|
rmThread = new Thread(() -> {
|
2017-09-12 05:58:33 +00:00
|
|
|
RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(rmL);
|
2017-09-07 17:39:55 +00:00
|
|
|
rmAlg.run();
|
|
|
|
rmAlg.getResult();
|
|
|
|
rmRes[0] = rmAlg.getSlope();
|
|
|
|
rmRes[1] = rmAlg.getyInterception();
|
|
|
|
});
|
|
|
|
rmThread.start();
|
|
|
|
rmThread.join();
|
2017-09-12 05:58:33 +00:00
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void startTS() throws InterruptedException {
|
|
|
|
tsThread = new Thread(() -> {
|
2017-09-19 11:34:06 +00:00
|
|
|
TheilSenEstimator tsAlg = new TheilSenEstimator(tsL, tsP);
|
2017-09-07 17:39:55 +00:00
|
|
|
tsAlg.run();
|
|
|
|
tsAlg.getResult();
|
|
|
|
tsRes[0] = tsAlg.getSlope();
|
|
|
|
tsRes[1] = tsAlg.getyInterception();
|
|
|
|
});
|
|
|
|
tsThread.start();
|
|
|
|
tsThread.join();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2017-09-12 05:58:33 +00:00
|
|
|
public ArrayList<String> getScaleDependentMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
|
2017-09-07 17:39:55 +00:00
|
|
|
ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b);
|
2017-08-03 06:27:38 +00:00
|
|
|
ArrayList<String> ret = new ArrayList<>();
|
2017-09-07 17:39:55 +00:00
|
|
|
ret.add(scaleDependentMeasure.mse().toString());
|
|
|
|
ret.add(scaleDependentMeasure.rmse().toString());
|
|
|
|
ret.add(scaleDependentMeasure.mae().toString());
|
|
|
|
ret.add(scaleDependentMeasure.mdae().toString());
|
2017-09-12 05:58:33 +00:00
|
|
|
ret.add(m.toString());
|
|
|
|
ret.add(b.toString());
|
2017-08-01 19:59:33 +00:00
|
|
|
|
2017-09-07 17:39:55 +00:00
|
|
|
return ret;
|
2017-08-01 19:59:33 +00:00
|
|
|
}
|
|
|
|
|
2017-09-12 05:58:33 +00:00
|
|
|
public ArrayList<String> getPercentigeErrorBasedMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
|
2017-09-07 17:39:55 +00:00
|
|
|
PercentageErrorBasedMeasure percentageErrorBasedMeasure = new PercentageErrorBasedMeasure(lines, m, b);
|
|
|
|
ArrayList<String> ret = new ArrayList<>();
|
|
|
|
ret.add(percentageErrorBasedMeasure.mape().toString());
|
|
|
|
ret.add(percentageErrorBasedMeasure.mdape().toString());
|
|
|
|
ret.add(percentageErrorBasedMeasure.rmspe().toString());
|
|
|
|
ret.add(percentageErrorBasedMeasure.rmdspe().toString());
|
2017-09-12 05:58:33 +00:00
|
|
|
ret.add(m.toString());
|
|
|
|
ret.add(b.toString());
|
2017-09-07 17:39:55 +00:00
|
|
|
return ret;
|
2017-08-03 18:37:59 +00:00
|
|
|
}
|
|
|
|
|
2017-09-16 13:26:33 +00:00
|
|
|
public ArrayList<String> getScaledErrorBasedMeasure(final LinkedList<Line> lines, final Double m, final Double b, final Double nM, final Double nB) {
|
|
|
|
ScaledErrorBasedMeasure scaledErrorBasedMeasure = new ScaledErrorBasedMeasure(lines, m, b, nM, nB);
|
2017-09-07 17:39:55 +00:00
|
|
|
ArrayList<String> ret = new ArrayList<>();
|
|
|
|
ret.add(scaledErrorBasedMeasure.mse().toString());
|
|
|
|
ret.add(scaledErrorBasedMeasure.rmse().toString());
|
|
|
|
ret.add(scaledErrorBasedMeasure.mae().toString());
|
|
|
|
ret.add(scaledErrorBasedMeasure.mdae().toString());
|
2017-09-16 13:26:33 +00:00
|
|
|
ret.add(nM.toString());
|
|
|
|
ret.add(nB.toString());
|
2017-09-07 17:39:55 +00:00
|
|
|
return ret;
|
2017-08-01 19:59:33 +00:00
|
|
|
}
|
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
private ArrayList<String> fillPseudoResults() {
|
2017-09-08 19:23:02 +00:00
|
|
|
ArrayList<String> result = new ArrayList<>();
|
|
|
|
result.add(" ");
|
|
|
|
result.add(" ");
|
|
|
|
result.add(" ");
|
|
|
|
result.add(" ");
|
2017-09-12 05:58:33 +00:00
|
|
|
result.add(" ");
|
|
|
|
result.add(" ");
|
2017-09-10 15:45:47 +00:00
|
|
|
return result;
|
2017-09-08 19:23:02 +00:00
|
|
|
}
|
|
|
|
|
2017-09-10 15:45:47 +00:00
|
|
|
public LinkedList<Line> getData() {
|
2017-09-05 18:39:52 +00:00
|
|
|
return arrangement.getLines();
|
|
|
|
}
|
2017-08-01 19:59:33 +00:00
|
|
|
}
|