Sistemi Multi-agente Agente Entità reale o virtuale che “vive” in un ambiente, lo percepisce, agisce in esso e che ha un comportamento autonomo conseguente alla sua conoscenza, alle sue interazioni, alle sue finalità. Il controllo dell’agente sui processi suddetti è locale. Un po’ di storia Il più antico agente virtuale? La tartaruga LOGO che mette in azione un comportamento locale Non ha percezione alcuna del mondo complessivo in cui vive È “responsabile” delle sue conoscenze Si muove su una “griglia” È in sintonia con il movimento del corpo. Nasce come “strumento di pensiero” per giovani. Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw Linguaggio interpretato Scritto su linee. Ogni linea è una chiamata di funzione di tipo Comando (con effetti ma senza valore) print,.. Operazione (con valore come output) sum, list,.. Un sottoinsieme di operazioni è costituito dai predicati che assumono il valore true false MSWLOGO CiaoMondo!! label “ciaomondo!! Scegliere la grandezza, il colore del font e scrivere repeat 36 [label "ciaomondo!! rt 10 setpencolor repcount] Introduzione concetti: procedura TO BOX REPEAT 4 [FD 100 RT 90] END E se vogliamo 2 quadrati? TO BOXES REPEAT 4 [FD 100 RT 90] RT 90 PU FD 120 PD LT 90 REPEAT 4 [FD 100 RT 90] END Introduzione variabili E se devono essere tanti? E di grandezza qualunque? Studio delle figure poligonali e “geometria della tartaruga”. Vediamo qualche cammino. Qualche cammino repeat 4 [fd 50 rt 90] repeat 5 [fd 50 rt 72] repeat 6 [fd 50 rt 60] repeat 5 [fd 50 rt 144] repeat 3 [fd 50 rt 120] Può la tartaruga decidere a priori che il cammino si chiude? Cammina su un cerchio C’è una sola corda di lunghezza fissata in una direzione I dati Possono essere Parole Liste Vettori I numeri sono casi particolari di parole. Non c’è il sistema forte dei tipi: l’interprete lo decide dal contesto. I dati due simboli particolari : per indicare “il contenuto di ..” Si tratta di un uso molto utile per ricordare allo studente il concetto di variabile. Quotazione o “ Si tratta di un simbolo che indica nessuna valutazione. Il numero è un caso speciale di autovalutazione “2 2 Assegnamento make “ x sum :y 3 ha due parametri. L’effetto sta nel porre nel primo parametro la valutazione del secondo Sum :y 3 dove si indica di effettuare la somma tra il contenuto di y e il numero 3 Il secondo parametro è passato per valore, il primo per indirizzo Assegnamento Indirizzamento indiretto make "x 45 make :x 3 print :45 Scoping Le variabili non devono essere dichiarate e sono globali. Possono essere dichiarate locali a una procedura e vale lo scoping dinamico. I parametri delle procedure creano variabili locali Liste Rispetto ai vettori sono espandibili first, last, butfirst, butlast, member, item. sentence fput, lput Coda con le operazioni queue, dequeue, Stack con le operazioni push and pop La ricorsione è il modo naturale di trattare con le liste. Strutture di controllo ifelse test [ do if true list ] [do if false list] repeat number [instruction list] Altre istruzioni iterative ma si raccomanda l’uso ricorsivo Esempi make "stati [italia francia spagna] label :stati Oppure label thing “stati label first :stati pr first [italia francia spagna] pr last [italia francia spagna] pr butfirst [italia francia spagna] show butfirst [italia francia spagna] ct Esempi make first [gatto cane] first [Meo Lilli] pr :gatto ?? make "Meo "gatto pr :meo ?? make :meo "graffia pr :gatto ( o pr thing :meo) ?? località La tartaruga può alterare il colore sotto di sé pu for [red 0 255] [for [green 0 255] [setpixel (list :red :green 0) fd 1] bk 256 rt 90 fd 1 lt 90] pd al variare della grandezza della “penna” località Se la tartaruga non è su un piano? Cosa vuol dire “andar diritto”? Come si accorge di non essere su un piano? Teorema del cammino semplice e del cammino semplice chiuso. Strutture di controllo OPERAZIONE [una lista di comandi] [vari dati] show map [? * ? ] [ 5 6 7 ] [25 36 49] Brian Harvey to choices :menu [ :sofar []] if emptyp :menu [print :sofar stop] foreach first :menu [(choices butfirst :menu sentence :sofar ?)] end choices [[small medium large] [vanilla [ultra chocolate] lychee [rum raisin] ginger] [cone cup]] commento The program doesn't have anything about the size of the menu built in. You can use any number of categories, and any number of possibilities in each category. Let's see you do that in four lines of Java! Esempio to vai ;sceglie un punto sullo schermo pu setxy -250 + random 500 -150 + random 300 pd rt random 360 ;sceglie l'inclinazione end Esempio to galassia :num ;traccia ‘:num’ stelle repeat :num [ vai star random 50 ] ;di ampiezza arbitraria end to star :size repeat 5 [fd :size rt 144 ] end