Ich brauche Hilfe schreiben eine belastbare, Mapping (Graphenbildung) Algorithmus. Hier ist das Problem:Graph Gebäudealgorithmus gegeben einen unendlichen Spaziergang
Stellen Sie sich vor, Sie haben eine Text orientierte virtuelle Realität (TORG/MUD), wo Sie Bewegungsbefehle senden können (n, s, w, e, oben, unten, innen, ... usw.) über Telnet, um deinen Charakter von Raum zu Raum zu bewegen. Und der Server sendet nach jedem Bewegungsschritt eine entsprechende Raumbeschreibung zurück. Ihre Aufgabe besteht darin, ein Diagramm zu erstellen, das die zugrunde liegende Kartenstruktur darstellt, sodass Sie auf der Clientseite einfach ein DFS ausführen können, um herauszufinden, wie Sie von einem Raum zum anderen gelangen. Auch wollen Sie das System so zu gestalten, dass minimale Benutzereingabe
Hier erforderlich sind, um die Annahmen:
Die zugrunde liegende Graph-Topologie auf dem Server ändern sich nie.
Zimmerbeschreibungen sind nicht eindeutig. Die meisten Zimmer haben unterschiedliche Beschreibungen, aber einige der Zimmer haben genau die gleiche Beschreibung. Die Zimmerbeschreibung wird ab und zu (Tage oder Wochen) geändert
Ihre Bewegung kann mit einer kleinen Wahrscheinlichkeit zufällig fehlschlagen und Sie erhalten eine Fehlermeldung anstelle der neuen Raumbeschreibung, wie "Sie hören auf zu warten damit der Wagen vorbeikommt "," Die Tür ist verschlossen ", und dein Charakter wird immer noch im aktuellen Raum sein.
Sie können für jede Bewegung nicht den räumlichen Abstand der Einheit annehmen. Zum Beispiel haben Sie vielleicht eine Topologie wie die unten gezeigte, also wird es nicht funktionieren, die Einheitsdistanz für jedes benachbarte Zimmer anzunehmen und jedem Raum eine harte Koordinate zuzuweisen. Sie können jedoch annehmen, dass die relative Richtung konsistent ist, das heißt, es wird keine Schleife in einer topologischen Sortierung entlang X (Westen, Osten) und Y (Süden, Norden) geben.
Ziel: Bei einem Ziel, das Sie schon einmal besucht haben, garantiert Ihnen der Algorithmus, Sie eventuell dorthin zu bringen, und findet den kürzesten Weg die meiste Zeit. Fehler sind erlaubt, aber der Algorithmus sollte in der Lage sein, die Fehler im laufenden Betrieb zu erkennen und zu korrigieren.
Beispiel grafische Darstellung:
A--B---B
| | <- k
C--D-E-F
Ich habe bereits implementiert eine sehr einfache Lösung, die die Raumbeschreibungen und konstruieren ein Diagramm aufzeichnen würde. Das folgende Beispiel zeigt eine Diagrammdarstellung, die mein Programm in json generiert. Die "Ausgänge" sind die Bewegungsrichtung, die der Knoten-ID zugeordnet ist. -1 repräsentiert einen nicht zugeordneten Raum. Wenn der Benutzer in eine Richtung läuft und in der Diagrammdarstellung eine -1 erkennt, versucht der Algorithmus, Knoten zu finden, die sich bereits im Diagramm befinden. Wenn Knoten mit derselben Beschreibung gefunden werden, wird der Benutzer aufgefordert, zu entscheiden, ob der neu gesehene Raum einer der alten Knoten ist. Wenn nicht, fügt es einen neuen Knoten hinzu und verbindet ihn mit dem Graphen.
"node": [
{
"description": "You are standing in the heart of the Example city. There is a fountain with large marble statue in it...",
"exits": {
"east": -1,
"north": 31,
"south": 574,
"west": 42
},
"id": 0,
"name": "cot",
"tags": [],
"title": "Center of Town",
"title_color": "\u001b[1m\u001b[36m Center of Town\u001b[0;37;40m"
},
{
...
Diese einfache Lösung erfordert beim Erstellen des Graphen menschliche Eingangserkennungsschleifen. In dem oben gezeigten Diagramm wird beispielsweise angenommen, dass dieselben Buchstaben die gleiche Raumbeschreibung darstellen. Wenn Sie mit dem ersten B beginnen, und mit links, unten, rechts ... bis Sie die Bewegung k ausführen, sehen Sie nun wieder B, aber der Mapper kann nicht feststellen, ob es das B ist, das er vorher gesehen hat.
Kurz gesagt möchte ich in der Lage sein, einen resilienten Graphenbildungsalgorithmus zu schreiben, der in einem versteckten Zielgraphen einen Schritt macht (möglicherweise unendlich) und einen Graphen erzeugt (und ständig aktualisiert), der (hoffentlich) dem Ziel ähnlich ist Graph.Wir verwenden dann das generierte Diagramm, um die Navigation im Zieldiagramm zu erleichtern. Gibt es einen bestehenden Algorithmus für diese Kategorie von Problemen?
Ich habe auch darüber nachgedacht, einige maschinelle Lerntechniken auf dieses Problem anzuwenden, aber ich bin nicht in der Lage, ein konkretes Modell zu schreiben. Ich denke an die Definition einer Liste von Funktionen für jeden Raum, den wir sehen (Raumbeschreibung, Ausgänge, Nachbarknoten), und jedes Mal, wenn wir einen Raum sehen, versuchen wir den Graphknoten zu finden, der am besten zu den Features passt Einige Update-Regeln (wie Winnow oder Perceptron) aktualisieren die Beschreibung, die wir aufgrund einiger Fehlererkennungsmetriken sehen.
Alle Gedanken/Vorschläge würden sehr geschätzt werden!