Logikfrage: Raster mit Marken


  • Mod

    Füge jeder Marke eine Charakteristik hinzu. Diese ist 0, falls sich im gesamten Raster links über ihr keine anderen Marken befinden und ansonsten N+1, wobei N die Marke mit der größten Charakteristik im Raster links über ihr ist.

    Der Pfad mit der höchsten Zahl sammelbarer Marken kann rückwärts konstruiert werden, indem man vom Endpunkt zur Marke mit der größten Charakteristik geht und von dort aus immer zu einer Marke mit Charakteristik N-1 geht, wobei N die Charakteristik der aktuellen Marke ist. Gibt es mehrere solcher Marken, so gibt es auch mehrere Pfade, die aber gleichwertig sind.


  • Mod

    Hier eine Demo und ein möglicher Algorithmus zur Charakterisierung der Marken. Wobei es für letzteres sicherlich auch noch bessere Methoden gibt:
    http://postimg.org/image/u4saoyjz7/



  • @SeppJ: im Prinzip ist das ein dynamisches Programm: der Eintrag für jeden Knoten ist das Maximum aller Einträge von Marken die links oberhalb von ihm liegen. Damit kann man die Tabelle relativ leicht ausfüllen.

    Eine andere Möglichkeit (basiert letztlich auf derselben Idee) ist die folgende:

    Du baust Dir einen Graphen wie folgt:
    - ein Knoten pro Marke
    - eine gerichtete Kante von Marke a zu Marke b wenn b von Kante a mit einem gültigen Pfad erreichbar ist (a also links oberhalb von b liegt)

    Der resultierende Graph G ist ein gerichteter azyklischer Graph (DAG). Nun suchst Du einen längsten Pfad in diesem Graphen; hierfür gibt es fertige Algorithmen.



  • Jester schrieb:

    Nun suchst Du einen längsten Pfad in diesem Graphen; hierfür gibt es fertige Algorithmen.

    Die Suche nach dem laengsten Pfad ist normalerweise nicht so gut, oder? Wegen der Komplexitaet. Ich weiss allerdings nicht, ob hier vielleicht ein Spezialfall vorliegt.

    Ich wuerde das eher als ein Kuerzester Pfad Problem formulieren. Alle Felder, in denen Marken sind, kriegen Kosten <1, die leeren Felder hingegen Kosten >=1. Wenn man das dann mittels Dynamic Programming loest, ist man wieder bei SeppJs Loesung.



  • Gregor schrieb:

    Jester schrieb:

    Nun suchst Du einen längsten Pfad in diesem Graphen; hierfür gibt es fertige Algorithmen.

    Die Suche nach dem laengsten Pfad ist normalerweise nicht so gut, oder? Wegen der Komplexitaet. Ich weiss allerdings nicht, ob hier vielleicht ein Spezialfall vorliegt.

    Wie ich sagte ist das ein DAG, da kann man auch längste Wege berechnen, sogar kürzeste Wege wenn die Gewichte beliebig (auch negativ) sind.

    Deine Umschreibung als Kürzeste-Wege-Problem funktioniert nur wenn alle Wege von der Quelle zum Ziel dieselbe Hop-Länge (Anzahl der Knoten/Kanten auf dem Weg) haben. Das ist hier der Fall. Gilt es nicht, kann man die Pfadlänge und die aufgesammelten Knoten gegeneinander ausspielen und optimiert dann eher sowas wie Anzahl der aufgesammelten Marken pro besuchten Knoten -- das ist meist nicht das was man will.



  • Brute Force, (+Wegeschablonen). Machen Staubsauger glaube ich auch so 😉 .
    Wo kommt die Übersicht her? Gibt es einen "Vorhersage-Cache" für x Felder/x Vektoren?

    (Die Problematik erinnert an "Vier gewinnt")


  • Mod

    wirrinirr schrieb:

    Brute Force, (+Wegeschablonen).

    Wo bekommst du die Schablonen her? Wozu braucht man überhaupt Schablonen, wenn man sowieso alle Pfade abdecken möchte? Wann ist Brute Force jemals die beste Antwort auf irgendwas?

    Machen Staubsauger glaube ich auch so 😉 .

    Staubsauger machen einen Random-Walk, das ist ganz was anderes. Und sie haben eine ganz andere Aufgabe, nämlich möglichst das ganze Feld abzudecken, nicht auf einer Fahrt möglichst viel einzusaugen.

    (Die Problematik erinnert an "Vier gewinnt")

    Soll dieser Beitrag eine Parodie auf Furble Wurble sein?



  • [quote="SeppJ"]Staubsauger machen einen Random-Walk, das ist ganz was anderes. Und sie haben eine ganz andere Aufgabe, nämlich möglichst das ganze Feld abzudecken, nicht auf einer Fahrt möglichst viel einzusaugen.
    [quote]

    Naja, also genau genommen würde es mir ja reichen wenn er die Stellen abfährt wo Dreck ist -- die allerdings alle und nicht nur möglichst viele während er von der Ecke des Raums wo ich ihn abgesetzt hab zur Ladestation fährt. 😉


  • Mod

    Wenn der Staubsauger die Möglichkeit hätte, den Raum gezielt nach Dreck abzuscannen, dann wäre das sicher eine gute Idee, da es sehr viel Energie und Zeit spart. Aber ich glaube, die Robotik ist da noch nicht ganz so weit 🙂

    Und der Staubsauger müsste dann für den optimalen Pfad das Traveling Salesman Problem lösen, was viel interessanter ist!



  • SeppJ schrieb:

    Und der Staubsauger müsste dann für den optimalen Pfad das Traveling Salesman Problem lösen, was viel interessanter ist!

    Das ist ein euklidisches Traveling Salesman Problem. Das kann man zumindest effizient approximativ mit einer Garantie bezueglich der maximalen Abweichung vom Optimum loesen.


Anmelden zum Antworten