Application pratique des machines à états finis

8

Je recherche des applications pratiques des machines à états finis comme les machines DFA, NFA, Moore, Mealy ...

Il serait utile que quelqu'un pointe vers des exemples du noyau Linux. Je sais que DFA est utilisé dans la correspondance de chaînes comme l'algorithme KMP.

Quelle est la signification des machines NFA, Moore et Mealy?

user5507
la source
vous voudrez peut-être également vérifier l'ingénierie électrique pour les machines Moore / Mealy
Ran G.
1
Je déteste être pédant (d'accord, j'adore être pédant) mais tous les vrais ordinateurs sont exactement des machines à états finis. Les automates à refoulement, les automates linéaires et les machines de Turing sont des impossibilités physiques (pratiquement parlant; bien sûr, je ne peux pas prouver qu'il n'y a pas une vraie machine de Turing flottant quelque part dans l'espace). Nous ne pouvons même pas, pratiquement parlant, fabriquer des ordinateurs capables de reconnaître des langues régulières arbitraires.
Patrick87
Voir aussi ceci et cette question sur à Théorie Informatique .
Raphael

Réponses:

8

Chaque fois que vous effectuez une recherche (en particulier une «recherche de modèle») dans votre éditeur / outil préféré, le modèle est traduit en une certaine forme de machine à états finis, qui fait la correspondance.

La partie analyse lexicale de votre compilateur / interprète (oui, même votre shell) est à nouveau un automate fini qui correspond aux mots clés et autres jetons reconnus par le langage.

Tout distributeur automatique est un automate fini qui accepte des pièces de différentes dénominations et reconnaît quand le montant correct a été entré (OK, les distributeurs automatiques d'aujourd'hui ont probablement un petit processeur à l'intérieur pour l'ajout, mais le résultat final est le même).

vonbrand
la source
7

(les concepts de) DFA / NFA ont des applications dans le domaine des compilateurs et dans la construction d'analyseurs. Ils sont également utilisés pour identifier des chaînes selon des expressions régulières (c'est-à-dire en recherchant des "modèles" sur le Web ou sur des bases de données)

Les machines Moore / Mealy sont des DFA qui sont également sortis à tout moment de l'horloge. Ceux-ci ont BEAUCOUP d'applications. En fait, tout processeur, ordinateur, téléphone portable, horloge numérique et même votre machine à laver ont une sorte de machine à états finis, qui le contrôle.

Je devrais peut-être préciser: tout "ordinateur" est essentiellement une machine à états finis.

A sonné.
la source
4

Une application majeure est la modélisation de systèmes. Essentiellement, les systèmes logiciels simples peuvent être modélisés comme des machines à états finis. (Par logiciel simple, j'entends des langues qui peuvent être représentées à l'aide d'expressions régulières). Il existe de nombreux systèmes "simples", les distributeurs automatiques en sont des exemples (comme indiqué par vzn).

En trouvant l'intersection de deux machines à états finis, vous pouvez concevoir de manière très simple des systèmes concurrents qui échangent des messages par exemple. Par exemple, le feu de circulation est un système qui se compose de plusieurs sous-systèmes (les différents feux de circulation) qui fonctionnent simultanément.

Jetez un œil à ces exemples: http://www.site.uottawa.ca/~bochmann/SEG-2106-2506/Notes/LTSA-examples/examples/

Vous aurez besoin d'un analyseur LTSA pour exécuter ces exemples. http://www.doc.ic.ac.uk/ltsa/

AJed
la source
3

Voici une très bonne référence en ligne sur les FSM et la théorie connexe, 75p, avec de nombreux diagrammes. a de nombreuses applications après la section de théorie du milieu, et aussi dans de nombreux exercices avec des exemples d'applications, par exemple p485:

ch12. Machines à états finis par Keller, Harvey Mudd college, CS60 textbook / CS, intro to abstraction

les applications sont extrêmement diverses. par exemple du livre:

  • classification des numéros
  • regarder avec minuterie
  • distributeur automatique
  • feu de circulation
  • scanner de codes à barres
  • pompe à essence

sec 12.4 Constructions EE par exemple

  • éléments logiques
  • quantification d'horloge
  • Serrure à combinaison
  • tongs
  • additionneurs
  • registres
  • bus / multiplexage

Les FSM sont également utilisés dans la détection de la parole pour trouver des phonèmes , l'un des principaux points d'application de cette excellente bibliothèque en ligne qui contient plus de détails dans les pages de manuel et la documentation: bibliothèque FSM en ligne AT&T . voir la section "Bibliothèque FSM et applications de traitement de la parole" (qui répertorie également quelques "applications" plus abstraites / théoriques)

etc!

vzn
la source
1

J'utilise des machines d'état lors de l'écriture de pilotes de périphériques. Attention, les grosses machines à états peuvent devenir lourdes. Pensez à utiliser cet ensemble de macros ( https://www.codeproject.com/Articles/37037/Macros-to-simulate-multi-tasking-blocking-code-at)… de cette façon, les transitions deviennent si simples que vous ne le faites pas même besoin d'un diagramme d'état. En effet, les macros vous permettent d'écrire le code de votre machine d'état comme s'il s'agissait d'un code structuré. J'ai écrit la bibliothèque d'émetteurs-récepteurs de Cisco pour le Nexus 7000 en utilisant ces macros.

eddyq
la source
0

En pratique, vous la verrez explicitement comme une variable d'état entière (généralement appelée «état») qui représente une machine à états très grossière représentant les actions pouvant être appelées par l'utilisateur d'un objet. Il s'agit généralement d'une énumération avec des valeurs telles que: {non initialisé, initialisé, ..., arrêté}. Les machines à états sont souvent explicites lors de l'analyse des données et seront signifiées par une instruction switch dans une boucle while où en haut de la boucle, le caractère suivant est obtenu. En particulier, si l'analyse a une grammaire régulière, un FSM exact sans autres fonctionnalités est souvent utilisé. Si vous êtes dans un langage qui prend en charge les appels de queue, les FSM sont généralement présentés par récursivité mutuelle (ce qui peut faire lire le code comme une spécification de pseudocode très claire). Une fonctionnalité très utile d'un FSM est la possibilité de fonctionner simultanément car il vous suffit de vous souvenir de l'état actuel, plutôt que d'une pile d'exécution entière. (ie: changement de contexte entre des millions d'instances de machines d'état).

Rob
la source