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
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Aufgabe</strong> 3<br />
Stefan Hansch, Markus Wirsing, <strong>Matthias</strong> <strong>Springer</strong><br />
2.2 Die Wahrscheinlichkeitsfunktion<br />
Der Wert der Wahrscheinlichkeitsfunktion ergibt sich, indem die Differenzen einer<br />
Geschwindigkeit zu allen Geschwindigkeiten in der Log-Datei aufsummiert<br />
werden (siehe Lösungsidee). Dazu wird die Wahrscheinlichkeitsfunktion bei jedem<br />
Aufruf neu berechnet. Es wäre möglich, diesen Vorgang etwas effizienter<br />
zu gestalten, indem die Durchschnittsgeschwindigkeit verwendet wird, jedoch<br />
ergibt sich dadurch effektiv nur ein geringer Laufzeitgewinn, da es sich bei den<br />
<strong>BWINF</strong>-Testfällen um kleine Eingabedaten handelt.<br />
Nach dem Einlesen der Eingabedateien gilt es, die Wahrscheinlichkeitstabelle<br />
aufzubauen. Da in der Log-Datei nur Zeitangaben und Positionswerte eingetragen<br />
sind, müssen Geschwindigkeiten aus diesen Daten berechnet werden. Nach<br />
diesem Vorgang ist für jedes Paar von aufeinanderfolgenden Log-Einträgen ein<br />
entsprechender Geschwindigkeitseintrag vorhanden (Array db p segment).<br />
√<br />
(db pos x[i+1]−db pos x[i])2 +(db pos y[i+1]−db pos y[i]) 2<br />
Definition 3 Jeder Eintrag im Geschwindigkeitsarray ergibt sich durch die Formel<br />
db p segment[i] =<br />
db time[i+1]−db time[i]<br />
. Dabei<br />
bezeichnen der im Zähler stehende Term den geometrischen Abstand zweier<br />
Punkte und der im Nenner stehende Term den zeitlichen Abstand zweier Punkte.<br />
Nun iteriert das Programm über alle Punkte in der Log-Datei und sucht für<br />
jeden solchen Punkt den wahrscheinlichsten Nachfolger. Dazu wird die Wahrscheinlichkeitsfunktion<br />
auf jeden potentiellen Nachfolger eines solchen Punktes<br />
angewendet. Als Eingabe erwartet die Wahrscheinlichkeitsfunktion eine Geschwindigkeit<br />
die sich analog zu Definition 3 ergibt, nur dass es sich nun nicht<br />
notwendigerweise um aufeinanderfolgende Punkte handeln muss. Je kleiner die<br />
Ausgabe der Wahrscheinlichkeitsfunktion ist, desto wahrscheinlicher ist es, dass<br />
der aktuelle Punkt der beste Nachfolger ist.<br />
In der Funktion db p getProbability wird die Summe der Geschwindigkeitsdifferenzen<br />
wird durch die Durchschnittsgeschwindigkeit und durch n−1 geteilt<br />
(n ist die Anzahl der Punkte). Dadurch erhält man sozusagen eine prozentuale<br />
Abweichung von der Durchschnittsgeschwindigkeit. Ursprünglich hatte ich eine<br />
andere Idee, die ich jedoch aus Zeitgründen nicht realisieren konnte (deshalb so<br />
umständlich). Im Kapitel Lösungsidee wurde bereits angedeutet, wie eine Wahrscheinlichkeitsfunktion<br />
aussehen kann. Ich habe schließlich keine Exponentialfunktion<br />
gewählt. Stattdessen wird die Anzahl der übersprungenen Punkte mit<br />
dem Faktor 0, 45 gewichtet und einfach aufaddiert. Der Nachteil dieser Methode<br />
liegt darin, dass sie speziell auf die in den Testfällen auftretenden Geschwindigkeiten<br />
optimiert ist. Diese Geschwindigkeiten wirken sich auf die Ausgabe<br />
der Wahrscheinlichkeitsfunktion (Funktion db p getProbability, ohne Beachtung<br />
der übersprungenen Punkte) aus. Wenn sich Dominic nun beispielsweise immer<br />
doppelt so schnell bewegt, oder allgemein die auftretenden Geschwindigkeiten<br />
zwischen zwei aufeinanderfolgenden Punkten proportional zueinander um einen<br />
relativen Wert vergrößert werden, nimmt der Einfluss der übersprungenen Punkte<br />
ab. Man müsste in diesem Fall den Faktor 0, 45 ebenfalls vergrößern, nämlich<br />
um den Faktor 2.<br />
Man könnte das Problem auch lösen, indem man den Wert nicht aufaddiert,<br />
sondern multipliziert. Dann müsste man aber einen anderen Faktor als 0, 45<br />
verwenden. In meinen eigenen Versuchen habe ich mit dem Aufaddieren die<br />
besten Ergebnisse erzielt.<br />
9