13.11.2014 Aufrufe

28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE

28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE

28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Aufgabe</strong> 3<br />

Stefan Hansch, Markus Wirsing, <strong>Matthias</strong> <strong>Springer</strong><br />

sehr große Strecken zurückgelegt werden. Eine Wahrscheinlichkeitsfunktion soll<br />

nun für jede beliebige Geschwindigkeit (velocity) eine Aussage darüber geben,<br />

wie wahrscheinlich es ist, dass sich Dominic mit dieser Geschwindigkeit fortbewegt.<br />

Dazu iteriert das Programm über alle GPS-Koordinaten und berechnet<br />

die Geschwindigkeit, mit der sich Dominic zum nächsten Punkt fortbewegt<br />

(Geschwindigkeit = Strecke / Zeit, Array db p segment). Eine Geschwindigkeit<br />

velocity soll genau dann als sehr wahrscheinlich angenommen werden, wenn die<br />

Funktion db p getProbability an dieser Stelle minimal ist.<br />

Definition 2 Die Funktion ist dabei mit db p getProbability(velocity) = ∑ n−1<br />

i=1 v i−<br />

velocity definiert.<br />

Mit Hilfe der Funktion db p getProbability kann also zu jeder beliebigen<br />

Geschwindigkeit velocity ausgesagt werden, wie wahrscheinlich es ist, dass sich<br />

Dominic mit dieser Geschwindigkeit fortbewegt. Dazu werden einfach die Differenzen<br />

zwischen allen Geschwindigkeiten aus der Log-Datei und der Geschwindigkeit<br />

velocity aufsummiert. Die Geschwindigkeiten aus der Log-Datei können<br />

einfach mit der Beziehung Geschwindigkeit = Strecke/Zeit berechnet werden.<br />

Dabei ist Strecke der geometrische Abstand zwischen zwei aufeinanderfolgenden<br />

GPS-Einträgen und Zeit der zeitliche Abstand zwischen den zwei<br />

GPS-Einträgen. Der Term n − 1 in Definition 2 steht für die Anzahl aller<br />

Geschwindigkeits-Daten, die der Log-Datei entnommen werden können, wenn<br />

n Einträge in der Log-Datei vorliegen.<br />

Nach einigen Experimenten, habe ich die Funktion db p getProbability so<br />

abgeändert, dass insgesamt nur Geschwindigkeitsüberschreitungen betrachtet<br />

werden, und keine Unterschreitungen. Dadurch erzielt das Programm bessere<br />

Ergebnisse. Es kann schließlich vorkommen, dass Dominic auch mal langsamer<br />

geht. Nur besonders hohe Geschwindigkeiten sind besonders unwahrscheinlich.<br />

Wenn Fehler in den GPS-Koordinaten auftreten, können diese nicht gänzlich<br />

korrigiert werden. Schließlich kann keine sichere Aussage darüber getroffen werden,<br />

wie sich Dominic wirklich bewegt hat. Es besteht lediglich die Möglichkeit,<br />

bestimmte GPS-Koordinaten als falsch zu deklarieren, wenn es sehr unwahrscheinlich<br />

ist, dass sich Dominic in einem bestimmten Zeitfenster dort hin begeben<br />

hat. Wenn der fehlerhafte Bereich erst einmal identifiziert wurde, kann er<br />

mit sinnvollen Daten ersetzt werden. Ob sich Dominic jedoch wirklich so bewegt<br />

hat, kann man nicht sagen.<br />

Abbildung 1 zeigt einen Weg, den Dominics GPS-Gerät aufgezeichnet hat.<br />

Dabei stellen die schwarzen Linien den korrekt aufgezeichneten Weg dar. Die<br />

roten Linien befinden sich ebenfalls in den GPS-Logs, sind jedoch falsch. Wenn<br />

das Programm erkannt hat, dass der fehlerhafte Bereich zwischen den Punkten<br />

E und H liegt, versucht es, die Logs zu korrigieren. Dazu wählt es die grüne Linie<br />

als Ersatz für die roten Linien. Ob sich Dominic jedoch wirklich so fortbewegt<br />

hat, oder aber so, wie die blauen Linien verlaufen, bleibt ungewiss.<br />

Um nun Fehler in den GPS-Koordinaten zu korrigieren, iteriert das Programm<br />

über alle Punkte aus der Log-Datei (äußere Schleife). Jetzt wird für<br />

jeden solchen Punkt der nächste (darauffolgende) Punkt bestimmt. Dazu iteriert<br />

das Programm über alle Punkte, die zeitlich nach dem aktuellen Punkt<br />

liegen (innere Schleife). Mit Hilfe der Funktion db p getProbability kann nun<br />

bestimmt werden, wie wahrscheinlich es ist, dass der aktuelle Punkt in der innersten<br />

Schleife der Nachfolger des aktuellen Punktes in der äußeren Schleife<br />

4

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!