è valido che una macchina a stati possa avere più di uno stato possibile per qualche transizione?

4

Ho un requisito per un flusso di lavoro che sto cercando di modellare come macchina a stati, vedo che c'è più di un risultato di una data transizione (o attività).

È valido per una macchina a stati avere più di uno stato possibile, ma solo uno stato sarà vero in un dato momento?

Nota: questo è il mio primo tentativo di modellare una macchina a stati.

Eg. potrebbe essere:

s1- > t1- > s2

s1- > t1- > s3

s1- > t1- > s4

dove s1, s2, s3, s4 sono stati e t1 è transizione / attività.

Un esempio del mondo reale fittizio potrebbe essere:

Per un umano, ci possono essere due stati: affamato, non affamato Un carrello può avere solo un oggetto da: mela, arancione.

Quindi, per modellarlo avremo:

hungry- > prelievo da basket- > apple trovato

hungry- > scegli dal cestino- > arancione trovato

apple found- > eat- > non affamato

orange found- > prendi il succo fuori da esso e poi bevi- > non affamato

    
posta shankbond 06.06.2014 - 09:11
fonte

3 risposte

6

Sì, puoi averlo.

Nella teoria degli automi, la gente lo chiama macchina a stati non deterministici .

Dall'articolo di Wikipedia:

In automata theory, a nondeterministic finite automaton (NFA), or nondeterministic finite state machine, is a finite state machine that:
(1) does not require input symbols for state transitions and
(2) is capable of transitioning to zero or two or more states for a given start state and input symbol.
This distinguishes it from a deterministic finite automaton (DFA), in which all transitions are uniquely determined and in which an input symbol is required for all state transitions. Although NFA and DFA have distinct definitions, all NFAs can be translated to equivalent DFAs using the subset construction algorithm

    
risposta data 06.06.2014 - 09:16
fonte
5

La cosa da riconoscere è che non devi fare in modo che tutti gli stati modellano esattamente uno stato del mondo reale e non devi fare in modo che tutte le transizioni modellino esattamente un'azione del mondo reale.

Per il tuo esempio, puoi risolverlo in due modi: crea una transizione separata per ogni risultato possibile o crea uno stato intermedio. La creazione di una transizione separata ha questo aspetto:

  • hungry - > scegli l'arancione dal carrello - > avere arancione
  • hungry - > scegli la mela dal cestino - > avere una mela

Qui, in pratica, non segui la transizione finché non hai determinato quale frutto hai scelto. Non è deterministico nel mondo reale, ma nel tuo modello scopri quale evento si è verificato prima di aggiornare il tuo computer di stato.

La correzione dello stato intermedio ha il seguente aspetto:

  • hungry - > prendi l'oggetto dal carrello - > avere l'elemento
  • avere elemento - > identifica l'oggetto come arancione - > avere arancione
  • avere elemento - > identificare l'oggetto come apple - > avere una mela

Qui puoi seguire la prima transizione senza sapere quale frutta hai raccolto, ma immediatamente la identifica e fai un'altra transizione. Questo più da vicino modella le azioni del mondo reale, ma riconosce che la selezione e l'identificazione sono due azioni separate, anche se si verificano quasi simultaneamente in modo che gli umani non le considerino realmente separate.

Quale metodo scegli dipende dall'implementazione. Potresti provare a implementare entrambi e vedere quale risulta più pulito nella tua situazione.

    
risposta data 06.06.2014 - 15:12
fonte
2

Quello che stai cercando non è una macchina a stati, ma una rete di petri . In realtà è più comune modellare i flussi di lavoro con le reti di Petri, piuttosto che utilizzare una macchina a stati.

E una cosa che voglio sottolineare: nel flusso di lavoro corretto, un'attività può produrre solo un tipo di output. Nel tuo caso, probabilmente stai facendo attività diverse producendo risultati diversi. O almeno qualcosa che inizia come singola attività, ma presto si dirama in diverse attività. Non ha molto senso che la stessa attività produca risultati diversi a diverse esecuzioni.

    
risposta data 06.06.2014 - 09:23
fonte