La
nascita
Robocode nasce dalla mente di un ricercatore del campus
IBM di Cambridge, MA: Mat Nelson.
Il programma viene rilasciato il 27 Luglio 2001 e reso
disponibile al pubblico tramite il "laboratorio
di ricerca" AlphaWorks. Subito dopo, per la precisione
il 10 agosto, viene aperto il primo sito per la scambio
di robot.
A settembre viene "slashdotted" e da quel
momento inizia ad entrare nella vita di molti programmatori
java, per lo più americani.
Le
prime competizioni
Nel giro di pochi mesi nascono altri siti di scambio
file (tra questi il più famoso Robocode Repository)
e iniziano anche le prime competizioni, che danno così
uno stimolo maggiore all'invenzione e allo sviluppo
di concetti innovativi e vincenti.
All'inizio le battaglie sono principalmente melee ed
è con la "Gladiator League" (la competizione
durata più a lungo nella storia di Robocode,
da dicembre 2001 a Settembre 2002) che si vedono per
la prima volte le tecniche di Bullet-Dodging e di AntiGravity:
algoritmi utilizzati tuttora da molti robot.
Nel febbraio 2002 uno studente tedesco, Christian Schnell,
rilascia un software per la gestione di competizioni,
usato anche per il testing dei robot.
IBM nota il successo di questo gioco, che, in meno di
9 mesi, aveva totalizzato oltre 120000 downloads e organizza
la Robocode Rumble: inizia a maggio 2002, e, dopo varie
fasi eliminatorie, termina a fine luglio, con la proiezione
delle finali, su un maxi-schermo al LinuxWorld 2002.
Sfortunatamente poi IBM abbandona questo progetto, e
anche Mat, il suo creatore, viene dirottato su altri
progetti.
Il
dopo-IBM
Nonostante l'abbandono da parte di IBM, la comunità
di programmatori interessati a Robocode era ormai talmente
grande da reggersi da sola: nascono altri siti di competizioni
- tra questi ricordiamo Eternal-Rumble, che è
stato per circa un anno il repository di una classifica
generale di merito - e, a febbraio 2003, un programmatore
svedese, PEZ, mette on-line un sito che subito diventa
il principale punto di riferimento e di aggiornamento
per la comunità di robocoders: RoboWiki, la cui
particolarità è di essere "auto-gestito"
dai visitatori.
La
Wiki-Era
All'interno
di questa fucina di idee viene concepito anche l'unica
competizione al momento in corso: RoboRumble@Home. A
differenza di tutte le competizioni precedenti questa
non è simulata su un server centrale, ma viene
fatta girare sui computer degli utenti tramite un client
sviluppato ad hoc. Come seti@home, il server centrale
serve solo per coordinare le battaglie, raccogliere
i risultati e generare la classifica di merito.
Questo wiki ha inoltre dato una grossa spinta a Robocode
e proprio mentre questo articolo verrà pubblicato,
l'OpenSource Committee di IBM starà valutando
la possibilità di continuare a far evolvere Robocode,
rilasciando il codice e permettendo agli stessi robocoders
di continuare a migliorarlo e aggiornarlo.
L'evoluzione
della specie
Nel prossimo articolo vedremo nel dettaglio alcuni delle
strategie e algoritmi considerati lo stato dell'arte,
ma per introdurvi faccio una storia dell'evoluzione
dei concetti usati nella progettazione di Robocode.
Il primo ad essere sviluppato è stato, quasi
subito dopo il rilascio di Robocode, il Bullet Dodging/Sensing,
cioè come capire quando un avversario spara,
e come muoversi per evitare di essere colpiti: questo
concetto è ancora il più utilizzato, nelle
sue innumerevoli varianti, per i combattimenti 1vs1.
Subito
dopo, è stato applicato per la prima volta la
"Anti-Gravity", tecnica sviluppata principalmente
per i combattimenti di tipo melee, che prende spunto
e il suo nome, dall'applicazione della leggi di gravità:
tutti i pericoli, cioè ogni avversario, i muri
e il centro del campo di battaglia genereranno una forza
repulsiva nei confronti del robot che, sottoposto alla
risultate di queste forze, si muove verso la zona meno
pericolosa.
Nella sua versione più avanzata anche i proiettili
degli avversari (ipotizzati con la tecnica del bullet
sensing) generano delle forze repulsive.
Passano
quasi 9 mesi prima che un'idea innovativa venga sviluppata:
in occasione della Rumble nascono due nuovi concetti
relativi al targeting, il pattern matching e il guessFactor-Statistical
aiming.
Il primo cerca di registrare tutti i movimenti dell'avversario
ed in seguito usa questa base di dati per cercare di
prevedere dove si muoverà; il secondo invece
usa l'approccio opposto, cioè prova a sparare,
e controlla se il proiettile ha colpito l'avversario:
questo metodo è quello più usato attualmente
dai robot in testa alla classifica.
Andando più in dettaglio le statistiche di sparo
non vengono calcolate con i proiettili effettivamente
sparati (ci vorrebbe troppo tempo) ma usando dei virtual
bullet sparati a ventaglio; inoltre non c'è una
statistica unica, ma diversi valori suddivisi in base
a vari range di spostamento, velocità ecc
Da
questo momento in poi non ci sono più state invenzioni
clamorose, ma un continuo miglioramento: prima i virtual
bullet vengono rimpiazzati da "onde" che intercettano
l'avversario (è come sparare infiniti virtual
bullet in tutte le direzioni) poi, per adattarsi ai
vari movimenti di tutti i robot viene sviluppato il
concetto di "virtualGun", cioè una
metodologia di puntamento da usare in base alle statistiche
di successo,
infine, viene sviluppato il movimento di tipo "curveFlattening":
un movimento nato per contrastare il guessFactor aiming,
che ha come scopo quello di rendere ugualmente probabili
tutte le direzioni di spostamento.
Conclusione
Dopo
aver fatto un breve escursus sulla storia di robocode
e sui principali concetti sviluppati, nel prossimo articolo
analizzeremo i primi due concetti nati: bullet dodging
e anti-gravity.
Bibliografia e risorse
[1] http://www.alphaworks.ibm.com/tech/robocode - Sito
ufficiale di Robocode
[2] http://robowiki.dyndns.org/perl/robowiki - Un wiki
su Robocode, il punto di ritrovo attuale di tutti i
robocoders
[3] http://www.robocoderepository.com - Il primo sito
su robocode, e ancora ora repository generale
Simone Chiaretta - Laureato
in Ingegneria Informatica al Politecnico di Milano,
lavora presso una webagency di Milano con ruolo di progettista
software e programmatore su tecnologia .NET. Inoltre
sviluppa applicativi web su piattaforma Tomcat e applicativi
desktop con J2SE.
Da quasi 2 anni partecipa alla comunità di Robocode:
al momento sta realizzando un programma per il tuning
di robot con algoritmi basati su parametri lineari.
|