Agenti e sistemi multiagente

(Questa breve introduzione è tratta dai lucidi del prof. Martelli [4])


Un agente è un sistema computazionale situato in un ambiente, e capace di azioni autonome nell'ambiente per raggiungere i suoi obiettivi di progetto.

Nella maggior parte dei domini un agente non ha completa conoscenza dell'ambiente e completo controllo su di esso. L'ambiente può evolvere dinamicamente independentemente dall'agente, le azioni dell agente possono fallire. In generale, si assume che l'ambiente sia non-deterministico. Il problema principale per un agente è quello di decidere quale delle sue azioni dovrà eseguire per soddisfare meglio i suoi obiettivi di progetto. Un agente intelligente deve avere un comportamento flessibile per riuscire a soddisfare i propri obiettivi di progetto. Con flessibile si intende:

Reattivo.
Gli agenti intelligenti sono capaci di percepire il loro ambiente e di rispondere in modo tempestivo ai cambiamenti che si verificano in esso.
Pro-attivo.
Gli agenti intelligenti sono capaci di esibire un comportamento goal-directed prendendo l'iniziativa.
Sociale.
Gli agenti intelligenti sono capaci di interagire con altri agenti (cooperare, negoziare, ...).

Spesso agli agenti vengono attribuite anche altre propriet� come ad esempio, la mobilità, la capacità di spostarsi fra i nodi di una rete; l'apprendimento, la capacità di imparare per migliorare le proprie prestazioni. Spesso gli agenti sono modellati per mezzo di concetti cognitivi basati su stati mentali come credenze (beliefs), conoscenze (knowledge), desideri, intenzioni. I modelli più noti sono quelli basati su belief-desire-intention (BDI, agenti basati su modelli intenzionali): beliefs corrispondono all informazione che l'agente ha sul mondo. Può essere incompleta o non corretta. Desires rappresentano la situazione che l'agente vorrebbe realizzare. Intentions rappresentano i desideri che l'agente si è impegnato (committed) a realizzare. Il comportamento di un agente intelligente è descritto sinteticamente dal ciclo in Figura 1.

Figure 1: Ciclo di un agente intelligente.
\begin{figure}\begin{verbatim}while (true) {
acquisisce una nuova percezione;...
... soddisfare l intenzione scelta;
esegue il piano;
}\end{verbatim}
\end{figure}

Per poter interagire, gli agenti in un sistema multiagente devono comunicare fra loro. Il meccanismo di comunicazione normalmente usato è quello dello scambio di messaggi. L'invio o la ricezione di un messaggio può essere visto come una azione eseguita dall agente. Sono stati definiti dei linguaggi di comunicazione fra agenti in cui le azioni comunicative sono modellate basandosi sulla teoria filosofica delle azioni: inform, request, query-if, ask, tell, ecc.

Ci sono ovvie somiglianze fra agenti e oggetti: entrambi sono entità computationali che incapsulano uno stato, sanno eseguire delle azioni (metodi), e comunicano via scambio di messaggi. Ci sono però anche differenze significative: gli oggetti non hanno autonomia. Se un oggetto o ha un metodo pubblico, ogni altro oggetto puo invocare questo metodo, e o, quando gli viene richiesto, deve eseguirlo. Viceversa, i chiede an un agente j di eseguire un'azione, non è garantito che l'agente j la eseguirà (l'agente j è autonomo: Objects do it for free. Agents do it because they want to).

Un'altra differenza riguarda la nozione di comportamento flessibile (reattivo, proattivo, sociale). Il modello standard ad oggetti non considera la costruzione di sistemi che presentino questi tipi di comportamento. Inoltre i sistemi multiagente sono inerentemente distribuiti: ogni agente ha un flusso di controllo indipendente (processo o thread).

Le architetture software sono sempre più costituite da componenti che interagiscono dinamicamente attraverso protocolli complessi. L'interazione è probabilmente la caratteristica più importante del software complesso. La programmazione ad agenti viene vista da molti come un nuovo paradigma di programmazione, naturale evoluzione di altri paradigmi di programmazione, in particolare della programmazione ad oggetti. Sono giè state sviluppate metodologie per analisi e progetto agent-oriented, metodi formali di specifica e verifica di sistemi ad agenti e tecniche di implementazione.

baldoni 2005-01-13