From c4cb0ca3e7a58de7db8ed5133134057b384c248d Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Tue, 12 Sep 2017 07:58:33 +0200 Subject: [PATCH] fix in der Visualisierung der Evaluation --- .../evaluation/EvaluateAlgorithms.java | 62 ++++++++++++------- .../java/view/panels/EvaluationPanel.java | 5 +- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/main/java/presenter/evaluation/EvaluateAlgorithms.java b/src/main/java/presenter/evaluation/EvaluateAlgorithms.java index 4cb901a..779d761 100644 --- a/src/main/java/presenter/evaluation/EvaluateAlgorithms.java +++ b/src/main/java/presenter/evaluation/EvaluateAlgorithms.java @@ -3,6 +3,7 @@ package presenter.evaluation; import model.Interval; import model.Line; import model.LineModel; +import model.Point; import presenter.algorithms.IntersectionCounter; import presenter.algorithms.LeastMedianOfSquaresEstimator; import presenter.algorithms.RepeatedMedianEstimator; @@ -24,6 +25,13 @@ public class EvaluateAlgorithms extends Observable { private LineModel arrangement; + private LinkedList lmsL; + private LinkedList rmL; + private LinkedList tsL; + + private LinkedList lmsP; + private LinkedList tsP; + private Thread lmsThread; private Thread rmThread; private Thread tsThread; @@ -34,7 +42,7 @@ public class EvaluateAlgorithms extends Observable { private DatasetGenerator generator; - private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE"}}; + private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE","Steigung","y-Achsenabschnitt"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE","Steigung","y-Achsenabschnitt"}}; //übergebene Parameter private int type; @@ -75,19 +83,28 @@ public class EvaluateAlgorithms extends Observable { IntersectionCounter counter = new IntersectionCounter(); counter.run(arrangement.getLines(), new Interval(-99999, 99999)); counter.calculateIntersectionAbscissas(arrangement); + + + lmsL = new LinkedList<>(arrangement.getLines()); + rmL = new LinkedList<>(arrangement.getLines()); + tsL = new LinkedList<>(arrangement.getLines()); + + lmsP = new LinkedList<>(arrangement.getNodes()); + tsP = new LinkedList<>(arrangement.getNodes()); } public void run() throws InterruptedException { - setChanged(); String[] msg = {"eval-dataset-generated"}; notifyObservers(msg); ArrayList result; ArrayList> multipleResults = new ArrayList<>(); + startLMS(); + startRM(); + startTS(); switch (type) { case 0: - result = new ArrayList<>(); //der alg der gewählt wurde if (alg == 0) { startLMS(); @@ -106,12 +123,9 @@ public class EvaluateAlgorithms extends Observable { sendTableApproximationData(result, alg); break; case 1: - result = new ArrayList<>(); ArrayList lineRes; switch (alg) { case 3: - startLMS(); - startRM(); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]); multipleResults.add(result); @@ -123,12 +137,10 @@ public class EvaluateAlgorithms extends Observable { lineRes = new ArrayList<>(); lineRes.add(lmsRes); lineRes.add(rmRes); - sendPloteLineResults(lineRes, new Integer[]{0, 1}); + sendPloteLineResults(lineRes, new Integer[]{0,1}); + break; case 4: - startLMS(); - startTS(); - result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]); multipleResults.add(result); result = fillPseudoResults(); @@ -142,9 +154,6 @@ public class EvaluateAlgorithms extends Observable { sendPloteLineResults(lineRes, new Integer[]{0, 2}); break; case 5: - startRM(); - startTS(); - result = fillPseudoResults(); multipleResults.add(result); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]); @@ -158,10 +167,6 @@ public class EvaluateAlgorithms extends Observable { sendPloteLineResults(lineRes, new Integer[]{1, 2}); break; case 6: - startLMS(); - startRM(); - startTS(); - result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]); multipleResults.add(result); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]); @@ -266,8 +271,9 @@ public class EvaluateAlgorithms extends Observable { } public void startLMS() throws InterruptedException { + lmsThread = new Thread(() -> { - LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(arrangement.getLines(), arrangement.getNodes()); + LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(lmsL,lmsP); lmsAlg.run(); lmsAlg.getResult(); lmsRes[0] = lmsAlg.getSlope(); @@ -279,7 +285,7 @@ public class EvaluateAlgorithms extends Observable { public void startRM() throws InterruptedException { rmThread = new Thread(() -> { - RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(arrangement.getLines()); + RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(rmL); rmAlg.run(); rmAlg.getResult(); rmRes[0] = rmAlg.getSlope(); @@ -287,11 +293,12 @@ public class EvaluateAlgorithms extends Observable { }); rmThread.start(); rmThread.join(); + } public void startTS() throws InterruptedException { tsThread = new Thread(() -> { - TheilSenEstimator tsAlg = new TheilSenEstimator(arrangement.getLines(), arrangement.getNodes()); + TheilSenEstimator tsAlg = new TheilSenEstimator(tsL,tsP); tsAlg.run(); tsAlg.getResult(); tsRes[0] = tsAlg.getSlope(); @@ -302,34 +309,40 @@ public class EvaluateAlgorithms extends Observable { } - public ArrayList getScaleDependentMeasure(LinkedList lines, Double m, Double b) { + public ArrayList getScaleDependentMeasure(final LinkedList lines, final Double m, final 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()); + ret.add(m.toString()); + ret.add(b.toString()); return ret; } - public ArrayList getPercentigeErrorBasedMeasure(LinkedList lines, Double m, Double b) { + public ArrayList getPercentigeErrorBasedMeasure(final LinkedList lines, final Double m, final 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()); + ret.add(m.toString()); + ret.add(b.toString()); return ret; } - public ArrayList getScaledErrorBasedMeasure(LinkedList lines, Double m, Double b) { + public ArrayList getScaledErrorBasedMeasure(final LinkedList lines, final Double m, final 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()); + ret.add(m.toString()); + ret.add(b.toString()); return ret; } @@ -339,10 +352,11 @@ public class EvaluateAlgorithms extends Observable { result.add(" "); result.add(" "); result.add(" "); + result.add(" "); + result.add(" "); return result; } - public LinkedList getData() { return arrangement.getLines(); } diff --git a/src/main/java/view/panels/EvaluationPanel.java b/src/main/java/view/panels/EvaluationPanel.java index f76ea8c..ae6be4a 100644 --- a/src/main/java/view/panels/EvaluationPanel.java +++ b/src/main/java/view/panels/EvaluationPanel.java @@ -149,7 +149,6 @@ public class EvaluationPanel extends JPanel { //Tabelle - model.setColumnIdentifiers(selections); table.setDragEnabled(true); JScrollPane scrollPane = new JScrollPane(table); @@ -293,9 +292,9 @@ public class EvaluationPanel extends JPanel { String[] name = {"LMS", "RM", "TS"}; for (Double[] o : alg) { - Double m = o[1]; - Double b = o[1]; int i = o[0].intValue(); + Double m = o[1]; + Double b = o[2]; plotPanel.addLineToPlot(m, b, color[i], name[i]); } }