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:

  • Codul sursă (toate sursele folosite)
  • Makefile (in root-ul arhivei), care va contine o regula de build, una de clean si una de run
  • Readme

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

  • Instrucțiuni de compilare.
  • Detalii despre structura proiectului.
  • Detalii despre abordarea algoritmică: 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 valorează 10% din punctajul proiectului.

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

  • 1 punct daca reusiți să bateți boții puși la dispoziție de echipa de PA (aceștia se află în repo-urile voastre deja)
  • 1 punct pentru clasarea in competiție

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

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

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

  • un punctaj midterm, pe baza clasamentului de la finalul saptămanii a 10a.
    • 0.4p pentru primul loc
    • 0.35p pentru locul 2
    • 0.3p pentru locul 3
    • restul punctajelor vor fi date pe baza unei formule liniare, intre 0.3 si 0.1, pe baza clasamentului, dacă vă clasați peste un bot de threshold ales de echipa de PA
  • un punctaj pe competiția finală
    • 0.6p pentru primul loc
    • 0.5p pentru locul 2
    • 0.4p pentru locul 3
    • restul punctajelor vor fi date pe baza unei formule liniare, intre 0.4 si 0.1, pe baza clasamentului, dacă vă clasați peste un bot de threshold ales de echipa de PA

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.

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

  • Avem nevoie de noțiuni de învățare automată (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.

pa/regulament-proiect-2022.txt · Last modified: 2022/03/18 19:32 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