From 9055177bab6797747c220383c602ededd4e2a548 Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Tue, 13 Jun 2017 20:51:43 +0200 Subject: [PATCH] LMS fertig --- .../LeastMedianOfSquaresEstimator.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java b/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java index 816e4ff..e7d3224 100644 --- a/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java +++ b/src/main/java/Presenter/Algorithms/LeastMedianOfSquaresEstimator.java @@ -66,6 +66,7 @@ public class LeastMedianOfSquaresEstimator extends Algorithm { slabs = new PriorityQueue<>(comparator); slabs.add(new Slab(-100000, 100000)); heightsigmaMin = Double.MAX_VALUE; + LinkedList tmpIntersections = intersections; //(3.) Apply the following steps as long as the exists active slabs boolean active = true; @@ -82,19 +83,32 @@ public class LeastMedianOfSquaresEstimator extends Algorithm { sigmaMin = planeSweep(slab); } else {//(c.) otherwise.... //get random intersections point... - splitActiveSlab(intersectionsPoint, slab); - - //(d.) this may update sigma min - upperBound(intersectionsPoint); - //(e.) for i={1,2}, call lower bound(Ui) - lowerBound(subSlabU1); - lowerBound(subSlabU2); - - if (subSlabU1.getActivity()){ - this.slabs.add(subSlabU1); + Double randomIntersection = null; + Collections.shuffle(tmpIntersections, new Random()); + for (Point point : tmpIntersections) { + if (point.getX() > slab.getLower() && point.getX() < slab.getUpper()) { + randomIntersection = point.getX(); + break; + } } - if (subSlabU2.getActivity()){ - this.slabs.add(subSlabU2); + + if (randomIntersection != null){ + splitActiveSlab(randomIntersection, slab); + + //(d.) this may update sigma min + upperBound(intersectionsPoint); + //(e.) for i={1,2}, call lower bound(Ui) + lowerBound(subSlabU1); + lowerBound(subSlabU2); + + if (subSlabU1.getActivity()){ + this.slabs.add(subSlabU1); + } + if (subSlabU2.getActivity()){ + this.slabs.add(subSlabU2); + } + } else { + this.slabs.poll(); } } } else { @@ -124,23 +138,9 @@ public class LeastMedianOfSquaresEstimator extends Algorithm { numberOfInversions = mergeSort(umin, 0, umin.size() - 1, umax); - for (Point point : intersections) { - if (point.getX() > slab.getLower() && point.getX() < slab.getUpper()) { - randomIntersection.add(point.getX()); - } - } - - Collections.shuffle(randomIntersection); - int access = (int) ( randomIntersection.size() * 0.5); - if (!randomIntersection.isEmpty()){ - intersectionsPoint = randomIntersection.get(access); - } - return numberOfInversions; } - //Parameter anpassen - /** * Angepasster Merge-Sort Algorithmus. * Die Funktion bekommt neben den standard Parametern zusätzlich eine Liste mit Elementen