Intelligenza Artificiale.Darwinbot1


Come (spero!) avrete visto nelle sezioni dedicate a Kinchi e' tutto molto interessante, ma manca qualcosa. Una testa "pensante"! In effetti tutto quello che i robot che conosco fanno e' seguire un programma, quando sembrano intelligenti e' perche' il programma e' piu' sofisticato e pieno di IF - THEN, ovvero "se sbatto di muso allora torna indietro, ruota e scappa". Piu' complesso vuol dire "...ruota a destra, ma se gia' prima avevo ruotato a destra ed ho sbattuto allora ruota a sinistra del doppio e vai..." In effetti questa strada e' quella che porta immediatamente risultati visibili perche' insegnamo al robot a "ragionare" come facciamo noi, e quando troviamo problemi gli diciamo come comportarsi.
Il cervello di Kimchi dovra' pero' essere piu' adattivo e per farlo ho scelto la via piu' adattiva: Darwin. Il progetto ha ben poche probabilita' di funzionare (ma chi se ne frega, e' un hobby!), tuttavia i primi risultati sono incoraggianti.
In questa pagina espongo la prima versione di DarwinBot: PRJ01
Il programma, scaricabile qui', permette di vedere come si puo' evolvere il robot. Il source code e' questo.

Fermandosi su alcuni comandi o funzioni si puo' vedere una breve descrizione. Il principio di funzionamento e' semplice: Sensori - Neuroni artificiali - Motori. Il programma controlla dove e' il robot, se e' sopra al cibo eccitero' il sensore di cibo (il primo), se e' contro un muro eccitero' il sensore opportuno con questo schema:
S00=N00=sensore di cibo
S01=N01=sensore di tatto dx
S02=N01=sensore di tatto sx
S03=N01=sensore di tatto su
S04=N01=sensore di tatto giu
S05=N02=sensore di fame
Il sensore di fame si attiva quando l'energia scende sotto la soglia stabilita nella tabella Impostazioni. Analizziamo un neurone artificiale:
N06001T
N=neurone normale (in seguito ho poi fatto neuroni tipo incrementali....
06=punta al neurone numero 6 (partendo da 0), cioe' e' un assone. I dendridi sono gli assoni dei neuroni dai quali ricevo i segnali.
01=intensita' del segnale, da 0 a 99, con soglia di attivazione 50.
T=True, cioe' positivo, se fosse F detrarrebbe dal neurone al quale punta una carica energetica pari a 01.
Gli ultimi 4 neuroni del genoma (che trovate nella directory creata e denominato Best10.gen) Puntano ai motori. I motori muovono in alto-basso-dx-sx. Un genoma e' dunque composto dai neuroni sensori, ausiliari e motori:
N06001T N06001T N06001T08042F N06001T N06001T N06001T N98060T N97060T N96060T N95060T
Il terzo neurone (neurone 02) ha 2 assoni, il secondo punta all'ottavo con un valore di 42 in negativo. L'algoritmo e' il seguente:
'For i = 0 To Nneu
' If Neur(i) > soglia And NeurPre(i) <= soglia Then 'se si e' attivato e e' cambiato
' For q = 0 To AssN(i) - 1
' If AssB(i, q) Then 'se e' positivo
' Neur(AssT(i, q)) = Neur(AssT(i, q)) + AssV(i, q)
' If Neur(AssT(i, q)) > 100 Then Neur(AssT(i, q)) = 100
' Else
' Neur(AssT(i, q)) = Neur(AssT(i, q)) - AssV(i, q)
' If Neur(AssT(i, q)) < 0 Then Neur(AssT(i, q)) = 0
' End If
' Next
' ElseIf Neur(i) <= soglia And NeurPre(i) > soglia Then 'se si e' disattivato e e' cambiato
' For q = 0 To AssN(i) - 1
' If AssB(i, q) Then 'se e' positivo
' Neur(AssT(i, q)) = Neur(AssT(i, q)) - AssV(i, q)
' If Neur(AssT(i, q)) < 0 Then Neur(AssT(i, q)) = 0
' Else
' Neur(AssT(i, q)) = Neur(AssT(i, q)) + AssV(i, q)
' If Neur(AssT(i, q)) > 100 Then Neur(AssT(i, q)) = 100
' End If
' Next
' End If
'Next
Neur(i) contiene la carica elettrica del neurone i, NeurPre(i) e' lo stato del neurone nel ciclo precedente.

Dopo una decina di generazioni potrete vedere che il robot iniziera' a muoversi...
Infatti solo i migliori 10 di ogni generazione si moltiplicheranno, con variazioni casuali, creando 10 copie modificate per un totale di 100. Nella directory del programma troverete anche altri file .gen che, se rinominerete Best10.gen potrete vedere cosa vi aspetta nel far calcolare il computer per delle nottate!
Nelle versioni successive ho inserito ostacoli e, sopratutto, la vista!
Purtroppo riesco a fare questi lavori solo durante le ferie, quindi inseriro' cio' che ho fatto nell'agosto 2003, ma per andare oltre, se ne riparla a natale! hehe :-)

Buon Divertimento!
Dato che e' stato compilato-impacchettato di fretta fatemi sapere se vi manca qualche dll o file.
Se vi "nasce" un super robot mandatemi il file Best10.gen che ve lo pubblico!