Bug: Motion Primitive zu langsam


Im Rahmen eines kleinen Programmierprojektes bin ich da auf ein Problem gestoßen. Und zwar versuche ich, an eine Box2D Physik-Engine Motion Primitive zu senden, mit dem Ziel darüber einen Planner zu konstruieren. Vom technischen her funktioniert es auch ganz gut, das Problem ist die Performance. Aktuell benötigt die Software rund 1 Sekunde pro Motion Primitive. Das heißt, eine Aktion wie „slideleft“ wird an die Box2D Engine gesendet, dort wird die Updatefunktion mehrmals aufgerufen, und bis das fertig ist, sind rund 1 Sekunde vergangen. Wenn man eine kurze Sequenz aus 3 Motion Primitiven sendet sind es bereits 3 Sekunden. Damit der Solver eine Lösung findet, müssen rund 100 solcher Sequenzen durchprobiert werden, eigentlich noch mehr aber 100 ist die Untergrenze. Das dauert jedoch nach Adam Riese bereits 300 Sekunden.

Erwähnen sollte ich noch, dass die Software selbstverständlich in Python programmiert wurde. Ein Umsteig auf C++ würde eine Performance-Verbesserung um den Faktor 4 erbringen, wäre also nicht wirklich schneller. Was ist zu tun, wie kann man die benötigte Zeit auf weniger als 1 Sekunde drücken?

Ich habe schon überlegt, ob man die Physik-Engine nicht einfach durch eine selbst programmierte abstrakte Game-Engine ersetzen kann, wo man also in kürzerer Zeit ermittelt was passiert wenn man das Motion Primitive ausführt. Das Problem ist, dass es sich um eine cluttered Szene handelt, man also exakt berechnen muss wo die Objekte gerade sind, und das geht nur mit Box2D. Ebenfalls darüber nachgedacht habe ich schon, ob man nicht einfach auf den Solver verzichten kann, und das Problem stattdessen mit linguistischen Begriffen modelliert. Also eine Art von semantischen Netz aufstellt um darüber dann eine Lösung zu finden. Das Problem ist nur, dass es keine Begriffe gibt um cluttered Szenen korrekt begrifflich zu beschreiben. Man kann ja schlecht sagen, Objekt1 liegt schräg auf Objekt2, während Objekt2 droht umzukippen.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s