Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #4476
| Path | csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail |
|---|---|
| From | Stefan Schwarzer <sschwarzer@sschwarzer.net> |
| Newsgroups | de.comp.lang.python |
| Subject | Re: [Python-de] RRT mit Python |
| Date | Sat, 25 Jun 2016 10:32:08 +0200 |
| Lines | 92 |
| Message-ID | <mailman.113.1466843535.11516.python-de@python.org> (permalink) |
| References | <c72daf0d-d11b-41f0-9299-03b23f870ac7@googlegroups.com> <cace6aef-3155-6224-67a6-990103097e0d@sschwarzer.net> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=windows-1252 |
| Content-Transfer-Encoding | 8bit |
| X-Trace | news.uni-berlin.de ZdCYLh+4KRTWzT3iXa2yTg+UdgYLAfvT8Mc5zPvPK7EQ== |
| Return-Path | <sschwarzer@sschwarzer.net> |
| X-Original-To | python-de@python.org |
| Delivered-To | python-de@mail.python.org |
| User-Agent | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666 |
| In-Reply-To | <c72daf0d-d11b-41f0-9299-03b23f870ac7@googlegroups.com> |
| X-Provags-ID | V03:K0:8ldbhxLlfYHKvHOF0i6Bnlbw3+40bBLeAb9dXOKRPSVhsXoaC7A NenvMmqFYUvOqnQ3jPRSp46GMXhmEHSnivJ2BLckPOmnzvj+TgzKURN1waozYU4ADpplSoZ jQuT5Ypjjv+vAmtgBT7SZ396XjXPqT1E9MweyKXggUSxe0I7XnUeGFJf2ZgvOplUMp1K0T+ WxoZxToxky2HoogIKFtww== |
| X-UI-Out-Filterresults | notjunk:1;V01:K0:Bf0pdPviU0s=:8MoIAV49AofN9UUEs5gomE KG/vI2Yi+ltanyq+Xy4RlmpCHgQ1bDuVV+YVsiRb4tnfu5LlgWm7jjO2q01+LACJG/o6dHY6w YVbJvo6mtP4yZFcc+Ds93hip9juNAongJi1HRxvqjoOil1lhqPU04sPkrQZCJwgZNN9POa30T xc6bLD8My0sc8mu4zWEVCsU8z20/4ruVT2yE0g1A4a+TicuMZJPGNzMLcqo9aIB+2F79cmSaY q6r2QcLXAQ53TErv8MSN0ZI/NBqw/N8/fP6RPpNO0CxlfPmmG3l01+g+pzzOqERxJvMCnTHRR ZBUs+mcxdwUTJt2RpZvmCBF6MpibjIM7Y8rD6CTN+HSifX6yTTKesHFZ60xoUq/Bb5TQL85wL NczBR/VmEudm23ubxzw36eTtLCtG6XoXIeTPOroUjSogSGqDT+/+zJYXpDOTskIKxQRCLeJXT LCBKNPMPIrm2YnW5iZW8j35GqUp7xNO9ExoGGytHQyjwF43xwrtmbbGahK4/Hi8Lv8m8AkQrs n58GYKKQWEObu696eNyMHRQ6oPVoessjKsHMT8xMYjaAXiT11gYb1FjlOxnV7avmuZr3AZy2t Vc8NOAkaSQzHqnK/sDD7oqp+jTJUeNb/eKP88AX/ngd0hKWnWdwlic/KGht9VilxLcFkk520S zuzRMNRmDXDvcgs858pmsq5S5JS7c8Eg/z1idQ90AzfHMaoaAlptr6JYmfOtjfHZp35m5C7pt JHWAguQkbWFm6KtJ |
| X-BeenThere | python-de@python.org |
| X-Mailman-Version | 2.1.22 |
| Precedence | list |
| List-Id | Die Deutsche Python Mailingliste <python-de.python.org> |
| List-Unsubscribe | <https://mail.python.org/mailman/options/python-de>, <mailto:python-de-request@python.org?subject=unsubscribe> |
| List-Archive | <http://mail.python.org/pipermail/python-de/> |
| List-Post | <mailto:python-de@python.org> |
| List-Help | <mailto:python-de-request@python.org?subject=help> |
| List-Subscribe | <https://mail.python.org/mailman/listinfo/python-de>, <mailto:python-de-request@python.org?subject=subscribe> |
| X-Mailman-Original-Message-ID | <cace6aef-3155-6224-67a6-990103097e0d@sschwarzer.net> |
| X-Mailman-Original-References | <c72daf0d-d11b-41f0-9299-03b23f870ac7@googlegroups.com> |
| Xref | csiph.com de.comp.lang.python:4476 |
Show key headers only | View raw
On 2016-06-24 21:37, Manuel Rodriguez wrote: > das ist mein erstes Posting hier in der Gruppe. Keineswegs soll hier > der Versuch unternommen werden, Python schlechtzumachen, ganz im > Gegenteil. Python ist eine der besseren Programmiersprachen. Besonders > bemerkenswert ist die Eigenschaft in wenigen Zeilen Code elaborierte > Programme zu schreiben. Und wirklich langsam ist Python auch nicht, > weil es jedem frei steht, Erweiterungsbibliotheken in purem C-Code zu > schreiben und über import einzubinden. Danke für deine freundliche Einleitung. Willkommen! :-) Ich kenne mich mit deinem Fachgebiet nicht wirklich aus, deshalb stochere ich im Folgenden etwas im Nebel. > Aber genug der Vorrede, ich möchte zum eigentlichen Thema kommen. Und zwar > habe ich mir für den Anfang ein Problem aus der Robotik herausgesucht > und zwar die Erstellung eines Rapidly-exploring random tree (RRT). Der > soll mit Hilfe von unterschiedlichen Instanzen von Box2D arbeiten um so > als Solver zu fungieren. > > Eine erste Version ist bereits erstellt, keine Angst den Sourcecode gibt > es hier nicht zu sehen. Ironischerweise könnte der Sourcecode sogar helfen, weitere Vorschläge zu machen (siehe unten). Sicher kommt es auch darauf an, wie viel Code es ist. Wenn es sehr viel ist, rümpfen vielleicht manche die Nase. ;-) > Vielmehr geht es allgemein darum, wie man ein > derartiges Problem struktuiert. In der aktuellen Version wird der RRT > Tree als Klasse implementiert und die einzelnen Nodes als Array innerhalb > dieser Klasse. Leider hat das zur Folge, dass das etwas unübersichtlich > ist. Es gibt ziemlich viele Methoden und noch mehr Variablen. Erschwerend > kommt hinzu, dass man dabei sowohl in der Zeit vorwärtsgeht als auch > unterschiedliche Abzweigungen verwaltet. > > Die generelle Frage die mich umtreibt ist, ob und welche > Datenstrukturen man einsetzen sollte, für derartige Probleme. Eine > Recherche bei Google hat bisher nur wenig Informationen gebracht. Es > gibt einerseits die RRT Tree Referenzimplementierung von Lavelle, > http://msl.cs.uiuc.edu/~lavalle/code.html und zum anderen einen > ausgewachsenen Motion Planner genannt OMPL. Die Lavelle Version ist zwar > schön übersichtlich, ist jedoch nicht dafür gedacht um unterschiedliche > Physik-Engine-Instanzen zu verwalten. Die OMPL Software hingegen ist > zwar leistungsfähig, setzt aber auf C++ als Programmiersprache und ist > didaktisch gesehen eine Katastrophe. Du fragst nach Datenstrukturen, aber wenn du nicht gerade ein Performance-Problem hast, sind dein Problem vielleicht gar nicht die Datenstrukturen, sondern die Programmierschnittstellen. Manche ekligen Datenstrukturen verlieren ihren Schrecken, wenn man sie hinter einer intuitiven API verstecken kann. Achte beim Entwurf der API darauf, dass sie deinem Denken über die zu lösenden Probleme entspricht. Du solltest dich also auf einem eher hohen als niedrigen Abstraktionsniveau bewegen. Mach es aber nicht _zu_ abstrakt, das macht es auch wieder kompliziert. Es kann auch helfen, die API iterativ zu entwickeln, sie also erst mal für einfachere Probleme zu entwerfen und sie dann für komplexere Probleme umzubauen. Das reduziert die Wahrscheinlichkeit, den Wald vor lauter Bäumen nicht mehr zu sehen. Mit einiger Wahrscheinlichkeit wirst du mehrere API-Ebenen brauchen, um das ganze übersichtlich zu halten. Unter Umständen ist der beste Ansatz, eine der vorhandenen Bibliotheken mit einer "denkfreundlicheren" API zu kapseln. > RRT Bäume sind eng verwand mit Backtracking und A* Algorithmen. Hier wird > häufig Rekursion eingesetzt die auch in Python realisierbar wäre. Aber, > Rekursion ist nicht gerade etwas, was leicht verständlich ist. Gibt es > womöglich noch etwas, was ich übersehen habe? Ja, Rekursion ist manchmal nicht leicht verständlich. Ich denke aber, dass man Rekursion einsetzen sollte, wenn das Problem "natürlicherweise" rekursiv ist. Ein Beispiel ist die Iteration über Baumstrukturen. Netterweise kann man aber die Rekursion oft hinter einer nicht-rekursiven API verstecken. Ein Beispiel ist `os.walk` in der Standardbibliothek. Du kannst in Python die Iteration über Datenstrukturen oft sehr schön mit Generator-Funktionen verstecken (Stichwort: `yield`). Ich fand Rekursion auch mal kompliziert und unübersichtlich, aber es ist auch Gewöhnungssache. Ich habe festgestellt, dass Rekursion für mich intuitiver wurde, als ich mich mit funktionaler Programmierung (am Beispiel Haskell) beschäftigte. Davon profitiere ich auch jetzt noch. :-) Viele Grüße Stefan
Back to de.comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
RRT mit Python Manuel Rodriguez <aa5@gmx.net> - 2016-06-24 12:37 -0700
Re: [Python-de] RRT mit Python Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2016-06-25 10:32 +0200
Re: [Python-de] RRT mit Python Manuel Rodriguez <aa5@gmx.net> - 2016-07-02 13:11 -0700
Re: [Python-de] RRT mit Python "Dr. Volker Jaenisch" <volker.jaenisch@inqbus.de> - 2016-06-25 19:42 +0200
Re: [Python-de] RRT mit Python Manuel Rodriguez <aa5@gmx.net> - 2016-07-02 13:14 -0700
csiph-web