Responsabili Proiect

News

  • 16.05.2019 Am publicat deadline-ul etapei finale.
  • 15.04.2019 Am publicat Etapa 3.
  • 19.03.2019 Am adaugat un tutorial pentru debugging in C++ folosind CLion si GDB.
  • 18.03.2019 Am publicat Etapa 2.

Regulament Proiect 2019

Î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 2019. 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) veți salva în repository-ul vostru (cel specificat la înscriere) o arhivă zip, numită “EtapaX.zip” (unde X reprezintă numărul etapei: e.g. “Etapa1.zip”)

Arhiva va conține:

  • Codul sursă (toate sursele folosite)
  • Makefile (sau CMakeLists.txt)
  • README

Pentru notare, toate arhivele vor fi descărcate automat - asigurați-vă că arhiva există în repository, este numită corect și este completă.

Makefile:

Boții vor fi evaluați pe un sistem Linux/GNU pe 64 biți, deci este foarte important să verificați că aveți un makefile care funcționează corect pe Linux, chiar dacă lucrați pe Windows sau Mac OS X. Scriptul de testare va apela “cmake .” (daca ati trimis un fisier CMakeLists.txt), respectiv “make”.

Asigurați-vă că fișierul Makefile nu conține path-uri absolute (să poată fi rulat și pe alt sistem). Este util sa aveti o regula “clean”, pentru a sterge executabilul si fisierele obiect/log-urile generate (daca este cazul).

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.

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, dupa Etapa 1 vom organiza săptămânal o competiție între boții voștri.

Rezultatele pot fi observate aici: https://paresources.github.io/haliteweekly.github.io/

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. Rolurile se pot schimba pe parcurs.

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ă, 3 martie 2019, ora 23:55.

Etapa 1

Pentru prima etapă veți dezvolta un bot simplu, capabil să extragă eficient resursele disponibile pe o hartă, fără a se întâlni cu un adversar.

Obiectivele etapei:

  • Să vă obișnuiți cu starter pack-ul si funcționalitățile pe care le pune la dispoziție
  • Să elaborați un algoritm simplu de navigare/extracție de resurse.

Puteți modifica/imbunătăți cum doriți codul din starter pack.

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

Lungime hartă Înălțime hartă Seed Halite Minim Acumulat
32 32 42 8000
32 32 1673031865 12000
40 40 1773807367 20000
48 48 1942373999 13000
56 56 142342898 12000

Dacă botul înmagazinează, până la finalul jocului, cantitatea specificată de Halite (sau mai mult), va primi intregul punctaj asociat configurației respective. Altfel, va primi un punctaj parțial, în funcție de cât de aproape se află de limita.

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)

Scriptul pe care il vom folosi pentru evaluare se găsește la adresa: resources.zip (Minor Update 7.03.2019)

Pentru a-l folosi:

  • Descărcați întreaga arhivă într-un folder nou.
  • Copiați sursele voastre/makefile in același folder.
  • Apelați “run.py” cu argumentele specificate in Readme.

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

Deadline-ul acestei etape este duminică, 17 martie 2019, ora 23:55.

Etapa 2

Pentru a doua etapă, dorim să implementați câteva tactici simple care să coordoneze navele mai bine, să aleagă locații optime pentru “dropoffs” și să țină cont în general de prezența adversarului.

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

Lungime hartă Înălțime hartă Seed Nume Bot Adversar
32 32 20596 Odysseus
32 32 75273 Dragon
32 32 58900 Joker
40 40 93689 Odysseus
40 40 98091 Dragon
56 56 1234 Odysseus
56 56 42 Odysseus
56 56 1024 Dragon

Odysseus este un bot simplu, care caută greedy pentru fiecare navă o destinație cu multe resurse, la o distantă f. mică de poziția curentă.

Joker exploateaza o anumită vulnerabilitate care poate sa apară în soluțiile voastre. :-)

Dragon este un bot mai complex, care combină mai multe strategii.

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

  • Hint: Planificați o strategie eficientă pentru late-game (ultimele X ture).
  • Hint: Evitați să faceți dropoff-uri pe hărți sărace in resurse. (și invers, folosiți dropoff-uri pe hărți bogate)
  • Hint: Tineți cont de caracteristicile hărții (numărul de resurse) atunci când decideți să generați nave.

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.5 puncte.

Deadline-ul acestei etape este duminică, 14 aprilie 2019, ora 23:55.

Etapa 3

Etapa 3 va avea ca tinta jocurile cu 4 oponenti. La aceasta etapa veti avea de luptat impotriva Odysseus, Dragon (botii de la etapa 2) si Rhaegal, un varianta putin imbunatatita a lui Odysseus care foloseste dropoff-uri. Obiectul vostru este sa va clasati cat mai sus in cele 8 meciuri.

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

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

Lungime hartă Înălțime hartă Seed Adversari
56 56 1423 Odysseus, Odysseus, Odysseus
56 56 1312 Rhaegal, Odysseus, Dragon
32 32 5231 Dragon, Dragon, Dragon
56 56 3908 Rhaegal, Rhaegal, Rhaegal
56 56 1423 Rhaegal, Odysseus, Rhaegal
40 56 8762 Rhaegal, Dragon, Dragon
56 40 1931 Dragon, Dragon, Dragon
40 40 5421 Dragon, Rhaegal, Rhaegal

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 miercuri, 15 Mai 2019, 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.

Deadline-ul pentru submisii (“Etapa4.zip”) este 22 Mai 2019, ora 23:55. Dupa această dată competiția în cadrul seriilor va fi resetată (clasamentul nu va mai fi disponibil live).

Punctajul aferent acestei etape este de 0.6 puncte și se va acorda dupa următorul algoritm (pentru fiecare serie in parte):

  • 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ă, 24 mai 2019, EC101:

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

16:30 - 16:55 Halite Journey - where we talk about training dragons

16:55 - 17:05 Pizza Break

17:05 - 18:15 Premierea celor mai bune echipe

Vă asteptăm!

Clasamentul final al competitiei se afla aici: https://tinyurl.com/y2wnjqzh

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 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).

Referințe

pa/regulament-proiect-2019.txt · Last modified: 2019/05/24 21:40 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