Algoritmo per trovare i P-invarianti della rete di Petri

Un algoritmo per trovare i vettori P-invarianti di una rete marcata è il seguente:

  1. Una rete ha m posti e n transizioni
  2. Calcolo la matrice di incidenza della rete C. La matrice ha m righe e n colonne.
  3. Aggiungo alla matrice C una matrice identità Imxm con m righe e m colonne. $$ C | I_{mxm} $$
  4. Elaboro la colonna j=1
    • Per ogni elemento nella colonna j verifico se è possibile annullarlo con una combinazione lineare.
    • Calcolo le eventuali combinazioni lineari (senza le duplicazioni), aggiungo il risultato con un'ulteriore riga alla tabella, elimino le colonne usate nel calcolo e lascio invariate le altre righe.
    • Quando non ci sono più combinazioni lineari da calcolare, elimino dalla tabella le righe con elementi non nulli nella colonna j.
  5. Passo alla colonna j+1 e torno al punto [4] fino all'ultima colonna della matrice di incidenza (j=n).

Il risultato finale è una matrice di incidenza con tutti i valori nulli.

I valori nelle righe della matrice identità identificano gli eventuali vettori P-invariabili della rete.

Nota. Per trovare i vettori T-invariabili posso usare lo stesso algoritmo, usando la trasposta della matrice di incidenza. In questo caso ogni riga identifica una transizione. $$ C^T | I_{mxm} $$

    Un esempio pratico

    Ho una rete marcata con 4 posti e 3 transizioni.

    La matrice di incidenza C della rete è

    $$ C = \begin{pmatrix} 1 & 0 & 1 \\ -2 & 0 & 0 \\ 1 & -1 & 0 \\ 0 & 1 & 0 \end{pmatrix} $$

    La matrice ha m=4 righe, una per ogni posto della rete.

    Aggiungo una matrice identità mxm ossia 4x4

    $$ \begin{pmatrix} 1 & 0 & 1 \\ -2 & 0 & 0 \\ 1 & -1 & 0 \\ 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix} $$

    Poi considero le due matrici come una tabella.

    Per semplicità chiamo le righe della tabella con i nomi dei posti: p1,p2,p3,p4

    $$ \begin{vmatrix} p_1 \\ p_2 \\ p_3 \\ p_4 \end{vmatrix} \begin{vmatrix} 1 & 0 & 1 \\ -2 & 0 & 0 \\ 1 & -1 & 0 \\ 0 & 1 & 0 \end{vmatrix} \begin{vmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{vmatrix} $$

    A questo punto posso cominciare a lavorare sulle colonne della matrice di incidenza, dalla prima (j=1) all'ultima (j=3).

    Prima colonna

    Comincio a lavorare sulla prima colonna della matrice per C per cercare di annullare i valori in colonna.

    Il primo elemento della colonna si annulla con la combinazione lineare 2p1+p2.

    l'analisi del primo elemento della prima colonna

    Il secondo elemento della colonna si annulla con le combinazioni lineari 2p1+p2 e 2p3+p2.

    la seconda colonna della tabella

    Il terzo elemento della colonna si annulla con l'operazione 2p3+p2.

    l'analisi del terzo elemento della prima colonna

    Le operazioni da compiere (senza considerare le ripetizioni sono) sono le seguenti combinazioni lineari: 2p1+p2 e 2p3+p2

    Le aggiungo in fondo alla tabella

    $$ \begin{vmatrix} p_1 \\ p_2 \\ p_3 \\ p_4 \\ 2p_1+p_2 \\ 2p_3+p_2 \end{vmatrix} \begin{vmatrix} 1 & 0 & 1 \\ -2 & 0 & 0 \\ 1 & -1 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 2 \\ 0 & -2 & 0 \end{vmatrix} \begin{vmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 2 & 1 & 0 & 0 \\ 0 & 1 & 2 & 0 \end{vmatrix} $$

    Poi elimino le righe p1,p2,p3 utilizzate nelle combinazioni lineari.

    $$ \begin{vmatrix} p_4 \\ 2p_1+p_2 \\ 2p_3+p_2 \end{vmatrix} \begin{vmatrix} 0 & 1 & 0 \\ 0 & 0 & 2 \\ 0 & -2 & 0 \end{vmatrix} \begin{vmatrix} 0 & 0 & 0 & 1 \\ 2 & 1 & 0 & 0 \\ 0 & 1 & 2 & 0 \end{vmatrix} $$

    Infine, elimino tutte le righe con valore non nullo nella prima colonna.

    In questo caso non ci sono righe da eliminare.

    Seconda colonna

    Il primo elemento della seconda colonna si annulla con la combinazione lineare 2p4+(2p3+p2)

    il primo elemento della seconda colonna

    Il secondo elemento è nullo, quindi va bene così.

    il secondo elemento della seconda colonna

    Il terzo elemento si annulla con la combinazione lineare 2p4+(2p3+p2)

    il terzo elemento della seconda colonna

    Pertanto, nella seconda colonna devo eseguire soltanto la combinazione linare 2p4+(2p3+p2)

    La aggiungo in fondo alla tabella.

    $$ \begin{vmatrix} p_4 \\ 2p_1+p_2 \\ 2p_3+p_2 \\ 2p_4+(2p_3+p_2) \end{vmatrix} \begin{vmatrix} 0 & 1 & 0 \\ 0 & 0 & 2 \\ 0 & -2 & 0 \\ 0 & 0 & 0 \end{vmatrix} \begin{vmatrix} 0 & 0 & 0 & 1 \\ 2 & 1 & 0 & 0 \\ 0 & 1 & 2 & 0 \\ 0 & 1 & 2 & 2 \end{vmatrix} $$

    Poi elimino le righe p4 e (2p3+p2) usate nel calcolo.

    $$ \begin{vmatrix} 2p_1+p_2 \\ 2p_4+(2p_3+p_2) \end{vmatrix} \begin{vmatrix} 0 & 0 & 2 \\ 0 & 0 & 0 \end{vmatrix} \begin{vmatrix} 2 & 1 & 0 & 0 \\ 0 & 1 & 2 & 2 \end{vmatrix} $$

    Tutte le altre righe hanno valore nullo nella seconda colonna.

    Quindi, non ci sono righe da annullare.

    Terza colonna

    Il primo elemento della terza colonna è non nullo (2).

    Tuttavia, non ci sono combinazioni lineari possibili per eliminarlo.

    il primo elemento della terza colonna

    Il secondo elemento della terza colonna è nullo e va bene così.

    il secondo elemento della terza colonna

    Pertanto, nella terza colonna non devo calcolare combinazioni lineari.

    Devo soltanto eliminare le righe con valore non nullo in terza colonna.

    In questo caso elimino la riga 2p1+p2.

    l'eliminazione della riga con valori non nulli

    Il risultato finale

    Le righe restanti nella tabella hanno valori nulli nella matrice di incidenza.

    I valori nella matrice di identità sono i vettori P-invariabili della rete.

    la tabella finale

    In questo caso c'è soltanto un vettore P-invariabile minimale, è il vettore x = [0 1 2 2]

    $$ x = [ \: 0 \: 1 \: 2 \: 2 \: ] $$

    Nota. Non è detto che ci sia sempre un solo vettore P-invariabile minimale. Potrebbe essercene più di uno oppure nessuno.

    La verifica

    Per ulteriore verifica moltiplico il vettore x per la matrice C.

    $$ x \cdot C = [ \: 0 \: 1 \: 2 \: 2 \: ] \cdot \begin{pmatrix} 1 & 0 & 1 \\ -2 & 0 & 0 \\ 1 & -1 & 0 \\ 0 & 1 & 0 \end{pmatrix} = [ \: 0 \: 0 \: 0 \: ] $$

    Il risultato finale è un vettore nullo [ 0 0 0 ].

    Pertanto, il vettore x è un vettore P-invariabile minimale.

    Nota. Posso usare l'algoritmo anche per trovare i vettori crescenti, eliminando tutte le righe con elementi negativi. Allo stesso modo, posso usare l'algoritmo per trovare i vettori decrescenti eliminando tutte le righe con elementi positivi. Tuttavia, in questi casi l'algoritmo non si limita a trovare soltanto i vettori minimali e di supporto minimimo ma molti di più.

    E così via.

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Libri di approfondimento

    Sistemi a eventi