Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pa:regulament-proiect-2023 [2023/03/16 10:39]
stefan.ruseti created
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.puncte**.+TODO Această etapă va avea **5 săptămâni**. Punctajul alocat acestei etape este de **0.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 ====
-Pentru testare ne vom folosi de engine-ul ​Pulsar ​disponibil [[http://www.lanternchess.com/pulsar/​|aici]]. ​El este disponibil într-o arhivă zip și pentru a putea testa cu comenzile ​de mai jos este recomandat să adăugați folderul ​de dezarhivare în PATH. În funcție de caz, acesta va fi limitat ori la depth=2ori la depth=3ori la depth=4. Acest lucru îl va face să joace progresiv mai bine.+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 limitatefolosind 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. 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.
-Diferența între acestea constantă în string-ul de inițializare pentru Pulsar (depth 2 vs depth 3 vs depth 4): +<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 "pulsar2009-9b-64 mxT-2" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt ​ -reuseFirst ​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 "pulsar2009-9b-64 mxT-3" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt ​ -reuseFirst ​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>​
-<note important>​xboard -variant crazyhouse -fcp "pulsar2009-9b-64 mxT-4" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt ​ -reuseFirst ​false</​note>​+
  
 Explicarea parametrilor:​ 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.   * **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.
-  * **-fcp "make run"** - setează ​primul ​engine ca fiind engine-ul vostru. Vă reamintim că "make run" ar trebui doar să vă pornească engine-ul, nu și xboard-ul+  * **-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.
-  * **-scp "​pulsar2009-9b-64 mxT-Numar"​** - setează al doilea engine ca fiind engine-ul Pulsar cu depth-ul Numar. Reamintim că pentru testări locale calea până la executabilul de pulsar trebuie adăugată în PATH.+
   * **-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ă.   * **-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.   * **-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.   * **-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.   * **-sgf partide.txt** - în acest fișier se vor salva partidele jucate.
-  * **-reuseFirst ​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.+  * **-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 ==== ==== Punctare ====
 Punctajul de **0.6 puncte** se va acorda în felul următor: 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 Pulsar cu depth-ul 2 +  * **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 Pulsar cu depth-ul 3 +  * **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 Pulsar cu depth-ul 4+  * **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ă: Punctele se vor acorda după următoarea formulă:
  
 <​code>​ <​code>​
-punctaj_etapă = min(0.2, 0.2 * (număr_puncte_din_meci_vs_pulsar2 ​/ 2)) + +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_pulsar3 ​/ 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_pulsar4 ​/ 2))</​code>​+                min(0.2, 0.2 * (număr_puncte_din_meci_vs_hard ​/ 2)) 
 +</​code>​ 
  
  
Line 202: Line 202:
   - porniți Xming (căutați în programele voastre XLaunch) și pentru a-l configura puteți păstra totul la valorile predefinite **mai puțin la partea de parametrii adiționali**. Acolo va trebui să adăugați -ac în câmpul "​Additional parameters for Xming"​. {{:​pa:​xming_parametrii.jpg?​linkonly|vezi exemplu aici}}   - porniți Xming (căutați în programele voastre XLaunch) și pentru a-l configura puteți păstra totul la valorile predefinite **mai puțin la partea de parametrii adiționali**. Acolo va trebui să adăugați -ac în câmpul "​Additional parameters for Xming"​. {{:​pa:​xming_parametrii.jpg?​linkonly|vezi exemplu aici}}
   - 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 =====
 +**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}}.
 +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:
 +  * __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. 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.
  
pa/regulament-proiect-2023.1678955948.txt.gz · Last modified: 2023/03/16 10:39 by stefan.ruseti
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