2016-04-12 16 views
2

Ich schreibe eine einfache endliche Zustandsmaschine und erkannte, dass es Situationen gibt, in denen ein Ereignis einen Zustand zu mehr als einem möglichen Ergebnis annehmen kann. Im Grunde genommen von dem Zustand A, wenn Ereignis E geschieht, könnte der Staat entweder C oder D seinEndliche Zustandsmaschine: Ein Zustand in mehrere Zustände

Ich bin derzeit die Javascript Finite State Machine Code hier geschrieben: https://github.com/jakesgordon/javascript-state-machine

Aus der Dokumentation ich nicht einen offensichtlichen Weg sehen, der dies ermöglicht. Mehr noch, ich habe das Gefühl, dass das tatsächlich ein Fluss in meinem ursprünglichen Design ist.

Im Grunde sollte es in einer Finite-State-Maschine eine Situation geben, in der ein Übergang stattfindet und basierend auf einer Logik zu einem von mehreren Zuständen (1 zu viele) führt, oder sollten wir die Logik überprüfen Welcher Übergang muss stattfinden (1 zu 1)?

+0

Durchfluss oder Fehler? Eigentlich verstehe ich deine Frage nicht. In endlichen Automaten (DFA, NFA) kann es offensichtlich viele Übergänge von einem Zustand geben, basierend auf dem Eingabesymbol. –

+0

Sorry, das war ein Tippfehler. Grundsätzlich ging ich davon aus, dass alle Zustandsautomaten deterministisch sind, d. H. Bei einem Zustand und einem Ereignis kann nur ein möglicher Zustand das Ergebnis sein. In meinem ursprünglichen Entwurf gab es eine Situation, in der ein Staat und ein Ereignis einen von zwei möglichen Zuständen ergeben könnte. Dies war grundsätzlich nicht möglich mit der Bibliothek, die ich verwendet habe, seit es für ein DFA geschrieben wurde. – beichenfan

Antwort

3

Herzlichen Glückwunsch, Sie haben gerade non-deterministic finite state machines entdeckt! Die Ideen sind denen einer deterministischen Zustandsmaschine ähnlich, mit der Ausnahme, dass es mehrere Möglichkeiten zum Übergang von einem Zustand geben kann, der das gleiche Eingangssymbol hat. Wie das eigentlich gemacht wird, ist nicht spezifiziert (Zufälligkeit, Benutzereingabe, Verzweigung und Ausführung auf einmal, etc.).

+1

Danke! Das war meine grundlegende Frage. Kennen Sie irgendwelche guten populären JS Bibliotheken für NFA? – beichenfan

+1

@beichenfan Nein, tue ich nicht. Da jedoch die Besonderheiten eines NFA definitionsgemäß undefiniert sind, gibt es keine Möglichkeit, eine universelle NFA-Bibliothek zu erstellen. Sie müssen also entscheiden, was Sie wirklich wollen; Zum Beispiel, wenn Sie Zufälligkeit wollen, bin ich sicher, dass es irgendwo eine ordentliche Markov-Kettenbibliothek gibt. – JesseTG