This shows you the differences between two versions of the page.
pa:regulament-proiect-2023 [2023/04/06 21:30] traian.enache |
pa:regulament-proiect-2023 [2023/05/29 22:36] (current) stefan.ruseti [Etapa 2] |
||
---|---|---|---|
Line 95: | Line 95: | ||
Această etapă va avea **4 săptămâni**. Punctajul alocat acestei etape este de **0.6 puncte**. | Această etapă va avea **4 săptămâni**. Punctajul alocat acestei etape este de **0.6 puncte**. | ||
- | Deadline-ul acestei etape este **25 aprilie 2023, 23:55**. | + | Deadline-ul acestei etape este **30 aprilie 2023, 23:55**. |
=== Testare === | === Testare === | ||
Line 127: | Line 127: | ||
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. | 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. | ||
- | TODO Această etapă va avea **5 săptămâni**. Punctajul alocat acestei etape este de **0.5 puncte**. | + | TODO Această etapă va avea **5 săptămâni**. Punctajul alocat acestei etape este de **0.6 puncte**. |
- | TODO Deadline-ul acestei etape este **30 mai 2023, ora 23:55**. | + | TODO Deadline-ul acestei etape este **31 mai 2023, ora 23:55**. |
==== Testare ==== | ==== Testare ==== | ||
- | Detaliile despre testare vor fi adăugate în curând. | + | Pentru testare ne vom folosi de engine-ul Fairy-Stockfish disponibil [[https://github.com/fairy-stockfish/Fairy-Stockfish|aici]]. Acesta poate fi instalat direct din surse folosind aceste [[https://github.com/fairy-stockfish/Fairy-Stockfish#compiling-stockfish-yourself-from-the-sources|instrucțiuni]]. Comenzile de mai jos sunt rulate presupunand ca executabilul "stockfish" se află în directorul curent, vor trebui adaptate în funcție de locația executabilului de pe sistemul vostru. În funcție de caz, capabilitățile sale vor fi limitate, folosind opțiunea [[https://github.com/fairy-stockfish/Fairy-Stockfish#skill-level|Skill level]] cu valorile -20, -10 sau -5. Acest lucru îl va face să joace progresiv mai bine. |
+ | |||
+ | Testarea se va face automat într-o mașină virtuală linux cu 1 singur procesor. Comenzile care vor fi rulate pentru testare vor arăta (foarte) asemănător cu comenzile de mai jos. Iar prin "foarte asemănător" înțelegem că această comandă va fi dată xboardului să pornească jocul cu engine-ul vostru, dar mai pot diferi numele fișierului în care se salvează partidele și/sau va fi pusă într-un script. | ||
+ | <note important>xboard -variant crazyhouse -fcp "./stockfish" -firstOptions "Skill Level=-20,Slow Mover=10,Use NNUE=false" -fn "Stockfish Easy" -scp "make run" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt -reuseSecond false</note> | ||
+ | <note important>xboard -variant crazyhouse -fcp "./stockfish" -firstOptions "Skill Level=-10,Slow Mover=10,Use NNUE=false" -fn "Stockfish Medium" -scp "make run" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt -reuseSecond false</note> | ||
+ | <note important>xboard -variant crazyhouse -fcp "./stockfish" -firstOptions "Skill Level=-5,Slow Mover=10,Use NNUE=false" -fn "Stockfish Hard" -scp "make run" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt -reuseSecond false</note> | ||
+ | |||
+ | Explicarea parametrilor: | ||
+ | * **xboard** - aplicația pe care o folosim :-D poate fi atât xboard cât și winboard, dar checkerul va rula pe linux deci vom folosi xboard. | ||
+ | * **-scp "make run"** - setează al doilea engine ca fiind engine-ul vostru. Vă reamintim că "make run" ar trebui doar să vă pornească engine-ul, nu și xboard-ul. | ||
+ | * **-tc 5 -inc 2** - setează timpul de joc la 5 minute (timpul de start pentru fiecare jucător), iar la fiecare mutare jucătorul care a efectuat-o va primi încă 2 secunde. //Observație:// Este indicată gestionarea timpului (dar nu obligatoriu). Acest timp, împreună cu următorul parametru(-autoCallFlag true) previne situația în care voi ați da un depth prea mare engine-ului vostru și acesta ar sta foarte mult să se gândească și situația în care engine-ul vostru intră într-o buclă infinită și nu mai mută. | ||
+ | * **-autoCallFlag true** - setează xboard-ul ca atunci când i se termină timpul unuia din jucători să atribuie victoria celuilalt. | ||
+ | * **-mg 4** - numărul de partide jucate va fi 4 pentru teste. Automat se vor juca 2 cu albul și 2 cu negru. Voi puteți modifica parametrul sau chiar să îl scoateți pentru teste mai mici. | ||
+ | * **-sgf partide.txt** - în acest fișier se vor salva partidele jucate. | ||
+ | * **-reuseSecond false** - acest parametru îi specifică lui xboard să reîncarce engine-ul vostru după fiecare partidă. Dacă nu este prezent se va da "new game". Puteți să-l vedeți ca pe o plasă de siguranță: dacă cumva engine-ul vostru se "strică" în timpul unei partide, el se va reseta la următoarea deci teoretic eroarea nu se va propaga. | ||
+ | |||
+ | ==== Punctare ==== | ||
+ | Punctajul de **0.6 puncte** se va acorda în felul următor: | ||
+ | * **0.2 puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs Stockfish Easy | ||
+ | * **0.2 puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs Stockfish Medium | ||
+ | * **0.2 puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs Stockfish Hard | ||
+ | |||
+ | Punctele se vor acorda după următoarea formulă: | ||
+ | |||
+ | <code> | ||
+ | punctaj_etapă = min(0.2, 0.2 * (număr_puncte_din_meci_vs_easy / 2)) + | ||
+ | min(0.2, 0.2 * (număr_puncte_din_meci_vs_medium / 2)) + | ||
+ | min(0.2, 0.2 * (număr_puncte_din_meci_vs_hard / 2)) | ||
+ | </code> | ||
Line 175: | Line 203: | ||
- mergeți într-un terminal de WSL și rulați o comandă precum <code>> DISPLAY=:0 xboard</code> În urma acestori pași, dacă și xboardul este instalat ar trebui să vă apară tabla din cadrul aplicației xboard. Dacă acest lucru nu merge și primiți o eroare de genul "cannot open display :0" atunci rulați următoarea comandă care ar trebui să rezolve problema: <code>> export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 ; xboard</code> | - mergeți într-un terminal de WSL și rulați o comandă precum <code>> DISPLAY=:0 xboard</code> În urma acestori pași, dacă și xboardul este instalat ar trebui să vă apară tabla din cadrul aplicației xboard. Dacă acest lucru nu merge și primiți o eroare de genul "cannot open display :0" atunci rulați următoarea comandă care ar trebui să rezolve problema: <code>> export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 ; xboard</code> | ||
===== Schelet de cod ===== | ===== Schelet de cod ===== | ||
+ | **Last update: 27/4/23 1:20 (protocol hotfix in Main.java/Main.cpp + Java Makefile)** | ||
+ | |||
Aveți aici schelete de cod pentru limbajele {{:pa:pa_crazyhouse_schelet_cpp.zip|C++}} și {{:pa:pa_crazyhouse_schelet_java.zip|Java}}. | Aveți aici schelete de cod pentru limbajele {{:pa:pa_crazyhouse_schelet_cpp.zip|C++}} și {{:pa:pa_crazyhouse_schelet_java.zip|Java}}. | ||
Implementarea voastră se va realiza în fișierele Bot.cpp sau Bot.java, după caz. | Implementarea voastră se va realiza în fișierele Bot.cpp sau Bot.java, după caz. | ||
In cadrul clasei Bot, vă veți declara câmpuri private (spre exemplu tabla de șah), pe care le puteți stoca în orice structuri doriți. Inițializarea acestora o veți face în constructorul clasei. Acestea vor putea fi accesate de către voi în cele două metode ce le veți implementa: | In cadrul clasei Bot, vă veți declara câmpuri private (spre exemplu tabla de șah), pe care le puteți stoca în orice structuri doriți. Inițializarea acestora o veți face în constructorul clasei. Acestea vor putea fi accesate de către voi în cele două metode ce le veți implementa: | ||
* __recordMove()__, care va fi apelată de fiecare dată când Engine-ul primește o mutare. Aceasta poate fi de la adversar (în modul normal de joc), sau de la oricare din cei doi jucători (In "Force mode", unde xboard vă "dictează" mutări). Va trebui să memorati mutarea, actualizând câmpurile declarate de voi ce se ocupă cu stocarea stării jocului (configurația tăblii, etc.). | * __recordMove()__, care va fi apelată de fiecare dată când Engine-ul primește o mutare. Aceasta poate fi de la adversar (în modul normal de joc), sau de la oricare din cei doi jucători (In "Force mode", unde xboard vă "dictează" mutări). Va trebui să memorati mutarea, actualizând câmpurile declarate de voi ce se ocupă cu stocarea stării jocului (configurația tăblii, etc.). | ||
- | * __calculateNextMove()__, ce va calcula și va întoarce mutarea pe care botul vostru o va efectua. Mutările se pot crea prin cele patru metode expuse în Move.h/Move.java, și anume: **moveTo()**, pentru o mutare obișnuită/rocadă, **promote()**, utilizata atunci cand mutați un pion în prima linie a adversarului pentru a obține o altă piesă în locul lui, **dropIn()**, pentru a plasa pe tablă o piesă capturată de către voi (mutare specifică Crazyhouse), și **resign()**. Pentru detalii despre apelarea/utilizarea acestora, vedeti comentariile din cod. | + | * __calculateNextMove()__, ce va calcula și va întoarce mutarea pe care botul vostru o va efectua. Mutările se pot crea prin cele patru metode expuse în Move.h/Move.java, și anume: **moveTo()**, pentru o mutare obișnuită/rocadă, **promote()**, utilizata atunci cand mutați un pion în prima linie a adversarului pentru a obține o altă piesă în locul lui, **dropIn()**, pentru a plasa pe tablă o piesă capturată de către voi (mutare specifică Crazyhouse), și **resign()**. Pentru detalii despre apelarea/utilizarea acestora, vedeti comentariile din cod. Pozitiile sursă si destinație ce vor fi date ca parametru sunt string-uri (String sau std::string), din doua caractere, in "coordinate notation", cum ar fi: "e4", "d2", "h2", etc. |