NOTA: questa sfida è attualmente morta, poiché non riesco a installare le lingue necessarie per eseguire una partita. Se qualcun altro ha il tempo e l'interesse per farlo, non sono contrario.
Vedi il fondo del post per una classifica.
Questa è una sfida semi cooperativa del re della collina, in cui i robot costruiscono percorsi attraverso un grafico a griglia bidimensionale. Il bot che controlla i nodi con più traffico è il vincitore. Tuttavia, sono necessarie più risorse di un bot per creare effettivamente un percorso di connessione, quindi i robot dovranno lavorare insieme - in una certa misura.
gameplay
Di seguito, N > 0
sia il numero di robot in gioco.
La griglia
Il gioco si gioca su una griglia intera bidimensionale di dimensioni , la cui coordinata in basso a sinistra è a . Ciascuna coordinata con ha archi uscenti alle tre coordinate , e sopra di esso, dove i -coordinates sono presi modulo . Ciò significa che la griglia si avvolge ai bordi est e ovest. Ogni coordinata inferiore è una sorgente e ogni coordinata superiore è un sink .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
L'immagine seguente mostra una 8 × 8
griglia.
Ogni vertice del grafico è inattivo , attivo o interrotto . Tutti i vertici iniziano inattivi e possono essere attivati dai robot, che saranno quindi i loro proprietari. Inoltre, i robot possono rompere i vertici e non possono essere riparati.
Ordine di svolta
Una svolta consiste in una fase di distruzione e una fase di attivazione . Nella fase di distruzione, ogni bot può rompere un vertice inattivo. Quel vertice è rotto da allora in poi e non può essere attivato da nessuno. Nella fase di attivazione, ciascun bot può attivare un vertice inattivo. Da quel momento in poi, possiedono quel vertice e non può essere riattivato da nessun altro. Più robot possono possedere un singolo vertice, se tutti lo attivano nello stesso turno. In ogni fase, le selezioni dei vertici vengono eseguite contemporaneamente.
punteggio
Un round dura esattamente per turni. Dopo questo, il round viene segnato come segue. Da ciascun vertice della sorgente attiva, eseguiamo volte una ricerca di profondità randomizzata prima sui vertici attivi (nel senso che i figli di ciascun vertice sono visitati in un ordine casuale). Se viene trovato un percorso dalla sorgente a qualche sink, quindi per tutti i vertici lungo quel percorso, ogni proprietario del vertice ottiene un punto.N2
N
L'intero gioco dura 100 round e il bot con il maggior numero di punti è il vincitore. Potrei aumentare questo numero, se la varianza dei punteggi è troppo alta.
Regole aggiuntive
- Nessun pasticcio con il controller o altri invii.
- Al massimo un invio per concorrente.
- Nessuna risorsa esterna, tranne un file di testo privato, è stata ripulita all'inizio del gioco.
- Non progettare il tuo bot per battere o supportare avversari specifici.
- Fornisci comandi per compilare ed eseguire il tuo bot. Qualsiasi compilatore / interprete disponibile gratuitamente per Debian Linux è accettabile.
Il controller
Il controller è scritto in Python 3 e può essere trovato in GitHub . Vedere il file README per istruzioni dettagliate. Ecco un'API per iniziare:
- I robot vengono avviati all'inizio di ogni round e persistono fino alla fine del round. Comunicano con il controller tramite STDIN e STDOUT, utilizzando messaggi con terminazione di nuova riga.
BEGIN [num-of-bots] [num-of-turns] [side-length]
viene inserito all'inizio.DESTROY [turn]
viene inserito all'inizio di ogni fase di distruzione. Il tuo bot risponderà con oVERTEX x,y
per scegliere un vertice oppureNONE
.BROKEN [turn] [your-choice] [other-choices]
viene inserito alla fine di ogni fase di distruzione. L'ordine degli altri robot viene randomizzato all'inizio di ogni gioco, ma rimane fisso durante esso. Le scelte sono presentate comex,y
oN
.ACTIVATE [turn]
eOWNED [turn] [your-choice] [other-choices]
sono gli equivalenti di quanto sopra per la fase di attivazione e hanno la stessa semantica.SCORE [your-score] [other-scores]
viene inserito alla fine del gioco.- Il tuo bot ha 1 secondo per analizzare i risultati di una fase e scegliere il vertice successivo e 1 secondo per uscire dopo aver dato il punteggio. Metterò alla prova le osservazioni sul mio laptop relativamente vecchio, quindi è meglio lasciare un po 'di margine qui.
Ricordarsi di svuotare il buffer di output. In caso contrario, il controller potrebbe bloccarsi in alcuni ambienti.
Classifica
Aggiornato il 13/03/2015
Peacemaker è attivo e funzionante e anche Funnelweb ha ricevuto un aggiornamento. I punteggi sono aumentati di un ordine di grandezza. Il connettore ha superato il limite di tempo in due giochi.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Il registro completo con grafica ASCII è disponibile nel repository del controller, in graphical_log.txt
.
Alcune osservazioni:
- Il connettore può essere facilmente interrotto rompendo un singolo vertice di fronte. Ho il sospetto che spesso la seccatura lo faccia. Tuttavia, attualmente ha poco senso perché solo Connector può concepibilmente costruire un percorso.
- L'anguria può ottenere un punteggio decente semplicemente trovandosi su un percorso di collegamento (poiché è molto probabile che il DFS utilizzi i suoi vertici).
- A Explorer piace coltivare viti dalle angurie.
- Il Funnelweb aggiornato ottiene punteggi davvero buoni, dal momento che Connector solitamente si aggancia su di esso nella metà inferiore della griglia.
- I giochi stanno diventando piuttosto lunghi, il round medio impiega circa 25 secondi sulla mia macchina.
4/3*N^2
, e anche lì, i robot avevano problemi a formare percorsi validi. Tuttavia, Connector è stato temporaneamente squalificato a causa di un errore e ora che è stato risolto, mi aspetto che i giochi siano più interessanti. Farò un altro lotto stasera.