Ultima modificare: 11 Aprilie 2024: publicare etapa 3
Î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 2024. Fiecare echipă poate să își schimbe complet strategia de joc între etape dacă membrii săi consideră acest lucru oportun.
Pentru replays, folositi acest link.
Etapa 0 presupune formarea unor echipe de câte 2-3 persoane. Echipele se pot forma între oricare 2-3 studenți din aceeași 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 crea echipa pe GitHub Classroom. Ceilalţi membri ai echipei se vor conecta în echipa deja creată.
Pentru înscrierea pe GitHub Classroom, accesați acest link.
Pentru înscrierea echipei, accesați acest link.
Deadline-ul acestei etape este duminică, 24 Martie 2024, ora 23:55.
Scopul primei etape este acomodarea echipelor cu jocul Halite, prin realizarea unei soluții simple din partea căreia se cere acapararea întregii planșe într-un număr dat de ture, fără a juca împotriva unui adversar.
Punctajul aferent acestei etape se va acorda pe următoarele configurații de planșe:
Înălțime hartă | Lungime hartă | Seed | Soft Turn Limit | Hard Turn Limit | Punctaj Maxim |
15 | 20 | 42 | 175 | 200 | 0.06 |
20 | 15 | 42 | 175 | 200 | 0.06 |
30 | 30 | 42 | 250 | 300 | 0.06 |
40 | 40 | 42 | 275 | 400 | 0.06 |
50 | 50 | 42 | 300 | 500 | 0.06 |
Dacă botul acoperă harta 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'.
Nu se va acorda punctaj pentru soluțiile ce acoperă planșa în ('Hard Turn Limit' + 1) pași sau mai mulți.
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.
Scriptul pe care îl vom folosi pentru evaluare se găsește aici
Pentru a rula un meci în single-player, utilizați comanda:
./halite -d “N M” -n 1 -s seed “run_bot_cmd”, unde N și M reprezintă dimensiunile planșei, seed reprezintă seed-ul, iar ultimul argument va fi o comandă ce rulează bot-ul, spre exemplu “bots/DBotv4_linux”, “java MyBot” sau chiar “make run”.
După rularea meciului, se va genera un log file cu extensia ”.hlt”. Pentru a vizualiza meciul, rulați:
python3 vis.py <nume_executabil_browser> <log_file>
Vizualizarea se poate face atât pe Windows, cât și pe Linux.
Exemplu: python3 run.py --cmd “run_bot_cmd” --round 1 (eventual și --clean)
Scriptul va compila runtime-ul halite, dacă nu există, dar și botul vostru, dacă în directorul rădăcină (unde se află și script-ul) se regăsește un fișier “Makefile”.
Punctajul alocat acestei etape este de 0.3 puncte.
Deadline-ul acestei etape este marți, 07 Mai 2024, ora 23:55.
În cea de-a doua etapă, bot-ul vostru se va confrunta cu un bot pus la dispoziție de către echipa PA, în mai multe meciuri 1v1. Punctajul se va obține în funcție de numărul de victorii în fața bot-ului DBotv4_linux_x64 (regăsit în directorul “bots” al arhivei specificate în etapa 1).
Înălțime hartă | Lungime hartă | Seed | Punctaj |
28 | 24 | 314 | 0.06 |
30 | 30 | 42 | 0.06 |
40 | 40 | 154 | 0.06 |
30 | 50 | 3 | 0.06 |
50 | 50 | 42 | 0.06 |
./halite -d “N M” -s seed “run_bot_cmd” “bots/DBotv4_linux_x64”
unde secvențele îngroșate au aceeași semnificație ca cele de la etapa 1.
PRO-TIP: Pentru a rula toate meciurile din etapa curentă, utilizați scriptul de testare automat 'run.py'.
Exemplu: python3 run.py --cmd “run_bot_cmd” --round 2 (eventual și --clean)
Punctajul alocat acestei etape este de 0.3 puncte.
Deadline-ul acestei etape este marți, 07 Mai 2024, ora 23:55.
În cea de-a treia etapă, botul vostru se va lupta cu boții puși la dispoziție de echipa PA: DBotv4 și starkbot, în diverse formate, precum lupte 1v3, 1v1v1v1, etc. Botul vostru va fi întotdeauna în colțul din stânga sus (player1).
În această etapă, există 5 runde, fiecare cu adversari determinați, dimensiunea tablei aleasă dintr-un set specificat, iar seed-urile meciurilor vor fi aleatoare. Scopul vostru este sa reușiți sa bateți acești boți în mod constant.
Punctajul va fi împărțit în cinci runde în felul următor:
Procent Punctaj | Dimensiuni posibile hărți (lungime/lățime) | Boți | Format |
25% | 30×30, 35×35, 40×40 | 3x DBotv4 | 1v3 |
25% | 25×25, 30×30, 40×40 | 1x starkbot | 1v1 |
15% | 25×25, 30×30, 40×40, 45×45 | 1x starkbot, 2x DBotv4 | 1v2v1 |
15% | 30×30, 35×35, 40×40 | 2x starkbot, 1x DBotv4 | 1v1v1v1 |
20% | 35×35, 40×40 | 3x starkbot | 1v1v1v1 |
Pentru fiecare rundă, se generează 10 meciuri aleatoare și se aleg cele mai bune 8 rezultate.
Scorul acordat fiecărui meci este calculat în felul următor:
Scorul unei runde este dat de media celor mai mari 8 punctaje din cele 10 meciuri rulate pentru respectiva rundă. Acesta va fi înmulțit cu ponderea asociată rundei (vezi prima coloană din tabel) pentru a calcula punctajul pentru această etapă.
Comanda ce va fi rulată pentru fiecare meci este:
./halite -d “dimx dimy” -s random_seed “run_cmd” “player2” “player3” “player4”.
Ca parametru ”--cmd” al scriptului “run.py”, veți da comanda “make -s run”. Spre exemplu: python3 run.py --cmd “make -s run” --round 3
Punctajul alocat acestei etape este de 0.8 puncte.
Deadline-ul acestei etape este duminică, 26 Mai 2024, ora 23:55.
A: Aveți la dispoziție puse 3 schelete, în limbajele C++, Java și Python. Acestea reprezintă puncte de plecare pentru bot-ul vostru. O mențiune importantă este că timpul alocat pentru fiecare tură este același (o secundă), indiferent de limbajul de programare ales.
A: 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.
A: Nu, utilizarea de algoritmi precum rețelele neuronale este interzisă, întrucât nu reprezintă scopul disciplinei PA. De asemenea, o implementare eficientă a acestei tehnici presupune utilizarea de hardware specializat pentru accelerarea calculelor (de exemplu, GPU). Totuși, vă este permis să utilizați și diverși algoritmi care nu sunt studiați la PA, cum ar fi arbori/păduri de decizii, diverse tipuri de regresii, dacă considerați că vă pot fi de folos. De asemenea, aveți în vedere faptul că nu puteți utiliza biblioteci specializate pentru aceste probleme.
A: Utilizarea de multithreading (e.g. std::thread, Java threads) nu este permisă. S-a pus problema și în alți ani. Motivul este că nu toți știu să lucreze cu thread-uri, iar un astfel de avantaj ar fi incorect față de ceilalți. NU postați în legătură cu asta pe forum…it’s final and that’s that.
A: Atâta timp cât aceste tabele nu sunt folosite pentru hardcodarea mutărilor, utilizarea lor este permisă. De reținut este faptul că arhiva voastră trebuie să se încadreze în 5MB.
A: Răspunsul este evident nu. Proiectul trebuie să fie stand-alone. Orice încercare de transmitere de date peste socketi/alte mijloace către un calculator la distanță va atrage pierderea punctajului.
A: Inspirarea după ideile descoperite online nu se penalizează, atâta timp cât sursa este precizată în README. Reproducerea integrală a ideii de rezolvare, sau copierea codului sursă, atrage pierderea punctajului pe proiect.
A: Pe forumul de pe Moodle dedicat proiectului de la PA.