fix in der Visualisierung der Evaluation

This commit is contained in:
Armin Wolf 2017-09-12 07:58:33 +02:00
parent 634d9361ea
commit c4cb0ca3e7
2 changed files with 40 additions and 27 deletions

View File

@ -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<Line> lmsL;
private LinkedList<Line> rmL;
private LinkedList<Line> tsL;
private LinkedList<Point> lmsP;
private LinkedList<Point> 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<String> result;
ArrayList<ArrayList<String>> 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<Double[]> 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<String> getScaleDependentMeasure(LinkedList<Line> lines, Double m, Double b) {
public ArrayList<String> getScaleDependentMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b);
ArrayList<String> 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<String> getPercentigeErrorBasedMeasure(LinkedList<Line> lines, Double m, Double b) {
public ArrayList<String> getPercentigeErrorBasedMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
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());
ret.add(m.toString());
ret.add(b.toString());
return ret;
}
public ArrayList<String> getScaledErrorBasedMeasure(LinkedList<Line> lines, Double m, Double b) {
public ArrayList<String> getScaledErrorBasedMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
ScaledErrorBasedMeasure scaledErrorBasedMeasure = new ScaledErrorBasedMeasure(lines, m, b);
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());
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<Line> getData() {
return arrangement.getLines();
}

View File

@ -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]);
}
}