Battleship AI coding-competition: date e regole del gioco



La coding-competition comincerá il 20 settembre con la pubblicazione del codice del framework che contiene l'interfaccia che ogni algoritmo di Battleship iscritto alla competizione dovrá implementare.

La competizione sará in 2 tornate:
1^ tornata, consegna del codice entro il 10 Ottobre
2^ tornata, consegna del codice entro il 31 Ottobre








Regole del gioco Battleship:
  1. Si gioca su una griglia 10x10.
  2. Ogni giocatore dispone sulla griglia 5 navi di lunghezza: 2, 3, 3, 4 e 5.
  3. La navi possono essere adiacenti ma non sovrapporsi.
  4. Ogni giocatore a turno spara un singolo colpo sulla griglia del suo avversario.
  5. L'avversario notifica se il colpo é andato a vuoto, se ha colpito una nave o se ha colpito e affondato una nave
    In questo ultimo caso dirá anche quale nave ha affondato e dove era posizionata.
  6. Il gioco si conclude quando tutte le navi di un giocatore vengono affondate, il giocatore avversario é dichiarato vincitore.


Regole della competizione:
  1. Lo spirito della competizione é quello di produrre il miglior algoritmo (di attacco e di difesa) per il gioco Battleship.
  2. Ogni azione che va contro lo spirito della competizione verrá valutata e potrá portare alla eliminazione.
  3. Imparare e implementare idee altrui é ok, copiare codice altrui va contro lo spirito della competizione.
  4. Giocare slealmente e interferire sul gioco del avversario va contro lo spirito della competizione.
  5. Un tempo compessivo di 4 secondi é a disposizione ad ogni giocatore per ogni singola partita.
  6. L'uso di multi-threading non é concesso.
  7. Lo sfondamento dei 4 secondi determinerá la sconfitta nella partita corrente.
  8. Qualsiasi eccezzione sollevata e non gestita determinerá la sconfitta nella partita corrente.
  9. Il codice insieme alla descrizione delle idee e strategie implementate dovrá essere inviato entro e non oltre le date indicate contattandomi attraverso i contacts di questo blog e inviandomi poi per e-mail il codice o il link da dove scaricarlo.
  10. La dimensione massima per il codice é di 1MB.
  11. Il solo requisito tecnico é l'uso del framework .Net 2.0 / 3.5
  12. L'algoritmo (di attacco e di difesa) proposto dovrá implementare l'interfaccia IBattleshipOpponent definita nel codice fornito.


Punteggio:

  1. Ogni partecipante si scontrerá con ogni altro partecipante al meglio di 501 partite su 1000
  2. La prima metá dei partecipanti con i risultati migliori parteciperá alla prima o alla seconda tornata parteciperá a un torneo a eliminazione diretta per determinare il vincitore
  3. I risultati insieme all codice e le idee e strategie implementate saranno postati su questo blog.

Edit 19-Set: riguardo il punto 11, in pratica sono accettate soluzioni in VS2008 (C# 2.0/3.0). Soluzioni in VS2010 (C# 4.0, .NET 4.0) saranno accette solo se tutti i partecipanti hanno VS2010.
 
Tags :   |

Print | posted @ giovedì 2 settembre 2010 16.56

Comments on this entry:

Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by marco at 02/09/2010 17.28

scusa per la domanda stupida ma l'unica strategia che mi viene in mente è fare tiri random il più possibile distribuiti, mi potresti fare l'esempio di qualche possibile strategia? mi sa che non ho molto capito o non son tagliato per fare l'ammiraglio
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 02/09/2010 18.23

é sicuramente una strategia sensata per cercare di colpire una nave. poi c'é quella per affondarla e quella per posizionare le proprie navi.
la domanda davvero curiosa é quali possono essere le strategie e le implementazioni piu efficaci e come scovarle. questo si scopre provando. ed é qui che sta lo spasso :)
l'idea di fare due tornate é proprio quello di vedere la propria implementazione all'opera e confrontarla con le altre per poi provare a migliorarla ancora
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by LudovicoVan at 02/09/2010 18.57

> 11.Il solo requisito tecnico é l'uso del framework .Net 2.0 / 3.5.

Proporrei di consentire anche l'uso del fwk 4, a meno che non ci siano particolari motivi per escluderlo.

-LV
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 03/09/2010 18.54

qualora tutti i partecipanti mi comunicano di avere VS2010 e frwk 4.0 si puo fare

perché giá il codice della 1^ tornata sará reso disponibile a tutti per poter provare il proprio algoritmo contro gli avversari e quindi tutti devono poterlo compilare e lanciare
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Andrea Angella at 05/09/2010 13.02

Ciao Luca, penso proprio che sara' divertente. Io ci sono e ho VS2010 + Framework 4.
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Del Tongo at 20/09/2010 11.06

Ciao Luka, bella iniziativa!!! l'ho scoperta solo adesso :)
Ho scaricato la solution e mi sembre dalla logica con cui validi il piazzamento delle navi, che le coordinate (x,y) debbano essere nel range 0<=x<=9 e 0<=y<=9 e non in quello 1<=x<=10 e 1<=y<=10. Assunzione corretta, giusto?
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 20/09/2010 13.08

Grazie!

E' corretto, le coordinate (x,y) della scacchiera di gioco vanno da 0 a 9.
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by LudovicoVan at 20/09/2010 18.08

La butto li':

Esiste qualche opzione per mantenere lo stato fra un match e l'altro?

Ho visto che la IBattleShip.NewMatch prende il nome dell'opponent come parametro, il che offre spunti interessante...

Se, ad esempio, la IBattleShip.NewMatch prendesse un array di byte e la IBattleShip.MatchOver lo restituisse...

A quel punto pero', insieme al report sui risultati della competizione, sarebbe utile anche avere sotto forma di file lo stato finale del buffer del proprio opponent.

-LV
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by LudovicoVan at 20/09/2010 18.17

P.S. Suppongo che potrebbe essere anche un array di caratteri, in modo da semplificare ulteriormente la serializzazione/deserializzazione. Comunque e' la cosa piu' semplice che mi viene in mente.

-LV
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 20/09/2010 19.11

E' possibile e permesso conservare lo stato in memoria durante tutte le 1000 partite che si giocano contro un avversario.
Infatti tra la chiamata iniziale del NewMatch() e quella finale del MatchOver() tutte le 1000 partite vengono giocate consecutivamente con lo stesso avversario usando la medesima istanza della implementazione di IBattleshipOpponent che ogni partecipante fornisce.

L'accesso alla rete e al disco sono possibili. Ogniuno puo salvare il proprio stato su disco al MatchOver() e ricaricarlo al
NewMatch(). Vista la restrizione sui tempi di elaborazione (4 secondi totali per ogni singola partita, superati i quali si perde la partita) tuttavia l'accesso al disco o alla rete puo risultare proibitivo.
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by LudovicoVan at 20/09/2010 19.40

> L'accesso alla rete e al disco sono possibili

Perfetto, grazie. Avresti da indicare uno specifico path sotto cui salvare il file?

> Vista la restrizione sui tempi di elaborazione

OK, per quanto se ho capito bene quella restrizione si applica al livello di game, per cui non sarebbe un problema...

-LV
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by LudovicoVan at 20/09/2010 20.14

Scusa, mi sono anche reso conto che occorrerebbe sapere se il proprio giocatore sta giocando per primo o per secondo nel game. C'e' modo di avere quella informazione?

-LV
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by LudovicoVan at 20/09/2010 20.31

OK, perdona, forse cambia poco avere quella informazione...

-LV
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 20/09/2010 21.27

per il file, la dir corrente della applicazione é ok, se ci fosse collizione sui nomi la risolvo io.

i metodi NewMatch() e MatchOver() servono piu che altro per chi in fase di sviluppo vuole loggare qualche info per poi analizzarla. per questo non c'é timer. per la competizione bisogna usare i metodi sotto timer.
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Del Tongo at 21/09/2010 2.00

Ciao Luka, ci sono alcuni chiarimenti in merito al codice che andrebbero fatti:
1) Sbaglio o un errato piazzamento delle navi nn comporta la perdita della partita? Mi sembrerebbe corretto che se il piazzamento delle navi nn fosse corretto l'avversario avesse partita vinta a tavolino.
2) Chi ha scritto il codice delle varie classi? IMVHO te che sei un agile developer non arriveresti mai a scrivere della logica piena di break e continue ^__^

Domani quasi quasi mi metto sotto con il divertimento!!!
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 21/09/2010 10.11

In effetti il framework per la competizione non l'ho scritto io. L'ho solo rifattorizzato un minimo x renderlo un pochinio piu leggibile.

Qualora ci siano conflitti il PlaceShip viene richiamato nuovamente e il tempo di 4sec disponibile viene consumato. Lo scopo é permettere algoritmi semplici anche random. L'ho preciso nella descrizione. Grazie del feedback.

> Domani quasi quasi mi metto sotto con il divertimento!!!

Allora credo che il conto dei pirati é giá a 3 :)
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Tonino at 24/09/2010 3.12

Lo sto facendo con il framework 4.0, anche se (credo) sara' compatibile con il 3.5

ciao.
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 24/09/2010 10.49

Ok. FYI per ora tutti tra chi sta giocando ha dichiarato il 4.0/vs2010.
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Fabio at 06/10/2010 22.54

Ciao Luca,
sono venuto a sapere di questa sfida tramite un collega che mi ha "stuzzicato" ...
Ho avuto modo di dare un'occhiata al codice e, pur non essendo un'appasionato di battaglia navale "cartacea", vorrei provare lo stesso a buttare qualche linea di programmazione (ti avviso che sono della vecchia guardia e ancora faccio difficoltà ad usare linq e diavolerie del genere ;-), sono ancora affezionato ai cicli for :D), spero solo di riuscire a trovare un po' di tempo per poterti mandare il codice per domenica... A tal proposito il codice da mandarti riguarda soltanto la classe che implementa IBattleshipOpponent, suppongo; faccio in tempo a madartela Domenica pomeriggio/sera?
Un'ultima domanda, ho visto che le dimensioni della griglia ed il tempo massimo, vengono passati ad ogni partita anzichè all'inizio della sfida; ma c'è la possibilità che le dimensioni della griglia cambino durante la sfida tra due partecipanti?
Ciao e grazie.
Fabio
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 07/10/2010 0.39

@Fabio

anche io sono della vecchia guardia :D

ti confermo che il codice da mandare riguarda solo l'implementazione di IBattleshipOpponent.


é importante consegnare una implementazione il 10 cosi c'éla possibilitá di partecipare alla seconda tornata che da altri 20 giorni per migliorare il proprio codice
  
Gravatar # re: Battleship AI coding-competition: date e regole del gioco
by Luca Minudel at 07/10/2010 0.50

P.S. tempo e griglia sono costanti
  

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 6 and 3 and type the answer here: