Un esempio di macchina reattiva
In questa pagina descrivo il funzionamento di una macchina reattiva semplice, priva di stato interno.
Cos'è una macchina reattiva? Una macchina reattiva S-R percepisce gli stimoli esterni ( S ) e li elabora in una funzione per decidere una reazione ( R ).
Quale lavoro deve svolgere la macchina
In questo esempio voglio far percorrere alla macchina la linea di confine di una mappa bidimensionale.
Conosco le dimensioni della mappa. Si tratta di un ambiente chiuso. E' una griglia dimensionale 8x8 con 64 celle.
Esempio. Una stanza è un esempio tipico di ambiente chiuso rappresentabile tramite una griglia bidimensionale.
Tuttavia, non conosco in quale posizione iniziale si trovi la macchina reattiva.
Inoltre, non conosco le posizioni degli ostacoli nell'ambiente.
Il problema da risolvere
Devo trovare un modo per consentire alla macchina di spostarsi autonomamente al confine, indipendentemente dal posto iniziale in cui si trova.
Una volta raggiunto il confine, la macchina deve cominciare a percorrerlo.
Come progettare la macchina
Costruisco una macchina in grado di muoversi autonomamente in tutte le direzioni tramite un sistema di ruote motrici.
La macchina può rilevare la presenza degli ostacoli nelle celle adiacenti tramite dei sensori.
Nota. Il sensore scandaglia le celle adiacenti da quella in alto a sinistra in senso orario. Ogni posizione è un elemento di un vettore. Quando il sensore trova un ostacolo scrive 1 nell'elemento del vettore. L'esempi precedente è rappresentato dal vettore { 1, 0, 1, 0, 1, 1, 0, 0 }
A questo punto scrivo la funzione di produzione della macchina reattiva
E' composta da una serie di regole di produzione
Per semplificare identifico quattro situazioni di stato significative e le chiamo Z1, Z2, Z3, Z4.
Ora utilizzo le situazioni per scrivere le condizioni (IF ) delle regole di produzione.
Perché la macchina va in alto se le condizioni sono tutte false? Se la macchina non trova nessuna condizione verificata, rischia di bloccarsi per sempre. Per evitare questo rischio è utile aggiungere un'istruzione incondizionata alla fine della lista. Ad esempio, vai in alto, fai un movimento casuale oppure un'attesa di 30 secondi, poi ricontrolla tutte le condizioni. Ci sono pro e contro. In questa pagina evito di approfondire questo aspetto che reputo comunque importante perché si rischia una mossa irreversibile ( es. caduta dalle scale ).
Quando l'agente si trova su una cella, analizza gli stimoli esterni e verifica le condizioni in ordine sequenziale.
Se una condizione è vera, l'agente esegue l'azione associata e ricomincia l'algoritmo daccapo.
Questa semplice procedura conduce l'agente reattivo a muoversi lungo il confine della mappa in modo autonomo.
In conclusione
Questo semplice esempio di programmazione aiuta a comprendere il funzionamento di una macchina reattiva.
La macchina reattiva è molto semplice da programmare. Sono sufficienti poche righe di codice.
Tuttavia, la macchina è autonoma, veloce ma non intelligente. Può soltanto svolgere semplici compiti meccanici in ambienti chiusi.
Una macchina reattiva ha diversi handicap. La macchina non ha una memoria di stato interna e non fa esperienza. Inoltre, le condizioni da prevedere potrebbero essere troppe, il progettista potrebbe non averle previste tutte o aver fatto un errore di analisi e/o programmazione.
La macchina reattiva è soltanto il primo passo nello studio dell'automazione e dell'intelligenza artificiale.