Hallo
Wollte mal ein kleinen "racer" programmieren der sich selber den weg durch einen tunnel sucht ohne etwas zu machen also er soll den weg von start zu ziel komplett alleine finden und das soll auch noch in einer schnelleren zeit gehen. Ich habe mich dieser Idee etwas länger gewidmet und habe kein überzeugendes ergebnis bekommen. Deswegen Frage ich euch habt ihr vielleicht eine Idee wie man so einen "racer" prgrammieren könnte ?
Danke schon einmal im Vorraus
bin auf eure vorschläge gespannt
Offline
Bitte Beachte Korrekte Titelsetzung
----------------------------------------------------------------
Könntest du das ein bisschen genauer erklären?
Ich verstehe irgendwie nicht genau was du willst...
Was meinst du mit "Tunnel"?
Es gibt doch so ein Beispiel Projekt "MarbleRacer".
Möchtest du so etwas programmieren nur, dass der Ball automatisch seinen Weg findet?
Offline
Hi thelop1,
Du solltest mal hochladen was Du bisher hast, da-mit wir verstehen können was Du meinst. Auf Deiner Benutzerseite ist ja bisher kein einziges Projekt.
Last edited by MartinWollenweber (2012-04-03 18:03:15)
Offline
Meinst du das so: http://oi41.tinypic.com/2ryj3sy.jpg? Ich bin mir auch nicht ganz sicher, wie man das machen kann, aber vielleicht hilft dir ja die folgende Idee weiter:
Der Racer hat oben, unten, links und rechts "Sensoren" in verschiedenen Farben (die Punkte, auf dem Bild). Der Rand ist Schwarz ...
Wenn der obere gelbe Sensor eine schwarze Wand berührt, muss der Racer solange nach unten fahren, bis das nichtmehr der Fall ist.
Wenn der untere rote Sensor auf die schwarze Wand trifft, muss der Racer wieder nach oben fahren.
Mit dem pinken Sensor links und dem grünen rechts ist es das selbe.
Die Befehle die du brauchst sind also:
+ falls Farbe (rot/grün/pink/gelb) berührt Farbe (schwarz)
+ wiederhole bis nicht farbe (rot/grün/pink/gelb) berührt (schwarz)
Das ganze wird natürlich schwieriger, wenn das Auto sich drehen kann, denn dann kann der obere gelbe Sensor ja auch mal rechts sein oder unten.
Ich hoffe das hilft dir weiter
Offline
Ach so meinst Du das: Tja, wenn Du Dein Problem so stellen willst ist das natürlich noch viel komplizierter als die Lösung eines normalen Labyrinthes: Normalerweise geht man bei einem Labyrinth-Algorithmus davon aus, das an jeder Abzweigung einfach nur eine Entscheidung getroffen werden muss, welchen der Wege man geht (z.B. Weg A oder Weg B). So kann man die Lösung einfach z.B. so aufschreiben ABAAABBAB. Immer wenn man in einer Sackgasse landet, geht man zurück und trifft die andere Entscheidung (rekursiv programmierbar), bis der richtige Weg gefunden ist. Hier ist ein entsprechendes Beispielprojekt aus meinen Favoriten, bei dem zuerst ein zufälliges Labyrinth erzeugt wird, dann der Weg vom Start zum Ziel gesucht wird, mit genau der oben beschriebenen Methode, und dann der gefundene optimale Weg zurückgegangen und eingezeichnet wird: Random Maze Generator.
Was Du aber in Deinem Projekt Tunnel machen willst , ist ja viel kniffeliger als das: Du kannst da ja in alle Richtungen gehen, nicht nur in vier Richtungen. Und Du kannst das zu jeder Zeit tun, nicht nur dann wenn eine Abzweigungsentscheidung getroffen werden muss: Anstatt einer Entscheidung für 1-4 Richtungen bei jeder Abzweigung des Labyrinthes, kannst Du also 360 Richtungen an jedem Punkt des Labyrinthes wählen + Deine Gänge sind unterschiedlich breit...
...dadurch bekommt Dein Problem eine gigantische Menge mehr Freiheitsgrade als Random Maze Generator. Braucht man dafür schon so etwas wie KI?
Aber Du kannst die Freiheitsgrade wieder einschränken, indem Du einfach immer an der Wand lang gehst und den Pledge-Algorithmus benutzt. An der Wand lang gehen könntest Du mit einem "Farbfühler" in Scrartch programmieren.
Hier noch mehr Informationen zu Irrgärten und Algorithmen um sie zu lösen.
und wer es ganz wissenschaflich haben will, kann hier nachlesen: Algorithmen zur Pfadplanung.
Last edited by MartinWollenweber (2012-04-06 05:11:32)
Offline
Ich habe eine Möglichkeit gefunden! siehe hier
Wenn du eine erklärung dazu willst, sag bescheid
Offline
Die Lösung von xJira ist ziemlich cool: Der "Racer" schießt zuerst einmal im Kreis 360 Grad um sich herum, bestimmt damit die Wand die am weitesten entfernt ist, dreht sich in diese Richtung und bewegt sich etwas weniger weit als die bestimmte weiteste Schussweite. Anschliessend wiederholt er die Prozedur solange, bis er im farblich markierten Ziel des Labyrithes angekommen ist, schießt aber keinen vollen 360 Grad Kreis mehr sonden immer nur 180 Grad in die Richtung, in die er zuletzt gelaufen ist: Damit wird ziemlich gut verhindert, dass er wieder zurückläuft, aber es kommt auf das Labyrinth an, ob das wirklich funktioniert. Dies ist auch die Schwäche der einfachen aber genialen Lösung von xJira: Sie funktioniert in einer grossen Gruppe von Labyrinthen, aber in einer noch viel grösseren nicht. Natürlich ist sie auch keine echte Lösung für Labyrinthe mit Abzweigungen und Sackgassen: Die Labyrinthe müssen aus einem einfachen Weg der genau zum Ziel führt bestehen, der auch noch bestimmte Eigenschaften haben muss, damit der Racer nicht wieder zurück läuft. Hat jemand eine Lösung die für eine grössere Gruppe, oder sogar alle möglichen Labyrinthe funktioniert?
Last edited by MartinWollenweber (2012-04-06 05:10:41)
Offline
Echt super lösung habe aber noch einen freund gefragt und wir haben zusammen eine finde ich ganz geniale lösung gefunden. Kann sie zwar leider der zeit nicht hochladen weil sie bei ihm auf dem Computer is werde es aber noch machen also wen unsere lösung noch intressiert kann dann mal in ein paar tagen wieder vobei gucken . Danke Für die super hilfe von euch allen.
Offline