Table of Contents

Responsabili Proiect

Regulament proiect 2020

Tema proiectului de anul acesta din cadrul materiei Proiectarea Algoritmilor va fi realizarea unei inteligențe artificiale capabile să joace șah[1]. Proiectul se va realiza în echipe de câte 2-3 studenți (minim 2, maxim 3 studenți pe echipă) și se va desfășura pe parcursul a 4 etape. Se va folosi platforma XBoard 4.8 pentru a interfața, vizualiza, înregistra și reda partidele jucate între aplicațiile realizate în cadrul proiectului. Dacă vreți să testați pe Windows, puteți folosi varianta WinBoard, pe care o puteți descărca de aici.

In cazuri deosebite acceptam ca proiectul sa fie realizat individual. Pentru asta, va trebui sa trimiteti un mail echipei de proiect in care sa motivati decizia. Nu recomandam acest lucru, avand in vedere ca volumul de lucru este gandit pentru 2-3 studenti!

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:

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 MacOS. Scriptul de testare va apela “cmake .” (dacă ați trimis un fișier CMakeLists.txt), “make build” pentru compilare, apoi “make run” pentru rulare.

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

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

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

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

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

Etapa 1

Se va realiza reprezentarea internă a tablei de joc și a pieselor de joc, precum și o interfațare cu programul XBoard.

Interfațarea va presupune posibilitatea de a interpreta și interacționa cu următoarele comenzi ale XBoard: xboard, new, force, go, white, black, quit, resign, move.

De asemenea, programul va trebui să primească mișcări de la XBoard și să trimită mișcări legale. Nu este nevoie pentru această etapă să trimită orice mișcare legală posibilă.

Este suficientă mișcarea legală a unei singure piese (ex: pion, cal etc). Dacă programul nu mai găseste mișcări valide, va putea ieși din joc (prin resign sau orice altă metodă; de preferat una elegantă)

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

Deadline-ul acestei etape este 17 martie 2020, 23:55.

Etapa 2

Programul va trebui sa implementeze macar un algoritm de bază minimax pentru a putea juca împotriva unui adversar. Programul va trebui să poată interpreta orice mișcare legală primită de la adversar, ceea ce presupune implementarea tuturor regulilor jocului.

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

Deadline-ul acestei etape este 21 aprilie 2020, ora 23:55.

Testare

Pentru testare ne vom folosi de engine-ul FairyMax care vine preinstalat cu xboard/winboard. Acesta va fi limitat să vadă doar 2 mutări în față (depth=2), deci nu va juca foarte bine.

Comanda care va fi rulată pentru testare va arăta (foarte) asemănător cu comanda de mai jos:

xboard -fcp “make run” -scp “fairymax” -secondInitString “new\nrandom\nsd 2\n” -tc 5 -inc 2 -autoCallFlag true -mg 10 -sgf partide.txt -reuseFirst false

Explicarea parametrilor:

Pentru fi siguri că primiți de la xboard/winboard mutările în formatul de coordonate (g1f3, care mută piesa de la g1 la f3) în momentul în care primiți “protover” de la xboard răspundeți cu “feature san=0”. Dacă ați implementat mutările in formatul “piesă la câmp” (ex: Nf3, care mută calul la f3) atunci nu mai este nevoie să trimiteți acest “feature”.

“feature”-ul puteți să-l trimiteți pe tot odată: foarte mulți dintre voi ați implementat în etapa 1 să răspundeți cu “feature sigterm=0”. Acum puteți trimite “feature sigterm=0 san=0”

Mai multe detalii pentru configurarea xboard-ului din linie de comandă puteți găsi aici documentație xboard.

Punctare

Punctajul de 0.5 puncte se va acorda în felul următor:

Punctele se vor acorda după următoarea formulă:

punctaj_etapă = 0.2 * (număr_de_partide_terminate_corect / 10) +
                0.2 * (număr_de_partide_terminate_după_mutarea_20 / 10) +
                min(0.1, 0.1 * (număr_de_puncte_din_meci / 5))

Clarificări:

Etapa 3

Această etapă este dedicată implementării unor algoritmi avansați pentru a crește calitatea jocului prestat de program. Punctajul pe această etapă poate fi obținut în urma unor meciuri cu boți puși la dispoziție de către noi. Recomandăm implementarea algoritmului alpha-beta și a cel putin două tehnici avansate/euristici pentru a putea calcula cât mai multe mutări în față. Administrarea timpului rămas este o componentă foarte importantă acestei etape.

Detalii despre boții puși la dispoziție, regulile de punctare și formatul meciurilor vor fi anunțate ulterior. Această etapă va avea 4 săptămâni. Punctajul alocat acestei etape este de 0.5 puncte.

Deadline-ul acestei etape este 19 mai 2020, ora 23:55.

Testare

Pentru testare ne vom folosi de engine-ul FairyMax care vine preinstalat cu xboard/winboard. În funcție de caz, acesta va fi limitat ori la depth=3 ori la depth=4. Acest lucru îl va face să joace mai bine decât la etapa precedentă.

Comenzile care vor fi rulate pentru testare vor arăta (foarte) asemănător cu comenzile de mai jos. Diferența constantă în string-ul de inițializare pentru FairyMax (depth 3 vs depth 4):

xboard -fcp “make run” -scp “fairymax” -secondInitString “new\nrandom\nsd 3\n” -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt -reuseFirst false

xboard -fcp “make run” -scp “fairymax” -secondInitString “new\nrandom\nsd 4\n” -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt -reuseFirst false

Pentru detalii legate de parametrii comenzilor analizați instrucțiunile de la etapa precedentă.

Punctare

Punctajul de 0.5 puncte se va acorda în felul următor:

Punctele se vor acorda după următoarea formulă:

punctaj_etapă = min(0.35, 0.35 * (număr_puncte_din_meci_vs_fm3 / 2)) +
                min(0.15, 0.15 * (număr_puncte_din_meci_vs_fm4 / 2))

Etapa 4

În cadrul acestei etape se va realiza un concurs între proiectele realizate. În funcție de numărul de proiecte finalizate se va stabili formatul concursului: campionat, tournament tree sau grupe+tournament tree.
Punctajul aferent acestei etape este de 0.6 puncte și se va acorda după următorul algoritm:

FAQs

De ce șah?

Didactic, este o idee de proiect bună din mai multe puncte de vedere (provocări de implementare, înțelegerea unor concepte de algoritmi avansați, provocări de time management, abilitatea de autodocumentare, abilitatea de a lucra în echipă, etc). Șahul a fost ales datorită rezonanței sale ca joc. Din experientă vă spunem că un motor de șah decent făcut dă bine la un interviu.

De ce Xboard? Nu pierdem timp stând să implementam nu știu ce protocol în loc să implementam algoritmi?

Winboard/Xboard a devenit un program standard de interfațare între diferitele motoare existente în momentul de față. Fiecare motor minimalist existent știe să lucreze cu acest program. Ușurarea lucrului de mediere a unui joc justifică implementarea sa, precum și faptul că proiectul realizat va putea juca cu orice alt motor cât de cât performant de pe net. Cât despre timpul pierdut, interfațarea minimalistă cerută in etapa 1 se poate realiza în aproximativ o oră. La ce chestii vor fi de implementat la protocoale de comunicații, asta vi se va părea floare la ureche :-).

Nu exista deja o droaie de algoritmi pe net despre sah? Dar proiectele din anii precedenți?

Da, exista multe surse de documentație pe net despre cum să implementezi un joc de șah. Dar de la vorbe la fapte e cale lungă. Doar pentru că există mulți algoritmi nu inseamnă că oricine va ști să-i implementeze și să o facă și bine. Implementarea corectă și eficientă presupune mai mult decât copy paste de pe net. Cât despre proiectele de anii trecuți, ele există in posesia echipei de PA, și cele de anul acesta vor fi verificate contra celor precedente pentru a nu avea cazuri de fraudă. De asemenea, codul fiecarui proiect va fi făcut public inainte de etapa 4 pentru a putea fi inspectat de fiecare echipă ce dorește să se asigure ca nu a fost comis vreun act de fraudă din partea concurenței. Dacă se constată o tentativă de fraudă din partea oricărei echipe, toți membrii echipei vor avea restanță la Proiectarea Algoritmilor și vor pierde punctajul aferent proiectului.

Cum imi aleg coechipierii?

Cum vrei, pe baza oricăror criterii crezi tu că sunt importante.

Nu toți membrii echipei lucrează la fel de mult. What’s up with that?

Din experiența anilor trecuți, niciodată nu se intamplă ca toți membrii echipei să lucreze la fel de mult. Acest fapt se intamplă din varii motive: fie nu toți pot, fie unul sau doi acaparează toata munca și nu le dau celorlalți o șansă (nu râdeți, s-a intamplat :P), fie <insert another reason here>. Fiecare echipă va avea un căpitan care va avea, printre altele, datoria de a comunica echipei de PA (asistentului de laborator, titularului de curs etc) orice neregulă din cadrul propriei echipe. In afară de asta și de a vorbi puțin individual cu membrii fiecarei echipe nu există altă soluție. Depinde de prioritățile fiecărui membru de echipă și a echipei per ansamblu.

In ce limbaj de programare avem voie sa realizam proiectul?

In oricare limbaj de programare cu care vă înțelegeți mai bine, atât timp cât va putea rula pe linux. De remarcat este faptul că pentru acest proiect timpul de execuție este critic.

Avem voie sa folosim fire de executie (thread-uri) in program?

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

Avem voie să folosim baze de date pentru deschidere sau alte scopuri?

Da, atât timp cât toata arhiva este până în 5Mb.

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

Categoric NU. Proiectul trebuie să fie stand-alone. Nu se admit conexiuni de genul celor menționate mai sus.

Putem trimite programe executabile?

Nu. Doar cod sursă (și eventuale adiționale precum opening data bases). Codul se va compila și link-edita dupa regulile prezente în makefile-ul, ant file-ul, script-ul etc-ul vostru de build.

Unde putem cere lamuriri suplimentare in legatura cu desfasurarea proiectului?

Pe forum-ul dedicat proiectului de pe pagina web a cursului de PA.

Referințe

[1] - http://en.wikipedia.org/wiki/Rules_of_chess