MokaByte 83 - Marzo 2004 
Robocode
III parte: La storia di Robocode
di
Simone Chiaretta
In questi mesi abbiamo visto come è fatto un robot, come si muove, e come realizzarne uno abbastanza avanzato, ma siamo ben lungi dall'aver realizzato un robot all'altezza delle attuali competizioni. Prima di analizzare le tecniche avanzate usate negli attuali robot, ci prendiamo una pausa dalla scrittura di codice, e vediamo la storia di Robocode.

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.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it