package Presenter.Evaluation; import Model.Interval; import Model.Line; import Model.LineModel; import Presenter.Algorithms.*; import Presenter.Generator.DatasetGenerator; import java.util.ArrayList; import java.util.LinkedList; import java.util.Observable; /** * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden. * * @Author: Armin Wolf * @Email: a_wolf28@uni-muenster.de * @Date: 01.08.2017. */ public class EvaluateAlgorithms extends Observable { private LineModel arrangement; private Thread lmsThread; private Thread rmThread; private Thread tsThread; private Double[] tsRes = new Double[2]; private Double[] rmRes = new Double[2]; private Double[] lmsRes = new Double[2]; private DatasetGenerator generator; private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE"}}; //übergebene Parameter private int type; private int iterations; private int alg; public EvaluateAlgorithms(int type, int iterations, int alg){ this.arrangement = new LineModel(); generator = new DatasetGenerator(); arrangement.setLines(generator.generateDataCloud()); this.type = type; this.iterations = iterations; this.alg = alg; setChanged(); String[] msg = {"eval-dataset-generated"}; notifyObservers(msg); IntersectionCounter counter = new IntersectionCounter(); counter.run(arrangement.getLines(), new Interval(-99999, 99999)); counter.calculateIntersectionAbscissas(arrangement); } public void run() throws InterruptedException { ArrayList result = new ArrayList<>(); switch (type){ case 0: for (int i=0;i result){ ArrayList tableInput = new ArrayList<>(); for (int i=0;i lines = new ArrayList<>(); lines.add("lines-res"); //lms res lines.add(lmsRes[0]+""); lines.add(lmsRes[1]+""); // // //rm res // lines.add(rmRes[0]+""); // lines.add(rmRes[1]+""); // // //ts res // lines.add(tsRes[0]+""); // lines.add(tsRes[1]+""); setChanged(); notifyObservers(lines.stream().toArray(String[]::new)); } public void startLMS() throws InterruptedException { lmsThread = new Thread(() -> { LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(arrangement.getLines(), arrangement.getNodes()); lmsAlg.run(); lmsAlg.getResult(); lmsRes[0] = lmsAlg.getSlope(); lmsRes[1] = lmsAlg.getyInterception(); }); lmsThread.start(); lmsThread.join(); } public void startRM() throws InterruptedException { rmThread = new Thread(() -> { RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(arrangement.getLines()); rmAlg.run(); rmAlg.getResult(); rmRes[0] = rmAlg.getSlope(); rmRes[1] = rmAlg.getyInterception(); }); rmThread.start(); rmThread.join(); } public void startTS() throws InterruptedException { tsThread = new Thread(() -> { TheilSenEstimator tsAlg = new TheilSenEstimator(arrangement.getLines(), arrangement.getNodes()); tsAlg.run(); tsAlg.getResult(); tsRes[0] = tsAlg.getSlope(); tsRes[1] = tsAlg.getyInterception(); }); tsThread.start(); tsThread.join(); } public ArrayList getScaleDependentMeasure(LinkedList lines, Double m, Double b) { ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b); ArrayList ret = new ArrayList<>(); ret.add(scaleDependentMeasure.mse().toString()); ret.add(scaleDependentMeasure.rmse().toString()); ret.add(scaleDependentMeasure.mae().toString()); ret.add(scaleDependentMeasure.mdae().toString()); return ret; } public ArrayList getPercentigeErrorBasedMeasure(LinkedList lines, Double m, Double b) { PercentageErrorBasedMeasure percentageErrorBasedMeasure = new PercentageErrorBasedMeasure(lines, m, b); ArrayList ret = new ArrayList<>(); ret.add(percentageErrorBasedMeasure.mape().toString()); ret.add(percentageErrorBasedMeasure.mdape().toString()); ret.add(percentageErrorBasedMeasure.rmspe().toString()); ret.add(percentageErrorBasedMeasure.rmdspe().toString()); return ret; } public ArrayList getScaledErrorBasedMeasure(LinkedList lines, Double m, Double b){ ScaledErrorBasedMeasure scaledErrorBasedMeasure = new ScaledErrorBasedMeasure(lines, m, b); ArrayList ret = new ArrayList<>(); ret.add(scaledErrorBasedMeasure.mse().toString()); ret.add(scaledErrorBasedMeasure.rmse().toString()); ret.add(scaledErrorBasedMeasure.mae().toString()); ret.add(scaledErrorBasedMeasure.mdae().toString()); return ret; } public LinkedList getData(){ return arrangement.getLines(); } }