This is an old revision of the document!


Responsabili Proiect

Regulament Proiect 2018

În acest an vă propunem realizarea unui program care să joace cât mai bine jocul Halite.

Regulile jocului sunt explicate în detaliu aici.

Aveți la dispoziție starter kits, disponibile pentru multe limbaje de programare, aici. Acestea au deja implementată comunicarea cu engine-ul jocului, precum și câteva funcții elementare de navigare/analiză a stării jocului. Funcționalitățile existente sunt descrise aici.

Proiectul va cuprinde 5 etape, după cum este prezentat în continuare. Fiecare etapă presupune dezvoltarea unui bot care va juca Halite din ce în ce mai inteligent, iar ultima etapă reprezintă un concurs la nivel de serie, iar apoi la nivel de an pentru a stabili marele câștigător al proiectului de PA din anul 2018. Fiecare echipă poate să își schimbe complet strategia de joc între etape dacă membrii săi consideră acest lucru oportun.

Reguli de upload: La fiecare etapă (în afară de etapa 0) trebuie încărcată pe cs.curs o arhivă zip cu numele seriei și numele echipei (ex: CANumeEchipa) care să conțina codul sursă, fișier Makefile și fișierul README.

Fișierul Readme va respecta următoarea structură:

  • Instrucțiuni de compilare.
  • Detalii despre structura proiectului.
  • Detalii despre abordarea algoritmică a etapei: ce algoritmi ați folosit, cum i-ați combinat, de ce, complexități, etc.
  • Surse de inspirație
  • Responsabilitatea fiecărui membru al echipei.

Documentația valoreaza 10% din punctajul proiectului.

Fișierul Makefile va contine urmatoarele reguli:

  • build: - creeaza executabilul
  • run: - o singura instructiune care porneste executabilul (de exemplu, “java MyBot”)
  • clean: - elimina executabilul si fisierele obiect/log-urile generate (daca este cazul)

Boții vor fi evaluați pe un sistem Linux/GNU, deci ar fi bine să verificați că aveți un makefile care funcționează corect în Linux, chiar dacă lucrați în Windows sau Mac OS X.

Atenție! Deadline-urile la proiect sunt hard , deci nu se permit întârzieri. Dacă s-a ratat deadline-ul la o etapă, se poate lucra în continuare pentru celelalte etape, dar punctajul se va pierde pentru respectiva etapă.

HaliteWeekly

Pentru a vă încuraja să lucrați din timp, vom organiza săptămânal o competiție între boții voștrii. Mai multe detalii aici.

Etapa 0

Etapa 0 presupune formarea unor echipe de câte 3-4 persoane. Echipele se pot forma între oricare 3-4 studenţi din aceeaşi serie. Se permit echipe cu oameni din serii diferite atat timp cât 3 din 4 membri (sau 2 din 3) sunt din aceeasi serie. Studenții restanțieri pot participa cu colegi de la orice serie.

Fiecare echipă va desemna un membru al acesteia cu rolul de căpitan. Căpitanul va avea, printre altele, sarcina de a trimite în numele echipei sale soluţiile pentru fiecare din etapele rămase. Ceilalţi membri ai echipei nu vor trimite soluţii, decât in cazul in care căpitanul nu poate face acest lucru din motive obiective.

Un obiectiv al acestui proiect este lucrul in echipa. Recomandăm să citiți cu atenție regulile jocului și să vă alegeți fiecare rolul in echipă, rol pe care să îl mentionați în momentul inscrierii. De exemplu, o echipă de 4 studenți poate fi formată dintr-o persoană care să scrie codul, 2 persoane care să faca cercetare (tactici, algoritmi, optimizari) și un tester.

Pentru a ajuta colaborarea în echipă, veți folosi un sistem de versionare a surselor numit git. Mai multe indicații aici.

Pentru înscriere, accesați acest link.

Această etapă va avea 1 săptămână. Punctajul alocat acestei etape este de 0 puncte.

Deadline-ul acestei etape este duminică, 4 martie 2018, ora 23:55.

Etapa 1

Pentru prima etapă veți dezvolta un bot simplu, capabil să evite ciocnirea propriilor nave între ele și să cucerească toate planetele de pe o hartă eficient.

Obiectivele etapei:

  • Să vă obișnuiți cu starter pack-ul si funcționalitățile pe care le pune la dispoziție
  • Să reparați micile bug-uri existente în starter pack (ex: coliziunile dintre propriile nave)

Punctele vor fi acordate, pe următoarele configurații de hărți, în felul următor:

Lungime hartă Înălțime hartă Seed Soft Turn Limit Hard Turn Limit
384 256 3583588908 130 160
384 256 1673031865 105 135
384 256 1773807367 100 130
288 192 1942373999 85 115
288 192 142342898 90 130

Dacă botul cucereste toate planetele de pe hartă intr-un număr de pași mai mic sau egal decât 'Soft Turn Limit' atunci va primi intregul punctaj asociat configurației respective. Pentru un număr de pași intre 'Soft Turn Limit' si 'Hard Turn Limit', va primi un punctaj parțial, în funcție de cât de aproape se află de limita 'Soft'.

Seed-ul este specificat pentru a înlătura orice ambiguitate sau variabilă aleatorie din evaluare, nu pentru a permite hardcodarea de paşi. Orice soluţie care hardcodează paşii pentru a obţine rezultatul dorit nu va primi punctajul pe etapă. Dacă folosiți un generator de numere random in programul vostru, folosiți seedul 42 pentru inițializarea acestuia.

Punctajul va fi calculat in felul urmator:

  • 0.05 pentru documentatie.
  • Punctaj egal pentru fiecare harta (0.09), din care
    • 20% - daca nu aveți ciocniri intre propriile nave
    • 80% - pentru cucerirea fiecarei planete de pe o harta in numarul de ture specificat.

Punctajul pentru evitarea coliziunilor va fi primit doar in cazul in care botul ocupa toate planetele.

Pentru aceasta etapa, botul nu va intalni nici un adversar.

Scriptul pe care il vom folosi pentru evaluare se găsește la adresa: resources.zip

Această etapă va dura 2 săptămâni. Punctajul alocat acestei etape este de 0.5 puncte.

Deadline-ul acestei etape duminică, 18 martie 2018, ora 23:55.

Etapa 2

Pentru a doua etapă, dorim să implementați câteva tactici simple care să coordoneze navele. Pentru a trece aceasta etapă, va trebui să vă gandiți la următoarele lucruri: cum atac? Cum mă apar? Când ar trebui să dochez și când nu ar trebui?

Punctele vor fi acordate, pe următoarele configurații de hărți, în felul următor:

Lungime hartă Înălțime hartă Seed
384 256 20596
384 256 75273
384 256 58900
288 192 93689
288 192 98091
288 192 51378
150 150 42
150 150 1024

La aceasta etapa trebuie sa invingeti un bot simplu 'StarMan' care are urmatoarea abordare: Asociaza fiecare nava proprie cu cel mai apropiat obiectiv valid (e.g. planeta pe care se poate face dock sau inamic).

Pentru punctaj maxim trebuie sa invingeti pe 5 harti din cele 8 mentionate mai sus.

Hint (Defense): Cand nu este o idee buna sa faceti 'dock' pe o planeta apropiata? Aveti in vedere ca o nava care face 'dock' nu se poate apara.

Hint (Offense): Navele botului advers actioneaza independent. Cum va puteti lupta eficient cu o singura nava inamica?

Scriptul pe care il vom folosi pentru evaluare se găsește la adresa: resources.zip

Update: 14.04.2018 - In arhiva cu resurse am adaugat un script create_archive.py. Va recomandam sa il folositi pentru a crea/testa arhiva. Scriptul trebuie rulat din directorul unde se afla repository-ul.

Exemplu folosire:

python ./create_archive.py –etapa 2 –seria CC –makefile Makefile –readme README –files MyBot.java hlt/* –test “java MyBot”

Atentie: Solutiile care nu compileaza nu vor fi punctate.

Această etapă va dura 4 săptămâni. Punctajul alocat acestei etape este de 0.5 puncte.

Deadline-ul acestei etape duminică, 15 aprilie 2018, ora 23:55.

Etapa 3

Etapa 3 va avea ca tinta jocurile cu 4 oponenti. La aceasta etapa veti avea de luptat impotriva StarMan (botul de la etapa 2) si Hunter, un bot care implementeaza o simpla tactica de harass a adversarului. Obiectul vostru este sa va clasati cat mai sus in aceste 8 meciuri.

Punctajul maxim pentru aceasta etapa este obtinut daca media clasarilor voastre este minim 2.

Hint-uri:

  • Hartile de 4p sunt simetrice doar pe jumate. Asta inseamna ca exista posibilitatea sa va aflati intr-o pozitie inferioara fata de cea a oponentilor vostrii. Folositi cele 60 de secunde de la inceptului meciului pentru a balansa acest lucru.
  • Incercati sa va concentrati pe un sigur adversar, nu sa va luptati cu toata harta. Tinteti cont de acest lucru cand alegeti planetele pe care le colonizati.
  • In unele cazuri, sa fugi de o lupta, sa abandonezi o planeta sau sa te ascunzi atunci cand nu mai ai sanse sa castigi te pot ajuta pentru a obtine o pozitie mai buna la final.

Configuratie jocuri:

Lungime hartă Înălțime hartă Seed Bot 1 Bot 2 Bot 3 Bot 4
240 160 1524207778 player StarMan Hunter Hunter
240 160 1819638632 player StarMan Hunter Hunter
240 160 2082471630 player Hunter Hunter Hunter
240 160 2188098588 player Hunter Hunter Hunter
360 240 2248216053 player Hunter Hunter Hunter
360 240 2426580831 StarMan Hunter Hunter player
360 240 2592047464 StarMan player Hunter Hunter
360 240 2854128559 Hunter Hunter player Hunter

Scriptul pe care il vom folosi pentru evaluare se găsește la adresa: resources.zip

Această etapă va dura 4 săptămâni. Punctajul alocat acestei etape este de 0.4 puncte.

Deadline-ul acestei etape este vineri, 18 mai 2018, ora 23:55.

Etapa 4 - Marea finală

În ultima etapă vom organiza un concurs live la care vor participa toate echipele. Concursul se va organiza mai întai pe serii, iar câstigătorii (top 3) vor concura apoi separat pentru a stabili cea mai bună echipă din an.

Pentru a participa la finala trebuie doar sa incarcati o arhiva cu solutia voastra, numita “finala.zip”, in repo-ul folosit de voi. Toti botii incarcati astfel vor concura intr-un clasament temporar, disponibil aici. (refresh la ~10 min.)

Termenul limita pana la care puteti modifica arhiva este miercuri, 23 mai, ora 23:59.

Punctajul aferent acestei etape este de 0.6 puncte și se va acorda dupa următorul algoritm:

  • Locul 1 va primi 0.6 puncte
  • Locul 2 va primi 0.5 puncte
  • Locul 3 va primi 0.4 puncte

Vor fi acordate puncte suplimentare pentru proiecte deosebite, care s-au remarcat în timpul anului.

Restul proiectelor vor primi in funcție de locul în clasament între 0 si 0.35 puncte, marja intre doua proiecte consecutive fiind de 0.35/(numar_proiecte_finaliste-3).

Program finală, 25 mai 2018:

17:10 - 17:30 Prezentare Softwire - Raul Tabacu

17:30 - 17:45 Halite Journey - Ionuț Bîrsu

17:45 - 18:00 Pizza Break

18:00 - 18:15 Premierea celor mai bune echipe

Vă asteptăm!

Clasament Finala Sample Replays de la finala

Resurse

FAQ

  • Ce limbaje de programare putem să folosim?

În principiu, puteți să lucrați în orice limbaj doriți. Într-un limbaj high-level (Python, Julia) va fi mai ușor să implementați/testați versiuni noi de boți dar botul va fi mai lent față de unul echivalent scris într-un limbaj precum C++/Java. Top 25 boți din competiția originală au fost scriși în foarte multe limbaje: C++, Java, C#, Python, Clojure, Rust, Go, Javascript.

Indiferent de limbajul în care lucrați veți avea aceleași restricții de timp.

  • Pe ce sistem se va face evaluarea?

Proiectul va fi evaluat pe un sistem Linux/GNU, 64 biți, prin urmare ar fi bine să verificați că aveți un makefile care funcționează corect pe Linux, chiar dacă lucrați pe Windows sau Mac OS X.

  • Pe site-ul oficial apare un starter bot care folosește concepte de învățare automată (ML). Avem nevoie de noțiuni de ML pentru proiect?

NU, nu sunt necesare noțiuni de învățare automată pentru proiect. De altfel, majoritatea participanților de la competiția originală nu au folosit ML. Bineințeles, nu este interzis, dar dacă încercați o astfel de abordare trebuie să aveți în vedere că la competiția finală nu aveți avea la dispoziție un GPU dedicat. De asemeni, nu veți putea apela biblioteci specializate de ML.

  • Putem să ne inspirăm din soluțiile publicate de participanții de la competiția oficială?

Sigur că da, inspirarea după ideile descoperite online nu se penalizează. Este important însă să precizați sursa în Readme. Copierea codului sursă (sau reproducerea integrală a ideii de rezolvare dintr-o altă sursă) se sancţionează cu pierderea punctajului pentru întregul proiect.

  • Cum se va face evaluarea la etapa finală?

Pentru acestă etapa vom folosi TrueSkill pentru a departaja echipele participante. TrueSkill modeleaza abilitatea unui jucator sub forma unei distributii normale:

Mean μ - media abilității jucătorului

Variance σ - încrederea sistemului în scorul obținut, în funcție de numărul de meciuri jucate și de adversarii întălniți.

Boții se vor lupta aleator între ei, în funcție de estimarea curentă a abilității, până ce sistemul va căpata 'încredere' în valorile obținute. (nu mai apar modificări în clasament).

  • Putem participa la competiția oficiala?

Competitia oficială s-a incheiat. Producătorii jocului vor scoate în toamnă cea de a treia versiune a jocului, la care sunteți invitați să participați, mai ales daca sunteți pasionați de AI. (Este recomandat să vă faceți cont pe site pentru a primi informații in acest sens).

Referințe

pa/regulament-proiect-2018.1527275164.txt.gz · Last modified: 2018/05/25 22:06 by radu.iacob
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0