Tag: mainpost

4 Replies

Agenti: classificazioni ed approfondimento con…un rover

Prefazione

Ciao. Ben tornato o ben tornata. Questo è, come anticipato nell’ultimo post, il “Main post” personale.

Ovvero un post decisamente più consistente rispetto agli altri. Il motivo? Semplice, approfondire. Se ti stessi chiedendo cosa, anche qui, la risposta è piuttosto semplice: praticamente tutto quello che ho scritto fin ora. In particolare il mio obiettivo è quello di percorrere ed in parte ripercorrere il discorso riguardante gli agenti ed i modelli. Per far ciò dovrò introdurre anche il concetto di sistema complesso ed ambiente (e se hai letto i miei post precedenti saprai che parto dalla definizione prettamente linguistica delle parole chiave … lo farò anche qui e con molta probabilità ripeterò alcune definizioni, mi scuserai mi auguro).
Cercherò di dividere gli argomenti adeguatamente, nonostante l’indelebile (e poco sottile) collegamento che gli unisce. Inoltre vedrò di scrivere una sorta d’introduzione per ogni argomento che tratterò.
Questo post, parlando a grandi linee, cercherà di parlare degli agenti (si lo so, sono monotono – non monotòno- ndr) e del loro ambiente, cercherò di fare una, magari non precisissima, vasta, classificazione delle tipologie di agenti che si possono trovare in letteratura. Cercherò di mettere le corrette immagini spezzando un po’ la monotonia del testo, la quale, chiedo scusa in anticipo, temo sarà un po’ presente. Detto questo cercherò di fare una rapida panoramica sui sistemi multi-agente per poi provare con voi a realizzare un agente “fisico”.
Molto bene, fatte le prima considerazioni, andiamo all’introduzione di tutto…auguri e buona lettura…

 

Introduzione

Arrivando da una facoltà prettamente umanistica, lo stupore nel vedere ed utilizzare le tecnologie odierne, per la maggior parte informatiche, mi rende sempre incredulo e mi porta spesso a pensare “ma come ci saranno riusciti?”.
Le stesse identiche sensazioni le provo vedendo robot muoversi autonomamente così come quando vedo ricostruzioni digitali di macchine d’ogni sorta, di nuovo robot o semplici punti muoversi nello schermo seguendo regole predeterminate.
Resto incredulo di fronte ai dati che vengono raccolti e trattati dopo una simulazione, o come sempre le ho chiamate erroneamente “video digitali 3D”.
Essendo poi un amante della cinematografia provo un certo “feeling” quando vedo nei lungometraggi, anche un po’ “datati”, simulazioni graficamente semplici, i primordi di ciò che si può vedere oggi.
Come per esempio i “Boids”, argomento del post precedente.
Le simulazioni che vedo, come una catena di montaggio automatizzata o i movimenti delle folle o ancora un robot interagire con l’ambiente digitale, creato ad hoc, per la simulazione in questione, mi lasciano letteralmente a bocca aperta, oltre ad essere incredibilmente esplicative e graficamente più “piacevoli” dei semplici Boids…(eppure da qualche parte hanno iniziato). Il fascino di queste materie mi ha spinto a provare diverse simulazioni, la prima è stata un finto attacco di buffer overflow che ho scritto in Visual Basic…inutile di per sé, anche perché era poco più che un giochino ed abbastanza ridicolo ammetto…ma era divertente.

Veniamo a noi. La prima cosa da fare per parlare di un argomento è la definizione dello stesso.
Dato che il post ed il suo ”topic” sono di mia scelta, ho voluto legarmi ovviamente al filone del blog, e, più precisamente, visto che poco fa ho scritto che avrei utilizzato “sistemi complessi” ed “ambiente” ho voluto dare un’occhiata al corso di … “Sistemi Complessi: Modelli e Simulazione” del professor Vizzari degli anni scorsi. Corso mutuato con il C.d.L.M. in Informatica. A tal proposito e tenendo conto di quanto detto nelle prime righe trovo doveroso dare una definizione ed una spiegazione per approfondirne i concetti. Così come trovo doveroso ringraziare il professore in questione per la miriade di informazioni messe a disposizione tra slides e .pdf.

 

Sistemi

Panoramica dei sistemi


La teoria dei sistemi, come la intendiamo oggi, nasce circa negli anni ’60, per necessità alle nuove risposte che la biologia sviluppò in quegli anni.


La teoria dei sistemi è definita anche come “teoria generale dei sistemi” o “sistemica”.
Il primo vocabolo che andrò ad analizzare brevemente è appunto “Sistemi”, o meglio “Sistema”.
Esistono una miriade di definizioni a riguardo, ma in questo caso utilizzerò la definizione che si trova nel libro “Teoria generale dei sistemi” di Ludving Van Bertalanffy, il quale recita:

Insieme di variabili disponibili, selezionate da un osservatore per identificare oggetti fondamentali, attributi che influenzano gli oggetti e le relazioni di questi oggetti che risultano come fenomeno”.

Ovvero un insieme funzionale di componenti interattive che “collaborano” per uno scopo comune.
Di per sé un sistema non ha proprietà, più che altro ne acquisisce continuamente. Quando i componenti del sistema, per qualunque motivo, cessano di interagire, il sistema degrada, per così dire, in un “semplice” “insieme”.

Questo perché la stabilità delle proprietà del sistema è dovuta all’interazione continua delle sue componenti. Quindi nel caso queste componenti (e nel nostro studio chissà cosa mai saranno…) dovessero smettere d’avere interazioni, il sistema diverrebbe praticamente un semplice contenitore. Per chiarire un po’ possiamo dar un’occhiata al post precedente sui boids.

 

La prima immagine raffigura i boids durante una simulazione: si vedono chiaramente volare evitando una sorta di colonna. Ecco tutto il “luogo” in cui i boids risiedono e “volano”, i boids stessi, compongono un sistema. Ma se ad un tratto quegli adorabili triangolini fossero inermi, non avessero proprietà geometriche per il volo e quindi non avessero proprietà gli uni verso gli altri, tutto sarebbe solo un gran “calderone” con dei triangoli all’interno. Il tutto diverrebbe un insieme di triangolini e colonne stampate a schermo. Fine. Tristemente…ma andiamo avanti.

Bene, definita la parola “sistema” e la teoria a cui appartiene possiamo passare ora alla definizione del termine “complesso” legato ai nostri sistemi, od almeno a provarci. Per sviscerare il nocciolo duro chiediamo aiuto al latino, come di consueto, e facciamo una breve distinzione.
Spesso e volentieri utilizziamo a sproposito i termini “complesso” e “complicato”, li utilizziamo come sinonimi, sinonimi tra di loro, e, sinonimi con il termine più semplicistico “difficile”.
Nulla di più errato!
Il termine “complicato” deriva dal latino “complicare” ovvero piegare assieme.“Plicare” è il termine in latino antico che sta ad indicare l’atto di piegare, ma legato alla particella “cum” sta ad indicare piegare su se stessi, “render  una cosa meno semplice, e più difficile a risolversi, imbrigliarla, invilupparla”.
Il termine “complesso” arriva dal termine latino “complexus”, che a sua volta deriva da una forma più antica della stessa lingua, che è “cum-plexus”.
La particella “cum” sta a significare “assieme” mentre “plecto” indica intreccio, insieme di più parti dipendenti l’una dall’altra.
Invero, un qualcosa formato da più parti intrecciate tra loro, difficile da “sciogliere”, ma in cui si possono notare le varie parti che lo compongono; cosa che non avviene con il significato di “complicato” in quanto non vi sono parti differenti o separate che si possono scorgere e successivamente studiare o “sciogliere”, si tratta di qualcosa di unico, formato, alla fine da un’unica entità.

Tuttavia queste sono le definizioni che la linguistica, la semiotica e l’etimologia ci mettono a disposizione.
In ambito più “scientifico”, un sistema complesso è un sistema in cui le cause e gli effetti sono avvertibili e coerenti a posteriori, ovvero solo dopo che si è osservato il comportamento complessivo di quel determinato sistema.
In un sistema complesso, sempre riferendoci “più scientificamente”, le cause, gli effetti e le relazioni tra di essi sono ben separate in tempo e spazio. Tuttavia, di norma, le relazioni tra cause ed effetti sono iterate e ben analizzabili.
Ai fini del nostro argomento possiamo, altresì, aggiungere che i sistemi complessi vengono molto spesso studiati e “districati” tramite le simulazioni in quanto sono, in linea di massima, predicibili; o per lo meno cerchiamo di renderli tali…proprio con le simulazioni.
Per dover di cronaca e chiarezza, avviso che nella “teoria generale dei sistemi” non si parla “solamente” di un sistema, ma vi è una rigorosa classificazione dei sistemi. Il fatto che non sia l’unica classificazione possibile, ovviamente, non vuol dire che non sia corretta o non completa. Bisogna comunque tener conto della data d’uscita di quel libro e contestualizzarne il contenuto. Per esempio in ambiti come la fisica e l’elettronica possiamo trovare sistemi come:

– Sistemi lineari e non lineari
– Sistemi stazionari e non stazionari
– Sistemi statici e dinamici
– Sistemi a costanti concentrate o a costanti distribuite
– Sistemi a tempo discreto o a tempo continuo
– Sistemi a stati discreti o a stati continui
– Sistemi autopoietici o eteropoietici
– Sistemi deterministici o stocastici

Ora che abbiamo dato una definizione a sistema, complesso e complicato, possiamo passare a dare una rapida spiegazione al termine “modello” e “simulazione”. Se non l’hai ancora fatto, t’invito a leggere i primi post, appunto, riguardo alla simulazione ed ai modelli.
Anche per il termine “modello” le definizioni sono molteplici, e, anche qui il latino ci viene in aiuto.
Infatti il vocabolo “modello” arriva da “modulus”, abbreviato poi in “modus”. Il cui significato è, di per sé, “misura”, “forma piccola di un’opera da farsi in grande”. Per esempio nell’antica Roma, il primo “modello” con accezione moderna è l’Arco di Trionfo, in quanto è stato utilizzato per il colonnato d’archi del Colosseo. Infatti se osserviamo il Colosseo possiamo notare che tutti gli archi che lo compongono sono una riproduzione in scala dell’Arco di trionfo.

Arco di Tito

Il Colosseo

Dalla definizione e da questo aneddoto storico possiamo giungere alla definizione moderna di questo termine, ovvero una forma con la quale si riproduce un qualcosa più grande o viceversa.
E’ possibile vedere questo “qualcosa” come un sistema, di conseguenza un modello è una rappresentazione del sopracitato sistema che ne mantiene le proprietà ma in scala ridotta od in ambienti differenti.
Dimensioni a parte, il modello è identico in tutto e per tutto al sistema (in questo caso) che vogliamo riprodurre (o meglio ancora…simulare). Il grande vantaggio dato dalle nuove tecnologie è che possiamo creare modelli di miriade di sistemi (o qualunque altra cosa…modellabile) con una certa e relativa facilità.
Per esempio in ambito industriale il termine “modello” indica “il prototipo di un prodotto destinato a fornire gli elementi di studio e di riferimento necessari per l’avviamento della produzione in serie”, se pensassimo alla prototipazione, oggi, immagineremmo facilmente stampanti 3d.

Stampante 3d

Nel nostro caso, però, è più consono utilizzare la definizione di modello matematico ovvero “insieme delle relazioni matematiche che rende possibile la descrizione di un particolare fenomeno relativamente ai campi più vari”.
Ecco dunque come possiamo legare “sistemi complessi” con “modelli”: modellare uno o più sistemi (complessi o non). E dunque dare una definizione tramite relazioni, funzioni, regole e strutture di un sistema.
L’ultimo termine che resta da definire è “simulazione”.

Come ormai assodato e scritto nei post precedenti, la lingua latina ci viene in soccorso.
Infatti anche “simulazione” deriva da una parola composta, ovvero è la somma di “simile” e “actio”. Da cui il nome del nostro gruppo/blog.
La parola “simile” è divenuta poi “simula” con il significato di “fingere”, “far mostra”; mentre “actio” significa “azione”.
Per cui sommando le due parole otteniamo “simulationem”, ovvero fingere un’azione, riprodurre un’azione altrui.
Prendendo in prestito il primo post sulla simulazione che ho scritto possiamo dire che nel parlato di ogni giorno sentiamo la parola “simulazione” e nel campo delle scienze si pensa subito a qualcosa che ha a che fare i computer. Tuttavia non è così, nel medesimo campo, anche riprodurre la fotosintesi clorofilliana in un laboratorio chimico può essere una simulazione: si replica un processo tipico delle piante in un ambiente differente senza, per forza, l’utilizzo di alberi, o comunque vegetali.

La cosa può esser vista anche per quanto riguarda il campo sportivo: in un kata di karate-do si simulano condizioni di combattimento più o meno ideali in diversi luoghi, che al momento dell’esecuzione non esistono realmente sul “piano fisico/reale”. Direi di evitare di intavolare un discorso filosofico su cosa sia reale e cosa no. Andiamo avanti.

Kata

 

Ambiente

Definizione di ambiente e tipologie

Ambiente

Ultimo ma non ultimo non resta che parlare di “ambiente”. La stessa parola che non ho volutamente definito nell’ultimo post riguardo ai boids, ma concetto di cui Mara ha parlato in uno dei suoi articoli.
Termine di grande importanza nell’ambito scientifico e filosofico.
Questa parola è importante perché definisce una sorta di luogo di lavoro in cui gli oggetti, le relazioni, le funzioni che vogliamo simulare, o comunque utilizzare, lavorano, hanno “vita”, fanno ciò che devono. Il luogo, reale o digitale (od ancora “fittizio”) in cui le simulazioni hanno luogo (in questo caso). L’ambiente, in quest’ambito ha però degli aggettivi che lo contraddistinguono e variano, appunto, a seconda di quale modello stiamo cercando di creare.
L’ambiente può essere:

– Accessibile
– Non Accessibile
– Deterministico
– Non-deterministico
– Episodico
– Non-episodico
– Statico
– Dinamico
– Discreto
– Continuo

Visto l’elenco, possiamo provare a dare qualche breve spiegazione. So che non ho ancora dato la definizione di “agente” ma quando parlo di ambiente, qui, intendo specificatamente l’ambiente in cui gli agenti “operano” o dovrebbero “operare”.
Con ambiente accessibile si intende un ambiente cui l’agente o gli agenti al suo interno possono ottenere complete ed accurate informazioni riguardanti il sistema stesso. Viceversa un ambiente non accessibile è un ambiente in cui gli agenti non riescono ad avere informazioni complete e dettagliate riguardo all’ambiente.
L’ambiente deterministico è quell’ambiente caratterizzato dall’assenza d’incertezza, ovvero, ogni azione ha un unico e definito effetto; quindi l’ambiente non-deterministico è quello in cui non si può determinare a priori, e, fissare come “main”, un’azione e/o una reazione (o più).

Nell’ambiente episodico, le performance dell’agente o degli agenti sono dipendenti da n episodi discreti senza collegamento con la performance di un agente in diversi scenari all’interno dell’ambiente. Situazione inversa, per quanto riguarda l’ambiente non-episodico, ovviamente.

Un ambiente statico è quello che assumiamo non subisca cambiamenti ad eccezion fatta per le prestazioni dell’agente; mentre un ambiente dinamico è determinato da diversi processi operanti su quest’ultimo.

L’ambiente viene definito discreto se esistono n azioni e predizioni fissate e finite al suo interno. Viceversa un ambiente è continuo, per esempio, se ha un certo numero, n, di non corrispondenze con i calcolatori.
La variabile n che ho utilizzato va intesa come “maggiore di 1”, altrimenti non avremmo cambiamenti apprezzabili e nel caso di “n = 0”, molto probabilmente, non avremmo proprio di che “simulare” e di conseguenza analizzare.

Una delle rilevanze dell’ambiente è che nelle simulazioni (e non solo) gli agenti modificano il loro comportamento in base, appunto, all’ambiente in cui essi si trovano.
E questo era l’ultimo punto per quanto riguarda l’ambiente; possiamo, adesso, inoltrarci nell’approfondimento degli “agenti” legandoci, magari, al post riguardo ai Boids.
(Io l’ho detto che mi piacciono).

 

Agenti e classificazioni

…tante classificazioni

Parlando di ambiente ho introdotto anche il termine agente, parola che può esser sinonimo di quelle funzioni, relazioni, oggetti che “lavorano”, interagiscono all’interno di un ambiente.
Gli agenti sono detti tali perché in qualche modo agiscono, in che modo e in base a quali regole lo vedremo tra poco.
Una delle prime classificazioni di agente conta tre voci, “tre tipi di agente”.
Di norma gli agenti si classificano tramite le architetture che li contraddistinguono nelle sopracitate tre classi, oppure, si possono definire in funzione della modellazione che si vuole ottenere.
La classificazione avente le tre classi interne fa parte di una categoria detta “basata sulla struttura algebrica o interna”. Prima di procedere con la classificazione, è bene provare a dare qualche definizione di agente; “provare”, perché questo punto resta comunque molto controverso, in quanto esistono moltissime definizioni differenti.
Seguendo il “Russel & Norvig libro che ho già citato in un post precedente, un agente è tutto ciò che è in grado di percepire l’ambiente in cui si trova tramite sensori e agire nel medesimo ambiente tramite attuatori. Possiamo schematizzare il tutto prendendo l’immagine basata completamente sullo schema grafico del “R&N”:

 

Architettura di un Agente

Mentre secondo Pattie Maes  gli agenti autonomi sono sistemi computazionali che si trovano in ambienti dinamici e complessi, “sentono” ed agiscono autonomamente in questo ambiente, e, così facendo realizzano una serie di obiettivi o compiti (task) per i quali sono stati progettati.

Pattie Maes

Di definizioni, come detto prima, se ne possono trovare moltissime, più o meno valide, più o meno condivise e più o meno confutate.
Tornando alle classificazioni di agente troviamo, anche qui, moltissime “famiglie”. Troviamo la classificazione data all’interno del “Russel & Norveg”, quella data da Genesereth o quelle basate su architetture ibride, quella di Micheal Wooldridge, quella di J. Horberge quella di Ferber. Cerchiamo d’essere un po’ più specifici.

Micheal Genesereth

 

Micheal Wooldridge

 

 

Le classificazioni di Generseth e quella trovata all’interno del “Russel &Norvig” (“R&N”) sono a loro volta definite come classificazioni architetturali.
Ovvero sono classificazioni in funzione dell’architettura interna dell’agente in questione.

Classificazione Architetturale

In accordo con il “R&N”, la classificazione architetturale è composta da altre 4 classi:

– Simple reflex
– Reflex with memory
– Goal based
– Utility based

In ordine, simple reflex si riferisce a quegli agenti che sono “governati” da una “funzione d’agente” (FDA) che da’ loro la possibilità di interagire con l’ambiente in cui si trovano, con semplice “riflessi”, stimoli, sia per quanto riguarda i sensori che per gli attuatori; reflex with memory identifica una FDA che permette non solo di gestire i “riflessi” ma anche di memorizzare le azioni fatte in funzione di quel determinato riflesso.
Goal based sta, invece, per un’architettura orientata al raggiungimento dello scopo prefissato, mentre il modello utility based ha una FDA orientata all’utilità dell’azione compiuta dall’agente in questione. Possiamo vedere queste due ultime categorie nelle seguenti rappresentazioni.

 

Goal-Based Agent

 

Utility-based Agent

Dopo aver visto la classificazione proposta sul “R&N” passiamo in rassegna anche la classificazione di Micheal Genesereth (Professore associato alla Stanford University).

Classificazione di Micheal Genesereth

In questa classificazione troviamo tre classi:

– Tropistico
– Isteretico
– (a) Livello di conoscenza

Ad onor di cronaca, ed, ad onor del vero è necessario puntualizzare che questa classificazione è nata per studiare un singolo agente alla volta.
Tuttavia, l’utilizzo e gli studi hanno dimostrato che, nonostante, questa categorizzazione, sia nata per lo studio e la classificazione del singolo agente, si è rivelata adatta anche allo studio di più agenti contemporaneamente (multi-entity situation).
Diamo qualche delucidazione.

Agente Tropistico

Con agente tropistico si intende un agente in grado di modificare il suo stato iniziale (i₀) in relazione (reazione) all’ambiente usando i propri sensori e di conseguenza (se previsto) con i propri attuatori. Un esempio, banale e ridondante (d’altronde sto scrivendo io…) sono i Boids.
Più precisamente gli agenti tropistici sono definiti da un 6-tupla, composta da <E,P,A,see,action,do>, dove “E” è il set degli stati dell’ambiente, “P” è una partizione dell’ambiente, ovvero ciò che l’agente “vede”…il suo punto di vista insomma; “A” è il set delle azioni possibili dell’agente. “see” è definibile come la derivazione dell’ambiente (P) a partire, ovviamente, dall’ambiente (E), quindi E–>P; Action indica la scelta d’azione in funzione della derivazione dell’ambiente dell’agente, quindi P–>A; do, quindi, dichiara le azioni scelte dall’agente da attuare nell’ambiente, e, quindi (A) x (E).

Agente Isteretico

L’agente isteretico è un’evoluzione dell’agente tropistico. Questa tipologia d’agente partendo da uno stato interno iniziale, osserva l’ambiente, in linea con il proprio stato iniziale sceglie poi l’azione da compiere, compie l’azione e modifica il set dei propri stati interni aggiungendo il risultato ch’è emerso dalla sua azione. E’ possibile modellarlo (…sempre qui si torna) partendo dalla 6-tupla ed aggiungendo altri tre oggetti. Quindi arrivando ad una9-tupla, la quale è così costituita <I,E,P,A,i₀,see,internal,do,action>.
“E”, “P”, “A”, “see”, “do”, “action” sono i medesimi oggetti dell’agente tropistico.
Quello che viene aggiunto è I, inteso come il set degli stati dell’agente, i₀, lo stato iniziale (quindi contenuto nel set I). A differenza della prima categoria, qui, “action” è definita come I x P , quindi (I) x (P)–> (A). Seguendo quanto detto poco fa, l’agente fa un “update” del suo set di stati interni, quindi “internal” è definito come (I) x (P)–> (I).

Agente Knowledge-Based

L’ultima categoria di questo elenco sono gli agenti definiti come knowledge-base. Ovvero agenti “aventi conoscenza”. Questi agenti osservano l’ambiente, in base ad esso ed alla loro conoscenza interna sviluppano una sorta di ragionamento con la quale definiscono l’azione da compiere, compiono l’azione e con i risultati delle loro azioni traggono “conoscenza” che salvano nel loro data-base; fanno quindi, anche qui, un “update” informativo.
Anche gli agenti knowledge-base sono modellabili, genericamente, con una
9-tupla: <D,E,P,A,d₀,see,action,do,database>; dove “D” è un set di database di calcolo di predicati, “E”,”P”,”A”,”see”, “do” sono i medesimi oggetti dell’agente tropistico, “d₀” è il database iniziale (quindi allo stato “0” al tempo t₀), “action” è definibile come (D) x (P)–> (A) e “database” è definibile come (D) x (P)–> (D).

Questa era la classificazione di Genesereth. Più avanti prenderò (almeno in parte) i concetti dell’agente tropistico ed agente reattivo per provare a fare uno elettromeccanico. Sì, “agente reattivo” non l’ho ancora definito…dammi qualche riga ed arrivo anche a lui.

Bando alle ciance, continuiamo.

In questo contesto, date queste due macro classificazioni, introduciamo una terza classificazione sviluppata da Ferber, che prevede una semplice tabella con due colonne e due righe (matrice quadrata).
Il tutto parte dalla divisione tra agenti cognitivi ed agenti reattivi, comportamento teleonomico e comportamento riflesso.
La differenza tra agente cognitivo ed agente reattivo è data semplicemente dalla rappresentazione del mondo (ambiente) che può disporre l’agente in questione. Ovvero se l’agente può disporre, o meglio, dispone di una rappresentazione simbolica dell’ambiente in cui si trova, e, può partire da questa per formulare ragionamenti, allora si parlerà di agente cognitivo. Viceversa, se l’agente non dispone di una rappresentazione dell’ambiente in cui si trova (un modello del mondo), quindi una rappresentazione sub-simbolica, e, reagisce “semplicemente” agli stimoli, allora viene detto agente reattivo. Questi due “filoni” appartengo ad altrettante scuole di pensiero; la prima (agente cognitivo), sostiene un approccio basato su insiemi di agenti “intelligenti” che interagisco tra loro, collaborativi. Ha quindi una prospettiva più sociologica.
Il secondo filone, invece, studia la possibilità dell’emergenza di un comportamento “intelligente”, di un insieme di agenti “non intelligenti”, come per esempio le colonie di formiche.
Per quanto riguarda la distinzione tra comportamento teleonomico e riflesso, la questione è basata sulla differenza tra un comportamento intenzionale, quindi il perseguire uno scopo esplicito, ed, un comportamento più legato alle percezioni. Alla luce di tutto questo possiamo disegnare una semplice tabella in grado di riassumere.

 

Tabella Riassuntiva

Vista la tabella qui riportata, diamo una rapida spiegazione della prima colonna: “Agenti Cognitivi”.
Gli agenti cognitivi sono, il più delle volte, agenti intenzionali, ossia hanno “goals” prefissati, che, in qualche modo, tentano di realizzare. Oltre agli agenti intenzionali troviamo gli agenti modulari. Questa categoria di agenti, è peculiare perché, pur possedendo una rappresentazione del loro universo, quindi dell’ambiente di cui fanno parte, non possiedono “goals” prefissati e ben definiti. La domanda riguardante il loro utilizzo è ovvia (è ovvia no? Insomma…che diavolo fanno se non hanno uno scopo? Matrix insegna ndr), la riposta un po’ meno, ma decisamente valida. Infatti tali agenti potrebbero servire, parlando ad esempi, a rispondere alle varie interrogazioni avanzate da altri agenti sull’ambiente in cui operano.

Passiamo adesso alla seconda colonna, quella degli “Agenti Reattivi”.

Gli agenti reattivi, più che una tipologia di agenti è un’altra categoria. Questa categoria è composta da agenti impulsivi e agenti tropistici (o tropici). Andiamo con ordine.

L’agente impulsivo è modellato con un “goal” ben definito e determinato inizialmente. In base, poi, alle percezioni (e all’assenza di percezioni) modificherà il suo comportamento per cercare di raggiungere il “goal” iniziale.
L’agente tropico, invece, reagisce semplicemente allo stato locale dell’ambiente in cui si trova. Ovvero il “goal” è legato esclusivamente alle condizioni dell’ambiente preso in causa. Reagisce cioè in base a semplici stimoli “captati” dai suoi sensori ed indotti dall’ambiente.
Quindi nel primo caso, il “goal”, la motivazione, lo scopo dell’agente, è interno, ovvero gli agenti impulsivi hanno il “goal” prefissato, hanno uno scopo d’azione predefinito, hanno una “motivazione” interna, a monte.
Nel caso, invece, dell’agente tropistico, come detto prima, il “goal” è esclusivamente legato all’ambiente in cui l’agente si trova.
Di per sé è una classificazione poco più ampia di quella di Genesereth, ma comunque rilevante per comprendere le funzioni e l’uso degli agenti analizzati.

Gli Agenti di Wooldridge

Passando da Ferber a Wooldridge, la definizione di agente cambia.

Infatti:“un Agente è un’entità che agisce attivamente, modificando l’ambiente piuttosto che subirlo passivamente. Agisce in modo autonomo, senza l’intervento diretto dell’uomo, cercando di raggiungere il suo obiettivo massimizzando una qualche funzione valutativa. E’ un sistema di alto livello che sembra soggetto a desideri, giudizi, o a qualche altra funzione di tipo cognitivo. E’ un sistema intenzionale. Più correttamente si tratta di un sistema che, data la sua complessità, è conveniente descrivere tramite gli Stati Intenzionali“.

Il termine “stati intenzioni” viene preso in prestito dalla filosofia, in particolare dal meccanicismo. Infatti con “intenzione” si intende la capacità della mente di mettere in relazione l’organismo umano con il mondo, quindi, come potrebbe fare un agente, tramite la funzione d’azione, con il suo ambiente. Arrivando invece a “stati intenzionali”, si definiscono proprio come metodo o modo psicologico diretto verso un oggetto con un contenuto proposizionale (“ho delle condizioni da soddisfare”). Prendendo in causa gli studi di John Searle e Daniel Dennett, possiamo definire graficamente gli stati intenzionali. La prossima (approssimativa) immagine ci mostra come.

 

Stati Intenzionali

 

Anche J. K.Horberg basa la sua definizione di Agente sul concetto di autonomia, tuttavia, introduce come ulteriore elemento, la mobilità: “L’Agente è un’entità mobile, che viaggia attraverso la rete ed è in grado di duplicarsi su altri computer per eseguire il compito assegnatogli. Inoltre, un agente è un’entità autonoma, cioè esso è in grado di eseguire compiti da solo e di prendere decisioni autonomamente, perfino in funzione dell’utente”.
In questo caso si parla di agenti tipicamente legati alle reti. Software veri e proprio, non più “triangolini” all’interno di un ambiente descritto da software come potrebbe essere NetLogo.
Dalla definizione è pressoché inevitabile non fare collegamenti con la definizione e l’esemplificazione del “ Semantic Web di Tim Berners-Lee.

 

Tim Berners Lee

Il quale diceva: “Il Web Semantico è un’estensione del Web corrente in cui le informazioni hanno un ben preciso significato e in cui computer e utenti lavorano in cooperazione“.
Oppure l’esemplificazione del medesimo scienziato che descriveva l’esempio di due fratelli, che, dovendo far fare alla madre una visita specialistica e delle cure presso un centro fisioterapico, per la prenotazione delle terapie facessero uso di “agenti intelligenti”. I quali in modo automatico e grazie al semantic web, partendo dalle indicazioni del medico ricavavano la struttura ospedaliera più comoda e consona alle cure. Ricavavano poi, sempre in maniera autonoma ed intelligente, gli orari delle sedute compatibili con gli impegni dei fratelli che alla fine dovevano solo dare il consenso alla prenotazione.
E’ quindi palese il “legame” con i nostri agenti e gli ambienti specifici in cui far loro svolgere le loro azioni.
Come altri scienziati ed esperti del settore dissero, gli agenti vengono visti come Sistemi Intenzionali e come già detto tale termine venne utilizzato dal filosofo, citato supra, Daniel Dennett per descrivere ulteriormente gli agenti: “Entità il cui comportamento può essere previsto attraverso il metodo dell’assegnazione di credenze, desideri e capacità razionali”
Detto ciò, Dennett, differenzia dei “gradi” per questi sistemi dicendo: “Un sistema intenzionale del primo ordine ha opinioni e desideri, ma non opinioni e desideri che riguardino quest’ultimi […] Un sistema intenzionale del secondo ordine è più sofisticato; ha infatti opinioni e desideri anche verso le proprie opinioni e i propri desideri“.
Quello che va, in qualche modo, sottolineato è che un agente può essere visto come un’entità software responsabile per l’esecuzione di un determinato compito, avente un certo grado “intelligenza” ed operante per conto di un utente o di uno/altri agenti.
Jennings, invece, sottolinea, anche, come sia possibile schematizzare il termine agente con un significato “Debole” (Weak), dove il termine agente viene semplicemente usato per indicare un software capace di:

Autonomia: capacità di operare senza l’intervento umano;
Capacità Sociale: capacità di interagire con altri Agenti;
Reattività: capacità di reagire a stimoli esterni;
Iniziativa: pro-activeness, capacità di prendere l’iniziativa.

ed un significato “Forte” (Strong), dove agli agenti vengono assegnati attributi tipicamente associati all’attività mentale umana, più psicologici, quali:

– Conoscenza: il complesso di nozioni che possiede.
– Intenzioni: il volgersi della volontà verso un determinato fine.
– Obblighi: dovere imposto.
– Desideri: ottenere qualcosa.

Oltre a queste classificazioni, possiamo trovare ulteriori attributi associati agli agenti, come:

Mobilità: è la capacità di un agente di spostarsi all’interno dell’ambiente in cui opera, per poter raggiungere le risorse di cui necessita o le informazioni di cui è alla ricerca, insomma per raggiungere il suo obiettivo. Per gli agenti fisici il movimento avviene all’interno di un ambiente reale, mentre per gli Agenti software si intende il trasferimento da un nodo all’altro di una rete di computer o da un computer ad un altro. La mobilità rappresenta un ulteriore aspetto di autonomia, in quanto la scelta del percorso, il path, da seguire, come e dove fermarsi sono lasciate al giudizio, se così possiamo dire, dell’agente in questione;
A tal proposito possiamo distinguere due livelli di mobilità: l’esecuzione remota e la migrazione.
Per quanto riguarda l’ ”Esecuzione Remota”, l’agente viene spostato su un altro host della rete (parlando di agenti software) ed eseguito interamente in remoto, a distanza quindi. Mentre, parlando di “Migrazione” durante l’esecuzione, un agente è in grado di spostarsi di propria iniziativa in un altro nodo della rete. Ergo è capace di sospendere la propria esecuzione, migrare e riattivarsi dal punto di sospensione iniziale.
Tornando agli attributi possiamo trovare:

Cooperazione: attributo che si ha quando più agenti sono impegnati nel conseguimento di un obiettivo comune, il così detto “common goal”, e, ciò implica l’esistenza di aspetti di comunicazione e coordinamento, appunto, necessari per organizzare gli agenti partecipanti all’operazione seguendo una data strategia, e, per permettere lo scambio dei risultati parziali e non, raggiunti (o meno);
Apprendimento: si tratta della capacità di estrapolare pattern (comportamentali, di movimento, logici etc), informazioni e quant’altro delle esperienze passate, per servirsene in un secondo momento, magari per poter prendere una determinata decisione (forte legame con il Machine Learning)
Focalizzandoci sulla tecnologia degli agenti software, troviamo, come di consueto, altri attributi, tra cui:
Adattamento: ovvero quella proprietà di un agente di modificare il proprio comportamento in funzione delle condizioni dell’ambiente in cui esso opera. L’agente in questione, in questo caso, si definisce adattativo, se è in grado di cambiare autonomamente il proprio comportamento al fine di adeguarsi alle situazioni in cui si viene a trovare.
Sincerità: quindi l’incapacità dell’agente di comunicare intenzionalmente false informazioni. Questo avviene perché l’agente non è in grado di scegliere (tra menzogna e verità).
Benevolenza: è la proprietà dell’agente per la quale , l’agente stesso, non può avere goals, obiettivi, da raggiungere che siano in contrasto con i goals di eventuali altri agenti in quell’ambiente.
Razionalità: questa astrazione si basa sul concetto che le azioni compiute da un singolo agente siano volte al perseguimento di determinati obiettivi, e che, in nessun caso, cerchino di ostacolarne il raggiungimento.

Sono un gran numero di proprietà ma questo non vuol dire che un agente debba necessariamente possederle tutte; tuttavia ve ne sono alcune, come per esempio l’adattamento e l’apprendimento, che risultano strettamente correlate tra loro e pertanto può, in qualche modo, risultare difficoltoso distinguerle oltre che scinderle.
Proviamo a riassumere le proprietà con un semplice grafico.

 

Proprietà dell’agente

 

 

Sistemi Multi-Agente (MAS)

Con sistema multi-agente ci si riferisce, come dice il nome stesso, a sistemi complessi in cui opera un numero di agenti maggiore di 1.
Questo tipo di sistema si basa su due concetti principe: agente e contenitore d’agenti (Container).
Da questo ne deriva che l’insieme di tutti i “contenitori” è detta piattaforma.
Avendo ciò possiamo modellare una struttura software (parlando di agenti software) complessa, costituita da sistemi cooperanti tra loro per il raggiungimento di un obiettivo comune.
La piattaforma ad agenti rappresenta una sorta di “virtual machine” per l’esecuzione degli agenti stessi (se software), una sorta di contenitore dove gli agenti in questione risiedono e possono vivere ed operare.
Come abbiamo detto prima, l’ambiente.
Il termine sistema Multi-Agente viene utilizzato per indicare tutti i tipi di sistemi composti da più agenti software (o meno) il cui scopo è quello di coordinare le azioni, di questo insieme di agenti autonomi, così da far emergere un comportamento di tipo “intelligente” per raggiungere il “common goal”.
Questo perché nonostante la mole di informazioni e/o le capacità posseduta da ogni singolo agente, esso non è sempre in grado di risolvere un determinato problema senza ausilio. Perché, ovviamente, esistono problemi aventi un grado di complessità tale da necessitare un numero maggiore d’agenti maggiore di uno.
O anche perché una determinata simulazione, modellizza dei problemi nei quali partecipano diversi attori (esempio il crowd computing).
Per questi motivi e ragioni, la cooperazione tra gli agenti, per il raggiungimento di un determinato obiettivo, deve necessariamente prevedere lo scambio di informazioni tra gli agenti stessi.
Ed è da qui che nasce la necessità di definire uno standard per la comunicazione tra agenti.

 

Standard di comunicazione tra agenti

Questo standard deve avere delle “entità” ben definite:
– Un protocollo ed un linguaggio di comunicazione in grado di descrivere le diverse tecniche di comunicazione tra gli agenti ed un linguaggio che sia indipendente dalla struttura fisica degli agenti stessi. Uno dei linguaggi di comunicazione tra agenti è l’ “ACL” o “Agent Communication Language”.
– Un formato per il contenuto dell’informazione che sia univoco e che dia la possibilità ad ogni agente di poter riconoscerne il contenuto senza generare ambiguità.
– Una o più ontologie. Un volta definiti linguaggio e formato per il contenuto dell’informazione, bisogna definire e generare le ontologie per poter dare un significato apprezzabile ai contenuti trasmessi.
In questo breve elenco possiamo ritrovare due termini relativamente “nuovi”: “Ontologie” e “ACL”.

Partiamo dal primo termine, ontologie.
Il termine ontologia viene preso in prestito, anch’esso, dalle scienze umane, in particolare dalla Filosofia.
In questo “ambiente”, viene visto come la scienza dell’essere.
In ambito informatico invece acquisisce un’accezione differente; ovvero, secondo Gruber, l’ontologia è un’esplicita specializzazione di una concettualizzazione. Per essere un po’ più esaustivi possiamo definire l’ontologia come una rappresentazione formale ed esplicita di una concettualizzazione condivisa di un dominio di interesse. Con “rappresentazione formale” si indica il fatto che viene utilizzato un linguaggio logico processabile dalle macchine (o comunque direttamente dagli agenti ed indirettamente dal calcolatore in questione).
Con “esplicita” invece indichiamo l’assenza di ambiguità, mentre con il termine concettualizzazione di parla di una “vista astratta” e più o meno semplificata del dominio di interesse.
Infine indichiamo l’ontologia come “condivisa” perché deve “avere” il consenso della più ampia pluralità di soggetti, in questo caso, agenti. Un’osservazione da fare in merito è che la formalizzazione delle ontologie viene fatta per mezzo di linguaggi logici e quindi dotati di operatori e costrutti atti all’aumentare il potere espressivo delle ontologie stesse.
Una modellazione formale dell’ontologia consente la verifica della soddisfacibilità di una descrizione, cioè si può verificare se un’istanza del dominio (dell’ontologia) non sia in conflitto logico con tutto ciò che è già stato modellato all’interno dell’ontologia evitando così i fenomeni d’inconsistenza e di ridondanza. Dopo queste poche righe, rileggendo il breve elenco (vedi supra), è possibile dire che, le ontologie (utilizzate moltissimo nel “sematic web”) siano in grado di dare il giusto supporto ai vari attributi degli agenti.

Vediamo ora di spendere qualche parola per quanto riguarda l’ “ACL”.
L’ “ACL” è un linguaggio della FIPA, che a sua volta è una standard della IEEE Computer Society, che promuove la tecnologia “Agent-Based” e l’interoperabilità di altri standard con altre tecnologie.
Piccola nota rapida, FIPA è l’acronimo di “Foundation for Intelligent Physical Agents”, ovvero la fondazione per gli agenti fisici intelligenti, nata nel 1996 a Ginevra.
Bene torniamo al nostro “ACL”.
Come già detto è l’acronimo di “Agent Communication Language”, ovvero è il linguaggio di comunicazione degli agenti. Si basa sula teoria degli “Atti comunicativi”, che a sua volta si basa sull’idea che tramite il dialogo, non solo si esprima un’affermazione, ma contemporaneamente si compia un vera e propria azione.
Ciò che non deve trarre in inganno è che questo linguaggio/modello, sia universale ed utilizzato da qualunque agente. Perché non lo è! Gli agenti che sono in grado di comunicare tra loro per un determinato task non sono “tutti gli agenti del mondo”. Ad ogni modo anche questo linguaggio di per sé è un modello, e come tale, ha il pregio d’esser straordinariamente chiaro, oltre a permettere di definire diversi protocolli ad alto livello tra cui “Query Protocol” e “Request Protocol” .
Definendo “ACL”, FIPA, voleva evidenziare un linguaggio comune fra gli agenti ed una semantica indipendente dalla struttura interna degli agenti comunicanti.
E’ doveroso dire che FIPA non si occupa di stabilire protocolli di rete e di trasporto a basso livello dell’architettura di comunicazione di un sistema distribuito; ma assume l’esistenza di tali servizi per la realizzazione degli “Atti comunicativi” (di cui supra).
Tornando “supra” e ai “MAS”, proviamo a dare ulteriori attributi di classificazione per gli agenti operanti in questo sistema. Come detto prima, le classificazioni si basano su criteri differenti. Cerchiamo di raggrupparli.

Contesto Applicativo degli Agenti

E’ possibile raggruppare gli agenti in anche in base al contesto applicativo nel quale vengono utilizzati:

Agenti Mobili (Mobile Agents): sono agenti capaci di muoversi attraverso le reti di calcolatori andando ad interagire con diversi host, ricercando e raccogliendo informazioni per conto di altri agenti.
Agenti di Interfaccia ( Interface Agents ): sono quelli preposti all’interfacciamento con l’utente e per l’assistenza nell’esecuzione di determinati compiti. Sono in grado di contattare ed interagire con altri agenti, con lo scopo di eseguire i propri compiti. Questi tipi di agenti sono solitamente statici, in quanto non sono in grado di spostarsi dalla macchina fisica in cui risiedono ed operano, a differenza degli agenti mobili.
Agenti Cooperativi (Co-operative Agents): sono quegli agenti in grado di cooperare e collaborare con l’ambiente circostante o con altri agenti per il raggiungimento di un obiettivo che può essere sia comune (common goal) che individuale.
Agenti Ibridi (Hybrid Agents): questi agenti sono quelli che presentano caratteristiche di diverse tipologie. Presentano caratteristiche comuni agli agenti citati in precedenza, come la mobilità, la cooperazione… In questa
categoria rientrano, quindi, tutti quegli agenti che non possono essere classificati altrimenti.

Una semplificazione del concetto di agente è la seguente “Agente = Software + Architettura”.
In base a questo, un agente mobile, può benissimo essere un software in grado di eseguire un altro altro software (meta-software), come per esempio l’algoritmo “A*”.
Definendo l’algoritmo con un linguaggio di programmazione adatto, l’agente software, potrebbe spostarsi da un nodo (host) di una rete fino a raggiungere il nodo “goal”, impiegando meno tempo possibile. Il che significa con meno tentativi possibili.
Infatti l’algoritmo A* fa parte di quella categoria di algoritmi definito come algoritmi di ricerca. Utilizza una stima euristica per analizzare i nodi della rete. Venne descritto nel 1968 da Peter Hart, Nil Nilsson e Bertram Raphael, con lo scopo di analizzare grafi con una metodologia di ricerca “Best Firts”.

Tutti i differenti tipi di agente menzionati dovrebbero esser in grado di comunicare ed interagire tra loro, con lo scopo di scambiarsi informazioni reciprocamente e collaborare.
La necessità di cooperare e comunicare conduce alla necessità di coordinare le attività degli agenti così da poter semplificare la costruzione di un Multi Agent System.
Quindi possiamo dire che un Multi Agent System è un insieme di entità indipendenti in grado di agire individualmente. Cercando una definizione più precisa, possiamo dire:

Un MAS è un sistema in cui alcuni Agenti intelligenti interagiscono per soddisfare un certo insieme di obiettivi, allo scopo di portare a termine un insieme di compiti.

Ergo le caratteristiche principali dei MAS sono:

– fornire un’infrastruttura in grado di specificare protocolli di comunicazione ed iterazione,
– contenere agenti autonomi che possano avere i propri interessi come interessi in comune,
– ciascun agente deve avere informazioni e capacità limitate
– il sistema di controllo deve essere distribuito
– i dati relativi sono decentralizzati e la computazione è asincrona. Quindi in linea con i criteri di agente già definiti.

 

 

Dal Disco.Unimib.it qualche schema chiarificatore

Un ringraziamento per i materiali

Esempi molto più “fisici” di un utilizzo dei MAS li possiamo trovare in grandi fabbriche.
Per esempio nei vasti magazzini automatizzati, dove robot semoventi, caricano, scarico e spostano da una zona all’altra grandi quantità di oggetti in autonomia, collaborando tra di loro.
Di norma ci sono robot con funzioni diverse, per esempio uno di loro potrebbe benissimo esser dotato di grandi braccia prensili per afferrare e riporre oggetti su scaffalature, mentre altri potrebbero avere una sorta di vano di carico con braccia meccaniche più piccole: uno prende un grande oggetto da uno scaffale in alto e nel tempo impiegato per far ciò un altro si posiziona sotto di esso per esser caricato con il grande oggetto. Dopo di che quest’ultimo potrebbe portare l’oggetto nell’area di carico mezzi e con le braccia meccaniche caricare l’oggetto su un veicolo apposito pronto a partire.
Insomma le possibilità sono a dir poco tantissime.

 

 

Prendendo palesemente dei .pdf del già citato corso di “Sistemi Complessi: Modelli e Simulazione” del professor Vizzari, possiamo dare un’occhiata ad alcune schematizzazioni di un sistema simile a quelle “raccontato” poche righe più su. Nelle slides troviamo un primo approccio al problema, un approccio diretto e centralizzato, dove un calcolatore centrale posto in loco assegna i diversi compiti. Il sistema così progettato ha il pregio d’esser direttamente (ed in alcuni casi facilmente) configurabile e predittibile. Tuttavia questi “pro” si scontrano per forza con dei “contro” come la scalabilità, adattabilità e la flessibilità del sistema intero.

 

Sistema centralizzato

Usando un approccio decentralizzato, invece, si va a complettere l’intero sistema. Insomma la complessità generale del sistema aumenta drasticamente.
Tuttavia adattabilità, scalabilità, interazione con altri sistemi, resilienza e flessibilità aumentano notevolmente.
Di nuovo, ringraziando il professor Vizzari inserisco due slides esemplificative.

 

Sistema Distribuito

 

Architettura di un MAS

Con questo abbiamo finito i cenni riguardo ai MAS.
Ora come anticipato, vediamo come fare un semplice agente tropistico/reattivo nel mondo reale.

 

Costruiamo un Agente Tropistico/Reattivo

In sostanza quello che andremo a vedere è un piccolo rover elettromeccanico che grazie a due sensori modifica la propria posizione in funzione degli ostacoli rilevati.
Ci sono un’infinità di modi per fare una cosa simile, dai sensori ad infrarossi a quelli ad ultra suoni, fino ad i più complessi sistemi di visione stereoscopica.
Ma noi, qui ci limiteremo all’utilizzo di semplici oggetti “di casa” (…più o meno) ed ai sensori più basilari esistenti: i bumper; ovvero sensori di contatto.
Bando alle ciance, ed iniziamo con la “lista della spesa”:

– una base quadrata o rettangolare, di plastica o compensato. Le misure sono irrilevanti, l’importante è che abbiate spazio a sufficienza per far stare i componenti;

– due switch fine corsa a tre poli (io li ho cannibalizzati da un vecchio scanner) ma si trovano molto facilmente in negozi di elettronica/elettrotecnica;

– Qualche spezzone di cavo elettrico;

– Un porta-batterie stilo (da 2 o da 4);

Batterie stilo … ovviamente;

– Due servo-motori da modellismo od in alternativa due motori elettrici DC (quelli per giocattoli/mini 4WD);

– Uno switch/interruttore (opzionale);

– Due ruote isodiametriche (…santi LEGO);

– Un ruotino “di coda”;

Clip da carta;

Colla a caldo;

Saldatore a stagno e stagno;

Taglierino;

Pinza.

Nel caso non voleste saldare (svogliatezza o “mai fatto prima”) è possibile sostituire saldatore e stagno con connettori faston, mammuth e relativo cacciavite. Ma in questo caso assicuratevi di avere degli switch fine-corsa con connettori adatti.
Inoltre nel caso utilizziate i servo-motori, sarà necessario modificarli, quindi vi servirà un caccia-vite a stella di precisione ed un po’ di manualità.

Bene, cominciamo.
Qui potete vedere la mia “lista della spesa”

Il necessario

Il principio è molto semplice, utilizzeremo i fine-corsa come sensori, i quali, una volta attivati (chiusi) faranno cambiare verso di rotazione ad uno dei servo motori (quello ad esso collegato), facendo così spostare dall’ostacolo il nostro “agente”. Vi metto lo schema elettrico disegnato al CAD per meglio capire.

 

Schema Elettrico

Quello che dobbiamo fare come prima cosa è modificare i servo-motori.
Questo perché i classici servo-motori analogici utilizzano un potenziometro per comunicare la posizione dell’asse di rotazione. Inoltre hanno una rotazione limitata a soli 120 gradi (+60 gradi e -60 gradi). Inutile quindi come motore propulsivo. Ecco perché andremo a modificarli per renderli a rotazione continua.
Se invece, per semplicità, volete utilizzare dei semplici motori DC, questa operazione non è da compiere.
Per chiarire il tutto vi metto una sequenza di immagini esemplificative.

 

Smontaggio 1 del servo-motore


Inoltre cliccando qui vi reindirizzo ad un documento .pdf ben fatto con la spiegazione passo a passo per la modifica dei servo-motori.
Una volta modificati gli ingranaggi dei servo-motori ed i relativi potenziometri richiudiamo tutto, avendo l’attenzione di lasciar uscire correttamente i due cavi di alimentazione del motore (di norma rosso e nero).

 

Modifica e rimontaggio dei servo-motori

Dopo di che, con due spezzoni filo elettrico allunghiamo i cavi di alimentazione che vanno al servo, saldando…oppure li colleghiamo con i mammuth o con alcuni faston (ricordatevi che i fine-corsa devono essere specifici per i faston in questo caso).

Fine-corsa con collegamenti faston

 

Incolliamo specularmente i fine corsa sulla basetta, facendo fuoriuscire dall’area della basetta le linguette metalliche dei fine-corsa. Una volta che la colla è asciutta, potete iniziare a saldare i primi due contatti dei fine-corsa tra di loro. Quando avete fatto, “srotolate” una clip per i fogli di carta, e, con la più precisa misurazione possibile in questo caso…la spannometrica, tagliate un pezzo di clip lungo a sufficienza da raggiungere i due poli centrali dei fine-corsa (dall’uno all’altro). Per far questo aiutatevi con la pinza. Nelle foto ci sono due “modelli” di rover, uno molto piccolo fatto con i fine-corsa dello scanner e l’altro molto più grande fatto con i fine-corsa adatti ai faston. I collegamenti sono ovviamente identici. Le prime foto riguardano il “rover” più piccolo. Dopo di che metterò in sequenza le foto con il rover più grande. Sicuramente potranno aiutare nei collegamenti elettrici.

 

Collegamenti elettrici

Molto bene. Ora con il porta batterie dovreste avere anche l’apposito connettore con i due cavi (rosso e nero). Staccate i cavi con delicatezza dal porta-batteria. Saldate il cavo rosso (+) assieme ai primi contatti dei fine-corsa. Quelli messi a contatto (scusate il gioco di parole) senza ausilio della clip tagliata per intenderci. Una volta fatto, saldate l’estremità dell’altro cavo (quello nero (-)) ad uno dei contatti centrali dei fine-corsa (sì, questa volta quelli messi in contatto con il pezzo di clip).

Ora incollate come nelle immagini i servo-motori con la colla a caldo facendo attenzione a lasciare liberi i due (4 visto che i servo sono 2) cavetti di alimentazione (ricordatevi di isolare le saldature per evitare cortocircuiti, basterà del nastro isolante o della guaina termo-restringente).

 

Collegamenti

Adesso focalizziamoci sul servo posto alla vostra destra.
Prendete il cavo di alimentazione rosso (+) e saldatelo a contatto con l’ultimo “pin” del fine-corsa destro. Fate la stessa operazione con il servo di sinistra ed il relativo fine-corsa.

Ora prendete il porta-batteria, controllate i lati, dovreste vedere i vari collegamenti per ogni coppia di slot per le batterie (se utilizzate un porta-batteria da 4 stilo). Dividete gli slot (mentalmente) in due coppie, individuate il collegamento metallico tra le due (coppie) e saldateci un piccolo spezzone di cavo elettrico.
Incollate alla basetta il porta-batteria, con la colla a caldo. Ora prendete gli ultimi cavi “vaganti”, quelli neri dei due servo-motori (-) e quello che avete appena saldato al porta-batteria. Dovete saldarli assieme o comunque metterli in contatto tra loro con un mammuth.
Seguite comunque lo schema elettrico e non potrete sbagliare.

 


Volendo, potete tagliare il cavo rosso del porta-batteria per saldarci lo switch/interruttore, in modo da poter accendere e spegnere “l’agente” senza dover togliere le batterie e rimetterle.

 

Ci siamo quasi.
Con i pezzi LEGO, corredate gli assali dei servo-motori con delle ruote (gommate…devono fare attrito), se necessario usate pure la colla a caldo, ma fate attenzione a non incollare l’assale del servo-motore alla sua copertura.
Con un’ultima ruotina provvedete ad installare il “ruotino di coda”.
Come ultima operazione “srotolate” due clip per i fogli e piegatele leggermente come a creare un lieve arco.
Con la colla a caldo incollate gli archi alle levette metalliche dei fine-corsa (uno per ciascuno); come dei baffi. (questa tipologia di sensori, in robotica viene chiamata “a contatto” e più specificatamente “ whiskers”).

Ecco fatto. Fate asciugare il tutto; mettete le batterie nel porta-batterie facendo attenzione alle polarità e fate partire il vostro rover.

Toccando un ostacolo a destra, il servo-motore di sinistra girerà in direzione opposta a quello destro, facendo virare il bot e liberandolo dall’ostacolo e viceversa con un ostacolo a sinistra.

Per chi ha preferito utilizzare i connettori faston, cambia nulla.
Invece di saldare, usate lo stesso schema usando gli spezzoni di cavo ed i connettori faston.

 

Fine corsa con attacchi faston, inizio cablaggio

Rover “grande” con collegamenti faston

Buona costruzione a tutti!

In rete potete trovare dozzine di tutorial simili. Vi lascio un link su youtube.

 

Se invece volete montare qualche componente di alta qualità e magari implementare funzioni ben più avanzate, programmando un po’ vi consiglio di rivolgervi alla “Parallax“, ha dei kit bellissimi modulari, ampliabili e spiegati (in inglese) passo a passo. Se invece avete un animo un po’ più “open-source”, il buon vecchio “Arduino” resta sempre la miglior opzione.

 

Parallax “Boe-Bot kit”

 

 

Arduino Uno “rev-3”

A presto

 

 

 

Andrea

 

 

Credits:

http://elearning.unimib.it/pluginfile.php/377755/mod_resource/content/1/20170310-agent-arch.pdf

https://www.ibiblio.org/cmc/mag/1995/feb/horberg.html

https://www.amazon.it/generale-sistemi-Fondamenti-sviluppo-applicazioni/dp/8804533420

https://it.wikipedia.org/wiki/Teoria_dei_sistemi

https://it.wikipedia.org/wiki/Ludwig_von_Bertalanffy

https://it.wikipedia.org/wiki/Isaac_Asimov

https://www.ieee.org/

http://www.fipa.org/

https://it.wikipedia.org/wiki/Teoria_degli_atti_linguistici

https://www.npmjs.com/package/query-protocol

https://www.w3schools.com/tags/ref_httpmethods.asp

https://it.wikipedia.org/wiki/Agent_Communications_Language

https://it.wikipedia.org/wiki/Algoritmo

https://it.wikipedia.org/wiki/Algoritmo_A*

https://it.wikipedia.org/wiki/Euristica

https://en.wikipedia.org/wiki/Nils_John_Nilsson

https://en.wikipedia.org/wiki/Bertram_Raphael

https://en.wikipedia.org/wiki/Peter_E._Hart

https://it.wikipedia.org/wiki/Best-first_search

Garzantilinguistica.it

http://www.dis.uniroma1.it/~nardi/Didattica/IA/lezioni/3-ric-aut.pdf

http://www.di.unito.it/~goy/papers/lexia09.pd

https://www.parallax.com/

https://www.arduino.cc/


2 Replies

Main posts – comunicazione

“Finalmente” una comunicazione positiva dal mondo della Simulazione! In questo breve post vi vogliamo spiegare il motivo per cui trovate sparsa per i diversi articoli l’espressione “main post” oppure “featured post”.  (altro…)


2 Replies

Il mondo virtuale è reale, la Realtà è virtuale

Buongiorno o buonasera, ecco a voi il tanto atteso main post, id est l’articolo di approfondimento in cui saranno analizzati a fondo alcuni aspetti concernenti la Realtà Virtuale. Affinché la lettura non risulti eccessivamente complessa, saranno indicati in seguito i temi trattati, suddivisi in paragrafi all’interno del corpus del testo. Gli articoli riguardo la Realtà Virtuale che avete avuto modo di leggere sinora si sono occupati del rapporto tra essa e il giornalismo, l’arte e l’istruzione. In questi si cercava di cogliere le differenti implicazioni che la realtà virtuale può offrire, ma veniva, in un certo senso, tralasciata una visione più ampia sullo stato della realtà virtuale. In quest’occasione vi propongo una riflessione globale su questo aspetto, partendo da un ripasso rapido delle tappe fondamentali che hanno portato allo sviluppo della RV così come oggi è conosciuta, arrivando al futuro che è in serbo per questa tecnologia (e per l’intera società). (altro…)