Responsabili Proiect

Regulament Proiect 2024

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

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.

Etapa 1

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 compila runtime-ul Halite, va trebui să navigați în directorul 'environment', unde veți rula comanda 'make'. Aceasta va genera un executabil numit 'halite'. Acesta poate fi ulterior mutat, după preferințe..

Pentru a rula un meci în single-player, utilizați comanda:

./halite -d “N M” -n 1 -s seedrun_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.

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

În vederea vizualizării, asigurați-vă că aveți în variabila de mediu PATH adăugată calea către browser-ul pe care îl utilizați.

Punctajul alocat acestei etape este de 0.3 puncte.

Deadline-ul acestei etape este marți, 07 Mai 2024, ora 23:55.

Etapa 2

Î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
28243140.06
3030420.06
40401540.06
305030.06
5050420.06

Pentru a rula un meci cu un singur adversar, utilizați comanda:

./halite -d “N M” -s seedrun_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.

Etapa 3

Î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:

  • Dacă botul vostru câștigă, punctajul primit va fi de 100%.
  • Dacă botul vostru supraviețuiește 200 de ture sau mai mult, punctajul primit va fi de 100%.
  • Dacă botul vostru supraviețuiește 100 de ture sau mai puțin, punctajul primit va fi de 0%.
  • Dacă botul vostru supraviețuiește între 100 și 200 de ture, punctajul primit va fi direct proporțional cu pătratul numărului de ture supraviețuite peste pragul de 100. Spre exemplu, dacă botul trăiește 125 de ture, va primi 6.25% (1/16), pentru 150 de ture va primi 25% (4/16), pentru 175 de ture va primi 56.25% (9/16).

Click to display ⇲

Click to hide ⇱

Formula utilizată pentru a calcula scorul unui meci este: ((max(100, min(ture, 200)) - 100) / 100)^2. Pentru un meci câștigat, `ture` se va înlocui cu 200. Rezultatul acestei formule este o fracție între 0 și 1.

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

Pentru această etapă, veți recompila motorul Halite. În acest scop, ștergeți executabilul, rulați 'make build' în directorul 'environment' și mutați executabilul un director mai sus (în directorul ce conține script-ul run.py).

FAQ

Q: Ce limbaje de programare putem folosi?

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.

Q: Pe ce sistem se va realiza evaluarea?

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.

Q: Putem utiliza în implementare diverse tehnici de învățare automată (ML), precum rețelele neuronale?

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.

Q: Este permisa utilizarea de kernel threads, pentru a accelera calculele?

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.

Q: Avem voie să folosim baze de date sau tabele precalculate pentru diverse scopuri?

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.

Q: Putem comunica cu un calculator la distanță prin TCP/IP sau alte mijloace pentru a avea acces la o bază de date suplimentară sau mai multe resurse de calcul?

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.

Q: Ne putem inspira din soluțiile publicate de participanții de la competiția oficială?

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.

Q: Unde putem cere lămuriri suplimentare în legătură cu desfășurarea proiectului?

A: Pe forumul de pe Moodle dedicat proiectului de la PA.

pa/regulament-proiect-2024.txt · Last modified: 2024/05/11 17:30 by traian.enache
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