Home    About me    Publications    Blog    Photo gallery
Some other old good stuff

Fabio Ruini’s blog

Because Italians do it better! What the f**k? Ehm… the blogs, I mean… obviously! :-/

Archivio per Settembre, 2008

Irrlicht dentro ad una finestra Qt su Mac OS X… se po’ fa?

Brutta notizia per il mio simulatore di aeroplanini. Facendo qualche prova con Windows, le mie paure degli ultimi giorni si sono tramutate in una certezza. Il codice che stavo scrivendo, il quale sarebbe dovuto servire ad integrare il device di Irrlicht all’interno di un widget di una finestra Qt, non e’ sbagliato. Purtroppo, pero’, funziona bene soltanto su Windows e non su Mac OS X.

Fat PC vs Mac

La richiesta di aiuto che avevo postato sul forum ufficiale di Irrlicht non ha ricevuto alcuna risposta. Ora le mie speranze sono tutte affidate a tale Karol Krizka, del quale ho ripescato una discussione dalla cache di Google, riguardante lo stesso tipo di problema. Il buon Karol sembra si stia ancora sbattendo su Irrlicht, almeno a giudicare da un post che ha lasciato sul suo blog lo scorso aprile. Ho provato a scrivergli (dopo esser provato a passare anche per l’inclusione del framework di Carbon, in maniera tale da poter utilizzare il sistema HiView) ed ora sono in attesa di una sua risposta. Fingers crossed…

Fermo restando che se qualcuno riuscisse a dirmi qualcosa a riguardo del mio codice, sarebbe una cosa oltremodo gradita. Posto il tutto qui sotto:

#include < QtGui >
#include < irrlicht/irrlicht.h >
#include < irrlicht/IMeshCache.h >

#include < carbon/Carbon.h >

using namespace irr;

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#ifdef _IRR_WINDOWS_
#pragma comment(lib, “Irrlicht.lib”)
#endif

int main(int argc, char *argv[]) {

// Create the QApplication
QApplication application(argc,argv);

// Create the main window
QMainWindow *mainWindow;
mainWindow = new QMainWindow();

// Create the central widget to be put into the main window
QWidget *centralWidget;
centralWidget = new QWidget(mainWindow);
mainWindow->setCentralWidget(centralWidget);

// Show the main window
mainWindow->resize(800,600);
mainWindow->show();

// Create the Irrlicht device
irr::SIrrlichtCreationParameters params;

params.DriverType = video::EDT_OPENGL;
//params.WindowId = (void *)centralWidget->winId();
params.WindowId = (void*)HIViewGetWindow(HIViewRef(centralWidget->winId()));
params.WindowSize.Width = centralWidget->width();
params.WindowSize.Height = centralWidget->height();
params.EventReceiver = 0;
params.AntiAlias = true;

IrrlichtDevice *device = irr::createDeviceEx( params );

while(device->run()) {

// Initialize the scene
driver->beginScene(true, true, SColor(255,100,101,140));

// Draw everything
smgr->drawAll();
guienv->drawAll();

// End the scene
driver->endScene();

}

// Delete the Irrlicht device
device->drop();

// Return the control of the application to the GUI
return application.exec();

}

UPDATE: il codice che ho postato funziona alla perfezione non solo su Windows, ma anche su Linux. Appena provato su una macchina virtuale Ubuntu creata allo scopo…

Habemus Air

Per riconsegnarmelo hanno scelto una giornata un po’ insolita. Domenica mattina. Dopo avermi chiamato il sabato alle 6 per dirmi che il computer era arrivato, ma loro avevano giusto giusto chiuso il negozio. Beh, sorvolando sulle tempistiche e le modalita’ di consegna, sono lieto di annunciarvi che quello che era il fermacarte piu’ sottile al mondo ora e’ tornato ad essere cio’ per il quale era stato originariamente concepito. Un computer. Il MacBook Air. Il mio MacBook Air per la precisione.

My MacBook Air

Che dire? La giornata di oggi e’ andata via tra aggiornamenti di ogni genere, installazione di applicazioni, travaso di musica e foto, configurazione account di posta, ecc… Ma la prima impressione e’ comunque straordinariamente positiva. Anche tralasciando peso e design, due aspetti sui quali e’ inutile spendere parole, l’aggeggio (che, devo ammetterlo, avevo molto sottovalutato, viste le scarse specifiche) al momento sembra filare come un treno. Veloce, reattivo e in grado di reggere l’urto anche di applicazioni impegnative. E, venendo da un MacBook Pro con schermo LCD vecchio stampo, la differenza con il monitor dell’Air e’ davvero stupefacente.

Rassegna stampa del lunedi’

Sottotitolo: come ti salvo un po’ di tabs di Safari aperti dalla scorsa settimana, dato che causa impallamento di Parallels mi tocca riavviare il computer (eh si’, ogni tanto bisogna riavviare pure i Mac…).

Si inizia con la Cina. Un grande Paese. Che impara sempre piu’ velocemente a copiare dai grandi del mondo. Ora, alla ormai riconosciuta censura operata su Internet, si accompagnano le tecniche di Astroturfing (termine che non conoscevo, per quanto il fenomeno fosse noto). I dettagli li trovate su questo articolo del Corriere.

Chinese astroturfing

Sempre a proposito di Internet, Google ha appena compiuto il suo decimo anno di vita. E per celebrare il compleanno ha lanciato una bella iniziativa che trovate descritta a questo link. Ma se non avete voglia di leggere cose troppo serie, perche’ non dare invece un’occhiata al sito, pieno di chicche, che quelli di Google hanno creato per festeggiare l’evento?

Google’s birthday

Internet e’ sicuramente cambiata da quando Google ha fatto la sua comparsa. Cambiata molto. Dieci anni fa, ad esempio, non si aveva la benche’ minima idea di cosa sarebbe stata quell’enorme perdita di tempo su scala globale che avrebbe poi preso il nome di Web 2.0. Notizia di oggi e’ che anche l’MI6 britannico ha deciso di appoggiarsi a Facebook per il reclutamento di nuovo personale.

MI6 wallpaper

Cambiando argomento e passando alla tecnologia piu’ in generale, segnalo due begli aggeggi presentati in questi giorni. Innanzitutto il kit vivavoce “totale” per auto, proposto da Parrot. Entrate in macchina, infilate il vostro iPod/iPhone da qualche parte, e voila che la vostra macchina diventa un vero e proprio centro multimediale. Tutto all’insegna della praticita’. Poi, una volta arrivati a destinazione, magari in anticipo sull’orario previsto, cosa puo’ esserci di meglio rispetto ad un buon libro per ingannare l’attesa? Bene, se avete un po’ di soldi da spendere (una cifra francamente spropositata rispetto alle funzioni offerte), l’iRex DR1000 e’ decisamente cio’ che fa per voi.

HP e-reader prototype

Chiudo il post con tre articoletti ancor piu’ generalisti. Innanzitutto vi consiglio di leggere questo bel post, che analizza in maniera discretamente dettagliata le prospettive (soprattutto da un punto di vista tecnologico) dell’industria automobilistica. Dalle strade al cielo. Notevole quello che ha combinato quest’uomo, superando la Manica in volo. Infine, giusto per criticare di tanto in tanto pure Apple, l’ultimo allarme che sta circolando sulla rete. I Mac Pro emettono esalazioni pericolose? La risposta la sapremo in futuro. Nel frattempo ho spostato il case del mio di qualche centimetro piu’ lontano da me…

Ubuntu eee

Immagino non vi sarete dimenticati del mio buon vecchio eeePC, vero? Bene, allora sappiate che anche se non ne parlo piu’ da quel pezzo non e’ assolutamente in disuso. Nonostante chi lo stia utilizzando non sia tanto io, quanto piuttosto la mia ragazza.

Nel weekend ho deciso di operare pero’ una scelta drastica. Sul computer intendo, non sulla ragazza. Via Windows, che dopo un po’ tende a diventare semplicemente inusabile, specie su un dispositivo con grossi problemi di spazio su disco (tanto per dare un’idea, non si riuscivano piu’ a vedere i video su YouTube senza interruzioni e manco era piu’ possibile fare gli aggiornamenti dell’anti-virus… lo spazio libero su Windows, malgrado il ricorso a mille utility ed accorgimenti vari, decresce con il passare del tempo e non puo’ piu’ essere recuperato, vero e proprio mistero della fede) e spazio a Linux. A colpirmi in maniera particolare, tra la selva di distribuzioni ottimizzate per la macchinina di Asus, e’ stata Ubuntu eee 8.04.1.

Prima impressione semplicemente amazing. Un’interfaccia (Netbook Remix) semplice da usare, chiarissima, ma non per questo incompleta. E, sotto il cofano, tutta la potenza di Ubuntu. Ivi compreso l’accesso a tutti i repository tradizionali.

Ubuntu eee 8.04.1 (Netbook remix interface screenshot)

Una sola pecca. Non da poco. Sull’eeePC 701, con l’ultimissima versione di Ubuntu eee, non c’e’ verso di far andare la schedina wireless. Ho provato a trafficare in tutti i modi, sia passando per MadWiFi sia per l’immortale ndisWrapper, ma assolutamente niente da fare. Altra cosa oltremodo fastidiosa e’ l’amministrazione del sistema. Per fare qualsiasi tipo di modifica occorre inserire la password di root. Cosa normalissima, specie su sistemi *NIX, e sulla quale non si puo’ obiettare nulla. Pero’, cazzo, se sto lavorando ininterrottamente sulla GUI, non potresti evitare di chiedermi di inserire la parola chiave per ogni singola modifica che intendo fare? Non potresti ricordarla, anche solo per due/tre minuti o fino a quando, che ne so, scatta la screensaver? Troppo difficile, vero?

Purtroppo questo test andato a male con Ubuntu e’ stata per me l’ennesima dimostrazione della cronica impossibilita’ di Linux di coesistere con l’utente medio. Si continuano a fare passi avanti in termini di usabilita’, ma inizio a pensare che purtroppo sia il core ad essere sbagliato. Tutto bello finche’ non ci sono problemi, ma al primo casino salta tutto il giochino. Ora vedremo che fare con questo eee.

Una bella seratina di poker

Seratina mica male quella di ieri. Una di quelle che ti riconciliano col mondo, non solo quello pokeristico. Grazie agli amici di PIW (e, devo ammetterlo, l’intercessione di Fungo… se non mi avesse detto che lui avrebbe giocato, io probabilmente avrei passato la mano, dato il buy-in più elevato rispetto a quelli cui sono solitamente abituato) mi sono sparato un bel torneo di Hold’Em con 500$ di added al montepremi. E, beh, me lo sono vinto. Giocando bene e con una sola decisiva sculata degna di nota.

CDPoker tournament lobby - PIW 500$ added - 25th September 2008

Ciliegina sulla torta il terzo posto ottenuto in contemporanea nel torneo di HA organizzato da Snowshark. Qui la sculata, e pure pesante, l’hanno tirata a me al final table. Rimasti in 3, con io chip leader (circa 20k contro i 10k di entrambi i miei avversari), spillo J6-o dal BB. Il bottone folda, lo SB raise 3BB ed io chiamo. Flop J64 rainbow. Meraviglioso. Puntata dell’oppo, raise mio, re-raise all-in suo e mio insta-call. Mi scopre AA ed io non faccio neppure in tempo ad esultare (mi era venuto il sospetto di un set, ma mollare la mia doppia coppia sarebbe stato veramente eccessivo…) che al turn cade il terzo asso. Accuso il colpo, spingo pesante, poi cerco contro lo stesso avversario il colpo che ristabilisca la situazione di prima: all-in pre-flop con JQ-s mio contro pocket 6s suoi, terzo 6 come prima carta del flop e tanti saluti.

Sharkpoker circuit - HA Tournament - 25th September 2008

Menzione d’onore, una volta tanto, anche per il buon Fungo, che mette il sigillo su di una settimana per lui notevole, tra un migliaio di euro incassato con le scommesse e circa 600$ in due giorni di poker. Io in compenso mi tolgo lo sfizio di knockarlo personalmente in tutti e due i tornei che stavamo giocando, il che è sempre cosa buona e giusta…

Detto ciò, credo sia giunto il momento di presentarvi una persona. Mio figlio.

Pankaj Sachin Pawar

Ci siete un po’ rimasti, ammettetelo. Beh, allora sappiate che non si tratta di un figlio biologico ma di uno adottivo. Adottivo e a distanza, per essere precisi. Ed è tale a partire da ieri sera. Parte della vincita fatta su CDPoker ho infatti deciso di dedicarla a questa causa, passando attraverso Intervita Onlus. L’idea è piaciuta anche a quelli di PIW, che pare risponderanno organizzando un torneo di beneficenza. Ne sapremo di più in futuro. Stay tuned…

Filosofeggiando di fuzzy logic

Angolo letteratura. Con il post di oggi condivido con voi un bel paragrafetto del volume Fuzzy Logic for Beginners, di Masao Mukaidono, che ho da poco iniziato a leggere. La prima trentina di pagine, ovviamente introduttive, scorrono via molto veloci, nonostante una traduzione in inglese sicuramente passibile di notevoli miglioramenti. Si parla al momento di filosofia e della sua influenza sulla scienza.

Fuzzy Logic t-shirt

Contemporary Rationalism Due to Descartes

It is said that the binary logic that allows “yes” or “no” is due to Alstoteres, an ancient Greek philosopher. Alstoteres recognized the existence of what should be determined not either “yes” or “no”. This means that ambiguity was acknowledged when the study of logic began. But, the main acceptance during the renaissance of symbolic logic, where only “yes” and “no” are assumed, remains up to the present.

There are two kinds of logic. Modal logic is a logic dealing with cases: there is a possibility of true, or there is necessity. This logic also originates with Alstoteres, but it can not be used for contemporary science and technology. Multiple-valued logic is logic where a degree of truth between “yes” and “no” is acknowledged. The multiple-valued logic is being studied frequently these days, but it can not overthrow the established binary logic and remains minor research.

Modern science and technology is definitely based on binary logic that does not allow any ambiguity. Therefore, an exclusion of ambiguity is an absolute and unconditional requirement in modern science and technology. It is agreed that by excluding ambiguity we have established theories and developed applications.

The establishment of modern rationalism has influenced this. Modern science and technology are strongly influenced by Descartes’s theory of modern rationalism. His methodology is analytical, in which any complicated problem can be understood by dividing the problem into several smaller problems until each problem can be clearly understood. After every problem becomes clear, they can be combined to grasp the whole problem. The basic idea is that the whole is understood by the composition of each part. Thus the divided part should be clearly agreed by everybody. An example is the axiom that the sun rises in the east. The combining process also is to be consensus, where objectivity and universality are significant guiding principles. It implies that there is an assumption or a belief that everything has a unique answer which we must discover and clarify.

Is it possible that we can make everything clear? Is there anything that is lost by dividing the problem? If we consider only things that can be clarified by excluding ambiguity in science and technology, we would never handle human subjectivity and feelings that are essentially ambiguous. We would only consider physical issues. Since machines are designed by using theories based on that idea, the consequences applies to machines, too.

Titan the robot

Presenza d’eccezione in universita’, questa mattina. A far visita ai nuovi studenti e’ infatti arrivato nientepopodimeno che Titan the Robot, diabolico robot antropomorfo realizzato dalla Cyberstein Robots Ltd.

Titan the Robot

Non avevo mai sentito parlare in vita mia di questo Titan. Ed invece pare che, almeno in UK, questo stia diventando famosissimo. Vederlo in azione e’ veramente qualcosa di impressionante. Canta, balla, ma soprattutto si muove con una velocita’ ed una agilita’ mai viste. Ovviamente, deformazione professionale vuole che io lo guardassi con occhio clinico. Si muove davvero troppo bene per essere un robot bipede. Eppure, a vederlo da vicino (purtroppo non sono riuscito a vederlo cosi’ da vicino e per un tempo sufficientemente lungo, causa ressa disumana ed esibizione alquanto veloce), viene difficile da pensare come possa esserci qualcuno al suo interno. Le articolazioni delle anche e le strette giunzioni nei pressi delle caviglie (oltre all’altezza del robot stesso, che comunque costituirebbe un problema secondario) rafforzano questa idea. Ma rimane il fatto che si muove bene. Troppo bene rispetto a quello a cui ci hanno abituato a vedere coreani e giapponesi negli ultimi anni. E poi e’ quantomeno sospetto quell’inserto in vetro/plastica trasparente presente sul petto del robot. E se poi pensiamo che questo robot e’ in circolazione, a quanto leggo, dal 2004, il dubbio si amplifica.

Ho scoperto che anche Wikipedia si pone lo stesso problema di cui sto velocemente dibattendo: “It is not clear if Titan is completely robotic or if there is a person inside it, controlling its fluid bipedal locomotion. While Titan’s arms and head are fully robotic with advanced articulation, Cyberstein’s website provides no information confirming or denying whether or not Titan is fully robotic“.

Rimane il fatto che questi della Cyberstein hanno creato un qualcosa di veramente bello da vedere. Che sia scientificamente interessante o meno.

UPDATE: ho appena rivisto il robot. Non vi e’ il minimo dubbio che vi sia qualcuno al suo interno. La prova piu’ schiacciante, oltre al visore sul petto, e’ lo spazio (camuffato da tubo) dove infilare le braccia per il figurante che sta dentro a Titan (coincide alla perfezione se effettivamente la testa sta all’altezza del visore). Bisogna comunque ammettere che si tratta di un gran bel giocattolino.

Irrlicht: un po’ di chiarezza (parte prima)…

Non riesco a capire bene il perche’, ma pare che nell’allegro mondo del 3D sia impossibile trovare qualcuno in grado di scrivere della documentazione (manuali, tutorial, quel che volete) sensata, completa e facile da seguire per chi, come il sottoscritto, dell’argomento e’ un completo novizio. Essendo alla prese con Irrlicht (tra l’altro, proprio in questi giorni e’ stata pubblicata la versione 1.4.2 per Windows), in questo post ho quindi deciso di rivisitare il tutorial ufficiale numero 1, cercando di colmare, o perlomeno di riempire parzialmente, le varie lacune in esso presenti.

Irrlicht example

La funzione piu’ importante dell’intero engine e’ irr::createDevice(). Questa funzione provvede a creare un oggetto appartenente alla classe irr::IrrlichtDevice, ricevendo in input sette parametri che sono (copio dalla guida):

  • deviceType: type of the device. This can currently be video::EDT_NULL, video::EDT_SOFTWARE, video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D8, video::EDT_DIRECT3D9 and video::EDT_OPENGL.
  • windowSize: size of the window or the video mode in fullscreen mode.
  • bits: bits per pixel in fullscreen mode. Ignored if windowed mode.
  • fullscreen: should be set to true if the device should run in fullscreen. Otherwise the device runs in windowed mode.
  • stencilbuffer: specifies if the stencil buffer should be enabled. Set this to true, if you want the engine be able to draw stencil buffer shadows. Note that not all devices are able to use the stencil buffer. If they don’t no shadows will be drawn.
  • vsync: specifies vertical syncronisation: If set to true, the driver will wait for the vertical retrace period, otherwise not.
  • receiver: a user created event receiver.
  • sdk_version_do_not_use: don’t use or change this parameter. Always set it to IRRLICHT_SDK_VERSION, which is done by default. This is needed for sdk version checks.

Un esempio di utilizzo di questa funzione e’ il seguente:

irr::IrrlichtDevice *device = createDevice( video::EDT_OPENGL, dimension2d< s32 >(1024, 768), 16, false, false, false, 0);

il quale va a creare una irr::IrrlichtDevice usando OpenGL e tracciando al tempo stesso una finestra avente dimensioni 1024×768, 16 bit di profondita’ del colore, con stencilbuffer e vsync disabiliti.

E’ prassi abbastanza diffusa, una volta creata una irr::IrllichtDevice, definire alcuni puntatori che consentano di accedere ad alcune delle sue proprieta’ in maniera rapida e semplice. I puntatori possono essere creati (e “fatti puntare”) nel modo che segue:

irr::video::IVideoDriver* driver =device->getVideoDriver();
irr::scene::ISceneManager* smgr = device->getSceneManager();
irr::gui::IGUIEnvironment* guienv = device->getGUIEnvironment();

Nel dettaglio, abbiamo innanzitutto che irr::video::IVideoDriver e’ l’interfaccia al driver che si occupa di mettere in atto le funzioni 2D e 3D. Tutte le operazioni di rendering e di texture manipulation potrebbero, in linea di principio, essere fatte utilizzando soltanto questa classe. irr::scene::ISceneManager si occupa invece di gestire nodi delle scene, mesh, camere e “all the other stuff”. Citando questa volta dalla documentazione delle API, il discorso continua in questo modo: “All Scene nodes can be created only here. There is a always growing list of scene nodes for lots of purposes: Indoor rendering scene nodes like the Octree (addOctTreeSceneNode()) or the terrain renderer (addTerrainSceneNode()), different Camera scene nodes (addCameraSceneNode(), addCameraSceneNodeMaya()), scene nodes for Light (addLightSceneNode()), Billboards (addBillboardSceneNode()) and so on. A scene node is a node in the hierachical scene graph. Every scene node may have children, which are other scene nodes. Children move relative the their parents position. If the parent of a node is not visible, its children won’t be visible, too. In this way, it is for example easily possible to attach a light to a moving car or to place a walking character on a moving platform on a moving ship. The SceneManager is also able to load 3d mesh files of different formats. Take a look at getMesh() to find out what formats are supported. And if these formats are not enough use addExternalMeshLoader() to add new formats to the engine.“. Infine abbiamo irr::gui::IGUIEnvironment, utilizzato come creatore/gestore di tutti gli elementi della GUI che vogliamo utilizzare.

Detto questo, ora, almeno per me, sorge un problema. Che stracazzo e’ uno SceneNode? Documentandomi un po’ ho trovato una definizione che puo’ essere sintetizzata nel seguente modo: “ogni oggetto o entita’ grafica a se’ stante presente all’interno della scena e’ un nodo della scena”. In Irrlicht, per come e’ stato implementato, un nodo generico contiene al suo interno una lista di materiali (una mesh e’ in generale composta da diversi materiali e ad ogni materiale sono associate una o piu’ textures), una bounding box (utile per usufruire delle funzioni di collision detection) e soprattutto un puntatore ad una mesh. Un nodo di scena, in Irrlicht, puo’ essere creato avendo come padre un altro nodo. In questo modo, le operazioni effettuate sul padre (spostamento, scaling, ecc…) si rifletteranno immediatamente anche sui/l figli/o. A questo punto diventa un po’ piu’ chiaro anche il ruolo dello irr::scene::ISceneManager, il quale si occupa di gestire tutto cio’ che riguarda i suoi nodi (i nodi, in fase di creazione, vengono infatti aggiunti allo scene manager), ovvero ne puo’ aggiungere/rimuovere, puo’ gestirne la visualizzazione, associarvi mesh, ecc… Non ho ancora ben capito come funzioni il meccanismo, ma tenete presente che SceneNodes possono essere scaricati facilmente da Internet; si veda ad esempio questo link.

In chiusura di questo post semi-interlocutorio approfitto per linkare Giovanni Santostefano, il quale ha scritto alcuni tutorial su Irrlicht, in italiano, che potete trovare a questo link. Il primo di questi risulta interessante in particolare per la descrizione che viene fatta della funzione irr::createDeviceEx(), la quale permette di specificare parametri aggiuntivi rispetto alla irr::createDevice() discussa qui sopra, quali l’antialiasing (on/off) e l’ID di una eventuale finestra gia’ esistente alla quale collegare il device che si sta creando. Gli altri meritano comunque una lettura e per me e’ doveroso segnalarli perche’ sono quelli che hanno iniziato ad aprirmi leggermente gli occhi sul significato dei nodi di scena.

Nota a pie’ di pagina. Stasera si sperimenta Ubuntu eee. Vedremo come andra’ a finire. Quel povero eeePC, di Windows XP proprio non ne vuole piu’ sapere…

Circuito corticale e circuito limbico

Nel post odierno vi propongo un po’ di riflessioni che ho elaborato oggi pomeriggio, a ruota libera, riguardo alla ricerca che è iniziata con la mia Tesi e che sto ancora portando avanti in contatto con Roma. I risultati delle ultime simulazioni non sono stati particolarmente incoraggianti, così ho provato a staccarmi un attimo dalla visione che stavamo seguendo, per provare a reimpostare in maniera diversa il problema. Qui di seguito trovate il frutto delle mie elucubrazioni.

NeuroArt

Uno dei punti piu’ importanti che vogliamo andare a toccare con le nostre simulazioni e’ il riuscire a riprodurre la struttura dualistica presente nel sistema nervoso umano. Da un lato abbiamo infatti il cosiddetto circuito corticale, capace di elaborazioni “sofisticate” e precise, le quali possono prendere in considerazione una mole notevole di dati in input (percezioni sensoriali in primis). Dall’altro lato abbiamo invece il circuito sottocorticale (o limbico), deputato ad elaborazioni piu’ semplici e dai risultati meno accurati, ma in grado di operare ad una velocita’ maggiore rispetto al circuito corticale. Il problema principale che dobbiamo affrontare e’ come riuscire a riprodurre questa distinzione utilizzando reti neurali, le quali per loro natura non contemplano una dimensione temporale.

Immaginiamo una situazione sperimentale come quella sulla quale abbiamo gia’ lavorato. Siamo in presenza di un mondo discreto, non toroidale, costituito da una griglia di 15×15 celle. All’inizio di ciascuna epoca (ognuna delle quali avente durata 100 passi), un certo ammontare di unita’ di cibo viene disposto nelle varie celle secondo una funzione di probabilita’ (p: 15% per cella). Allo stesso modo, nell’ambiente vengono distribuite alcune “trappole” (p: 2%): si tratta di celle che, nel caso in cui l’organismo vi capiti sopra, ne bloccano il movimento per un certo numero di passi. Una volta durante ciascuna epoca, un predatore fa la sua comparsa all’interno dell’ambiente. Esso vive per un certo numero di step ed il suo compito e’ quello di dare la caccia all’organismo. Nel momento in cui ha luogo una cattura (organismo e predatore si trovano a stazionare sulla medesima cella), l’epoca si conclude. Ogni organismo viene testato per 25 epoche ed un algoritmo genetico provvede a far evolvere il comportamento desiderato. Scopo dell’organismo e’ quello di raccogliere quanto piu’ cibo possibile, minimizzando al tempo stesso il numero di catture subite dal predatore.

In linea di principio, l’organismo e’ in grado di percepire qualsiasi informazione presente nell’ambiente: la posizione della piu’ vicina unita’ di cibo (angolo/distanza), la posizione del predatore (quando presente, angolo/distanza), la posizione della trappola piu’ vicina (angolo/distanza), la distanza che lo separa dal bordo dell’ambiente lungo la direzione nella quale e’ orientato. Utilizzo la dicitura “in linea di principio” in quanto l’organismo e’ dotato di una tripla rete neurale: una che rappresenta il suo circuito corticale, una quello sottocorticale ed un’altra che opera come uno switch in grado di determinare quale dei due circuiti (mutuamente esclusivi) utilizzare in un dato momento. Per simulare la differenza nella velocita’ di elaborazione tra circuito corticale e sotto-corticale, e’ possibile impostare le unita’ appartenenti al primo per attivarsi con un certo ritardo. Ad esempio, quello che l’organismo percepisce al tempo t viene immagazzinato in un buffer di memoria che non influenza l’output motorio corrente, il quale e’ invece determinato da quanto percepito al tempo t-1 (in questo caso abbiamo un “ritardo singolo”, che e’ tuttavia possibile estendere). La topologia ricorda le reti di Elmann, ma in questo caso le informazioni contenute nel buffer (quello che Elmann definisce context units) vengono copiate direttamente nell’hidden layer senza essere modificate dai pesi delle connessioni sinaptiche (in questo caso assenti). In tal modo, il circuito sottocorticale (che altrimenti rischierebbe di non venire mai utilizzato) si trova ad avere un vantaggio rispetto a quello corticale, in quanto permette una risposta piu’ pronta (in real time, senza alcun ritardo) di fronte alla stimolazione sensoriale.

Le reti che implementano questi due circuiti, corticale e sotto-corticale sono rispettivamente rappresentate dalle figure che seguono:

New predator simulations - cortical circuit

New predator simulations - subcortical circuit

Come si puo’ vedere, il circuito corticale ha un hidden layer composto da 9 unita’ (continue) ed elabora l’intera percezione sensoriale dell’organismo generando il comportamento motorio di risposta piu’ appropriato . Il circuito sottocorticale, al contrario, e’ molto meno sofisticato. L’input e’ costituito da un solo neurone, il quale veicola l’informazione relativa all’angolo organismo/predatore e da cui partono due connessioni sinaptiche che vanno a determinare direttamente l’output motorio dell’organismo senza ulteriori mediazioni.

L’organismo, dunque, necessita di utilizzare il circuito corticale quando si trova in una situazione “tranquilla” (non vi e’ il predatore e l’unico obiettivo e’ quello di raccogliere quanto piu’ cibo possibile, evitando le trappole). Al contrario, in una situazione di pericolo (predatore presente), per fuggire in maniera piu’ efficiente l’organismo puo’ trarre vantaggio dall’utilizzo del circuito sotto-corticale, piu’ semplice, veloce e specializzato. Cosi’ come accade nella realta’, affidarsi al circuito sotto-corticale significa ignorare gran parte dell’input sensoriale (in questo caso, al contrario di quanto facevamo nelle simulazioni precedenti, siamo noi a forzare il filtraggio), come ad esempio i confini dell’ambiente o la presenza di trappole, generando dunque un trade-off tra accuratezza e velocita’ di risposta. L’inserimento delle trappole in questa simulazione serve proprio a far si’ che questo trade-off venga adeguatamente rappresentato. In assenza di trappole, sarebbe praticamente scontato che l’organismo utilizzasse il circuito sotto-corticale in presenza del predatore e quello corticale in sua assenza. Con le trappole nell’ambiente, questo non e’ piu’ cosi’ ovvio.

New predator simulations - neural switch

Lo switch e’ rappresentato nella figura qui sopra. Anch’esso evolve insieme alle altre due reti. L’idea di fondo e’ che esso riceva l’intera percezione sensoriale disponibile e sulla base delle sue caratteristiche decida quale circuito attivare per elaborarla.

Where’s my robot?

Leggevo oggi pomeriggio un articoletto piuttosto simpatico, pubblicato sul numero di Focus (edizione inglese) di questo mese, dal titolo Where’s my robot?. Il pezzo andava ad analizzare, come più o meno ciclicamente avviene, quelle che erano le grandi promesse dell’Intelligenza Artificiale e qual è oggi il loro stato di realizzazione. Con risultati ovviamente deludenti. Ma, ad onor del vero, l’articolo di cui sto parlando (ed è il motivo per cui mi è rimasto abbastanza positivamente in mente), non è critico, ma sembra bensì ottimista guardando al futuro.

Nei prossimi giorni conto di scannerizzare le pagine incriminate di Focus e di pubblicarle qui sul blog. Nel frattempo accontentatevi di questa immagine. Una t-shirt in vendita a questo link, decisamente in tema. La didascalia, che non si vede benissimo, recita: “It’s 21st Century and where’s my damn robot?“.

Where’s my robot? t-shirt

Letture a parte, sempre nel pomeriggio mi sono rivisto per caso una puntata di Che tempo che fa. Per la precisione si trattava dell’ultima puntata della scorsa stagione, datata 25 maggio. Ospiti in studio un brillantissimo Piero Angela (che vedo per la prima volta al di fuori dei suoi classici documentari/trasmissioni e che mi ha più che positivamente colpito) ed un meraviglioso Andrea Camilleri. Ripropongo qui di seguito la parte di intervista fatta allo scrittore siciliano, tratta da YouTube. L’intera puntata è invece disponibile, al solito, su RaiClick.it.

In chiusura, piccola parentesi poker. Nel weekend ho un attimo messo da parte FTP per sperimentare un po’ una nuova formula di torneo proposta da PacificPoker (e dal network 888 in genere), denominata Double or Nothing. Si tratta di S&G a tavolo singolo, da 8 o 10 partecipanti, dove metà dei partecipanti non vince nulla, mentre l’altra metà incassa il doppio del buy-in (ovviamente al netto del rake). Quattro S&G giocati: uno da 2.5$, due da 5$ ed uno da 10$, tutti e quattro vinti (con un solo brivido in uno di quelli da 5$, dove ero rimasto cortissimo insieme ad un altro oppo, che con due vaccate colossali ha poi ben deciso di autoeliminarsi). Decisamente un discorso da approfondire. Sarebbe bello avere un po’ di ore da dedicarvici ogni santo giorno.

Pagina Successiva »