Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #4476

Re: [Python-de] RRT mit Python

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 | NextPrevious in thread | Next in thread | Find similar


Thread

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