Table of Contents

Responsabili Proiect

Regulament Proiect 2022

În acest an vă propunem realizarea unui program care să joace cât mai bine jocul Halite. Proiectul se va realiza în echipe de câte 2-3 studenți (poate fi realizat și individual, dar nu recomandăm acest lucru din cauza volumului de muncă asociat).

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 în detaliu aici.

Proiectul va cuprinde mai multe competiții, respectiv o mare finală între cele mai bune echipe din cele trei serii.

Reguli de upload: Vom folosi pentru proiect repository-urile din cadrul platformei GitHub Classroom. Căpitanul echipei va trebui să intre pe assignment-ul corespunzător proiectului (https://classroom.github.com/a/Q9z10alD) și să creeze echipa (pastrati exact acelasi nume ca in formularul de inscriere) . Ceilalți membri vor intra ulterior pe același link și se vor înscrie în aceeași echipă. Repository-ul va fi creat automat și va fi privat, singurii care îl vor putea accesa fiind membrii echipei și responsabilii de proiect din echipa de PA. Pentru a incarca botul in competitie, va trebui sa aveti o arhiva cu numele Bot.zip in root-ul repository-ului vostru (o vom descarca noi automat cand faceti o submisie noua).

Arhiva va conține:

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 MacOS. Scriptul de testare va rula “make clean”, “make build” pentru compilare, apoi “make run” pentru rulare. Makefile-ul trebuie să se afle în rădăcina arhivei pentru a putea fi rulat. Asigurați-vă că fișierul Makefile nu conține path-uri absolute (să poată fi rulat și pe alt sistem).

La fiecare push în repository, GitHub va verifica automat dacă există o arhivă cu numele corect și dacă cele 3 acțiuni din Makefile pot fi rulate. Puteți ignora erorile înainte de trimiterea finală a arhivei.

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

Proiectul va lua forma unei competiții continue pe parcursul semestrului. Punctajul se va împărți în 2:

Înscrierea

Pentru început, trebuie să vă înscrieți echipa. Echipele se pot forma între studenți din orice grupă/serie (CA/CB/CC), dar trebuie să alegeți o serie pe care să o reprezentați.

Fiecare echipă va desemna un membru al acesteia cu rolul de căpitan. Căpitanul va avea sarcina de a reprezenta, respectiv de a coordona echipa sa. Căpitanul se va asigura că toți membrii participă în mod egal la îndeplinirea obiectivelor.

Pentru înscriere, accesați acest link.

Deadline pentru inscriere: 26.03.2022

Competiție cu boții PA

La fiecare 2 săptamani, agenții vostrii vor rula impotriva boților echipei de PA (dacă nu ați reușit să obțineți punctajul maxim deja), intr-un set de meciuri cu seed-uri aleatoare. Scopul vostru este sa reusiti sa bateti acești boți în mod constant. Sfatul nostru este să încercați local mai multe scenarii, pentru a vă asigura că botul vostru reușește să învingă. Pentru debug, replay-urile meciurilor vor fi publice. Se poate obține și punctaj parțial.

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
30% 25×25, 30×30, 40×40, 50×50 DBot 1v1
10% 40×40 3xDBot 1v3
30% 25×25, 30×30, 40×40, 50×50 starkbot 1v1
20% 40×40 1xstarkbot, 2xDBot 1v3
10% 40×40 3xstarkbot 1v3

Pentru fiecare rundă, se generează 10 meciuri aleatoare și se aleg cele mai bune 8 rezultate. Punctajul obținut va fi dat de procentul de meciuri câștigate.

Vom folosi acest script pentru automatizarea evaluării.

Competitie între echipe

Competiția dintre echipe va rula în mod continuu de-a lungul semestrului (pentru o noua submisie de bot, vedeți regulile de upload). Va fi un clasament separat pentru fiecare serie.

Vom folosi TrueSkill pentru a departaja echipele participante. TrueSkill modeleaza abilitatea unui jucator sub forma unei distributii normale cu următorii parametrii:

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

Punctajul este împărțit în 2:

Cele mai bune echipe din fiecare serie se vor lupta intr-o competitie separata, cu premii. Vom reveni cu detalii spre finalul semestrului.

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.

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.

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.

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.