Agenti Intelligenti
Un obiettivo fondamentale per l’Intelligenza Artificiale è quello di realizzare Agenti Intelligenti. In questo articolo ti spiegherò cosa si intende per agente intelligente, cos’è e come funzionano.
In un mio precedente articolo ho introdotto il concetto di Intelligenza Artificiale, ho raccontato un po’ della sua storia, come è nato il termine e come si è evoluta negli anni. Adesso entriamo nel vivo della materia, esplorando questo fantastico mondo iniziando a parlare degli Agenti Intelligenti.
Cos’è un Agente Intelligente
Innanzi tutto, proviamo a dare una definizione al termine agente.
Un agente può essere visto come un sistema che percepisce il suo ambiente attraverso dei sensori e agisce su di esso mediante attuatori.
Per intenderci, un essere umano può essere considerato un agente in quanto i suoi sensori sono gli occhi, le orecchie ecc… e può usare come attuatori mani, gambe, voce così via. Un agente robot potrebbe avere telecamere e altri dispositivi come sensori e dei motori come attuatori. Mentre un agente software può ricevere input dalla rete o dalla testiera e intervenire sull’ambiente visualizzando il risultato della sua elaborazione sullo schermo o inviando dati in rete.
Poiché alcuni agenti si comportano meglio di altri possiamo dare una prima definizione di agente intelligente(o razionale) come quello che si comporta nel modo migliore. Quindi, va da sé che, bisogna valutare in qualche modo le sue azioni e per farlo si ricorre alla misura di prestazione.
Pertanto, la misura della prestazione distingue l’agente che si comporta nel modo migliore e che lo si può definire intelligente.
Come regola generale la misura di prestazione dovrebbe essere progettata in base all’effetto che si desidera ottenere sull’ambiente piuttosto che su come si pensa che debba comportarsi l’agente.
La misura della prestazione è uno dei quattro fattori da cui dipende la razionalità (quindi l’intelligenza). Ma vediamo quali sono gli altri fattori.
Con il termine percezione si indica l’input che un agente riceve in un determinato istante. Mentre, la sequenza percettiva è la storia delle percezioni ricevute fino a quel momento.
In generale, un agente sceglie l’azione da compiere in base alla sequenza percettiva fino a quel momento e alla conoscenza dell’ambiente in cui opera.
Quindi, arrivati a questo punto, possiamo elencare quali sono i quattro fattori da cui dipende il concetto di razionalità (o intelligenza) in un determinato momento:
- misura della prestazione, dalla quale si definisce il criterio del successo;
- conoscenza pregressa dell’ambiente;
- azioni che l’agente può effettuare;
- sequenza percettiva fino all’istante corrente.
Definizione di agenti intelligenti (o razionali)
Prendendo spunto dal concetto di razionalità, appena introdotto, possiamo dare una definizione completa di agente intelligente, (così come definito nel Capitolo 2 del testo “intelligenza artificiale un approccio moderno” di Stuart Russell e Peter Norvig) :
“per ogni possibile sequenza di percezioni, un agente intelligente dovrebbe scegliere un azione che massimizzi il valore atteso dalla misura della prestazione, date le informazioni fornite dalla sequenza percettiva e da ogni ulteriore conoscenza dell’agente”
Da un punto di vista matematico, Il comportamento di un agente è descritto dalla funzione agente. Tale funzione descrive la relazione esistente tra le diverse sequenze percettive e le rispettive azioni.
La funzione agente potrebbe essere rappresentata in forma tabellare, dove si fa corrispondere ad ogni possibile sequenze le rispettive azioni. Ma, come è facile intuire, una simile rappresentazione può andar bene solo in ambienti piccoli e limitati. In ambienti con un gran numero di sequenze percettive è improponibile realizzare una tabella capace di contenerle tutte.
Tieni presente che la funzione agente è solo una descrizione matematica astratta. All’interno di un agente artificiale, la funzione agente è implementata concretamente dal programma agente.
Quindi, volendo ribadire il concetto, possiamo dire che il programma agente è l’implementazione concreta della funzione agente, in esecuzione all’interno di un sistema fisico.
Un altro elemento che contraddistingue gli agenti intelligenti è l’apprendimento. In pratica, gli agenti intelligenti, devono poter apprendere il più possibile per raggiungere un certo grado di autonomia di azione e compensare la presenza di conoscenza parziale o errata del loro ambiente.
Ambiente Operativo (Task Environment)
La misura della prestazione, l’ambiente esterno, i sensori e gli attuatori costituiscono il c.d. task environment, che si può tradurre come “ambiente operativo”. Definito anche con l’acronimo PEAS (Performance, Environment, Actuators, Sensor).
Quando si progetta un agente, il primo passo dovrebbe essere proprio quello di specificare, nel modo più dettagliato possibile, il task environment. Infatti, le molte tipologie di ambiente influenzano direttamente la progettazione del programma agente appropriato.
Seppur la varietà di ambienti operativi nell’IA è molto vasta, è comunque possibile dividerli in un numero limitato di categorie.
Le diverse tipologie di ambiente
Di seguito ti elenco una possibile classificazione dei diversi ambienti:
- Completamente osservabile o parzialmente osservabile: se i sensori hanno accesso allo stato completo dell’ambiente in ogni momento, allora l’ambiente operativo è completamente osservabile. Se per qualsiasi motivo i sensori non sono in grado di osservare in modo completo l’ambiente, allora si dice che è parzialmente osservabile.
- Agente singolo o multiagente: una ambiente è multiagente nel determinare la misura della prestazione dipende anche l’azione di altri agenti. Per esempio, risolvere un cruciverba è un ambiente ad agente singolo, mentre il gioco degli scacchi è multiagente. Ma fare un ulteriore distinzione di ambiente multiagente. Infatti, un ambiente multiagente può essere competitivo se i diversi agenti competono tra loro(come nel gioco degli scacchi) o cooperativo quando c’è una sorta di collaborazione (come nel caso di più auto con pilota automatico in mezzo al traffico).
- Deterministico o stocastico: se lo stato successivo dell’ambiente è completamente determinato dallo stato corrente e dall’azione dell’agente, allora l’ambiente è deterministico; in caso contrario è stocastico.
- Episodico o sequenziale: in una ambiente sequenziale ogni azione può influenzare quelle successive. Mentre in un ambiente episodico le azioni successive non dipendono dalle precedenti. Per esempio il gioco degli scacchi è sicuramente sequenziale.
- Statico o dinamico: un ambiente dinamico può variare al trascorrere del tempo anche senza che l’agente compia azioni. A differenza di quello statico che non varia. Un ambiente dinamico richiede un maggiore impegno, in quanto l’agente dovrà osservarlo continuamente e valutare cosa fare per ogni variazione.
- Discreto o continuo: la distinzione tra discreto è continuo dipende da come viene gestito il tempo in base alle percezioni ed azioni dell’agente. Per esempio il gioco degli scacchi ha un numero finito di stati che sono indipendenti dallo scorrere del tempo. Quindi è discreto. Mentre l’ambiente di un pilota automatico di un auto varia con il passare del tempo deve prendere continuamente delle decisioni.
La struttura degli Agenti Intelligenti
A questo punto, dopo aver descritto il comportamento degli agenti intelligenti, occupiamoci del loro funzionamento interno.
Un agente è composto da un architettura fisica, costituita da un computer dotato di sensori e attuatori e da un programma agente.
agente = architettura + programma
Il compito dell’Intelligenza Artificiale è progettare il programma agente che implementa la funzione agente, cioè la corrispondenza tra percezione e azioni.
Naturalmente il programma dovrà essere appropriato all’architettura.
Quindi, in un agente, l’architettura si occuperà di inviare le percezioni ricevute dai sensori al programma il quale le elaborerà e sceglierà le azioni da eseguire che saranno passate agli attuatori.
Introducendo la funzione agente, abbiamo anche detto che può essere rappresentata come una tabella dove ad ogni sequenza percettiva corrisponde un azione. Come ho già detto, un simile rappresentazione il più delle volte è improponibile poiché il numero di sequenze percettive potrebbe essere enorme. Quindi bisognerà trovare una soluzione alternativa.
La sfida principale per l’IA è quella di trovare il modo di scrivere programmi che producano un comportamento intelligente con una piccola quantità di codice anziché un’enorme tabella.
Per poter procedere alla giusta implementazione del programma agente, possiamo delineare quattro tipi base di agente. In particolare distinguiamo agenti:
- reattivi semplici;
- reattivi basati sul modello;
- basati su obiettivi;
- basati sull’utilità.
Agenti Intelligenti
Agenti reattivi semplici
Un agente reattivo semplice sceglie le azioni in base alla percezione corrente, ignorando la storia percettiva. Un esempio può essere un aspiratore robot, la cui decisione se aspirare o spostarsi dipende dalla posizione corrente e dal fatto che riveli dello sporco o no.
Gli agenti reattivi semplici hanno la proprietà di essere semplici, ma la loro intelligenza è molto limitata in quanto funziono solo in l’ambienti completamente osservabile. Anche una piccola parte di non osservabilità può incidere, in modo determinante, sul suo funzionamento.

Agenti reattivi basati sul modello
Un agente reattivo basato sul modello ha la caratteristica di mantenere una sorta di stato interno che dipende dalla storia delle percezioni e che quindi gli permette di tenere, almeno in parte, traccia della parte del mondo che non può vedere nell’istante corrente.
Egli dovrà aggiornare il suo stato al passare del tempo. Per farlo dovrà conoscere l’evoluzione dell’ambiente indipendente dalle sue azioni e l’effetto che hanno su di esso le sue azioni. In pratica dovrà avere una conoscenza sul “funzionamento del mondo“.
In un agente basato sul modello la descrizione aggiornata dello stato scaturisce dalla combinazione del vecchio stato interno e della percezione corrente.

Il vantaggio di conservare lo storico dello stato talvolta consente all’agente di determinare con esattezza lo stato corrente di un ambiente parzialmente osservabile. A differenza di ciò che accade in un agente reattivo semplice.
Agenti basati su obiettivi
In un agente basato su obiettivi le azioni scelte, oltre a dipendere dallo stato corrente, dipenderanno anche dagli obiettivi(o goals) assegnati all’agente. Per cui, la scelta dell’azione migliore sarà influenzata dall’obiettivo da raggiungere. Naturalmente, dovranno preoccuparsi di pianificare una sequenza di azioni per poter raggiungere i diversi obiettivi.

L’agente basato su obiettivi tiene traccia dello stato dell’ambiente, memorizza una insieme di obiettivi e pianifica una serie di azioni che lo porteranno a soddisfarli.
Agenti basati sull’utilità
Quando un agente ha più obiettivi in conflitto da raggiungere, deve decidere verso quale muoversi. Per farlo sceglie l’azione che gli permette di ottenere maggiore soddisfazione, massimizzando la probabilità di successo(utilità attesa). Pertanto, in fase di progettazione è necessaria l’implementazione di una funzione in grado di determinare l’utilità, definita appunto funzione di utilità.
Gli agenti basati sull’utilità sono un estensione degli agenti basati su obiettivi che hanno il vantaggio di selezionare un obiettivo da raggiungere massimizzando l’utilità attesa attraverso la funzione di utilità.

Agenti capaci di apprendere
Fin ora abbiamo visto agenti che attraverso l’implementazione del programma agente usano vari metodi per scegliere le azioni.
Come ho già detto, l’apprendimento è una caratterista che contraddistingue molti agenti intelligenti.
Infatti, in molti campi dell’IA si preferisce realizzare macchine capaci di apprendere per poi addestrarle.
Volendo schematizzare un agente capace di apprendere, lo si può vedere come se fosse diviso in quattro componenti astratti che sono:
- l’elemento critico;
- l’elemento di apprendimento;
- il generatore di problemi;
- l’elemento esecutivo.

Per capire il funzionamento di un agente capace di apprendere, descriviamo brevemente il funzionamento dei diversi componenti.
All’interno del programma agente, l’elemento critico dice a quello di apprendimento come si sta comportando l’agente rispetto a uno standard di prestazione prefissato. Di conseguenza, l’elemento di apprendimento utilizza le informazioni provenienti dall’elemento critico per scegliere se e come modificare l’elemento esecutivo affinché si comporti meglio.
Il generatore di problemi ha lo scopo di suggerire azioni esplorative che portano a esperienze nuove e significative. In pratica da’ la possibilità all’agente di esplorare altre possibilità attraverso le quali potrebbe scoprire l’esistenza di azioni nettamente superiori nel lungo periodo.
Conclusioni
Anche se l’articolo può sembrare particolarmente lungo, ti assicuro che sono stato molto sintetico. Su gli agenti intelligenti ci sarebbe ancora molto da dire. Nei prossimi articoli approfondirò altre tematiche sull’Intelligenza artificiale, riprendendo anche gli agenti e approfondendo alcune loro caratteristiche.
Se sei alla ricerca di testi attraverso i quali approfondire la materia, ti consiglio di leggere: “intelligenza artificiale un approccio moderno” di Stuart Russell e Peter Norvig. Mentre se vuoi approfondire il concetto di apprendimento, esplorando il mondo del machine learning, ti consiglio “Machine learning con Python. Costruire algoritmi per generare conoscenza” di Sebastian Raschka