Differences

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

Link to this comparison view

pa:regulament-proiect-2021 [2021/03/04 13:55]
stefan.ruseti [Testare]
pa:regulament-proiect-2021 [2021/04/29 10:47] (current)
dragos.corlatescu [Etapa 3]
Line 15: Line 15:
 </​note>​ </​note>​
  
-**Reguli de upload**: Vom folosi pentru proiect repository-urile din cadrul platformei GitHub Classroom. ​Fiecare echipă va trebui să intre pe assignment-ul corespunzător proiectului (https://​classroom.github.com/​g/​w0Kdllwi) și să completeze conturile de GitHub ale membrilor echipei. 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. La fiecare etapă (în afară de etapa 0) veți salva în repository-ul vostru o arhivă zip, numită "​EtapaX.zip"​ (unde X reprezintă numărul etapei: e.g. "​Etapa1.zip"​)+**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/​g/​w0Kdllwi) și să creeze echipa. 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. La fiecare etapă (în afară de etapa 0) veți salva în repository-ul vostru o arhivă zip, numită "​EtapaX.zip"​ (unde X reprezintă numărul etapei: e.g. "​Etapa1.zip"​)
  
 Arhiva va conține: ​ Arhiva va conține: ​
Line 52: Line 52:
 Această etapă va avea **1 săptămână**. Punctajul alocat acestei etape este de 0 puncte. Această etapă va avea **1 săptămână**. Punctajul alocat acestei etape este de 0 puncte.
  
-Deadline-ul acestei etape este **duminică, 10 martie 2021, ora 23:55**.+Deadline-ul acestei etape este **miercuri, 10 martie 2021, ora 23:55**.
  
 ===== Etapa 1 ===== ===== Etapa 1 =====
Line 97: Line 97:
 Această etapă va avea **3 săptămâni**. Punctajul alocat acestei etape este de **0.4 puncte**. Această etapă va avea **3 săptămâni**. Punctajul alocat acestei etape este de **0.4 puncte**.
  
-Deadline-ul acestei etape este **31 martie ​2020, 23:55**.+Deadline-ul acestei etape este **31 martie ​2021, 23:55**.
 ===== Etapa 2 ===== ===== Etapa 2 =====
  
-** TBA **+Programul vostru va trebui să fie capabil să joace un joc de șah complet. Acest lucru implică interpretarea ​**tuturor mișcărilor legale** din jocul de 3 check chess. Pentru a decide următoarea mutare este suficient să aveți o strategie aleatoare (cu o singură excepție specificată în secțiunea următoare),​ dar dacă doriți să implementați ceva mai inteligent sunteți invitații noștri.
  
 +Această etapă va avea <​del>​4</​del>​ **5 săptămâni**. Punctajul alocat acestei etape este de **0.5 puncte**.
 +
 +Deadline-ul acestei etape este <​del>​28 aprilie</​del>​ **5 mai 2021, ora 23:55**.
 +
 +
 +=== Testare ===
 +
 +Testarea se va realiza manual folosind atât funcția "​force"​ (Edit Game), cât și prin joc "​normal"​. Scenariile pe care va trebui să le implementați și care vor fi și testate sunt următoarele:​
 +  - Mutări normale de șah - botul vostru trebuie să fie capabil să primească mutări, să-și actualizeze tabla și să răspundă cu o altă mutare. Toate piesele trebuie să știe să efectueze mutări
 +  - Șah - în cazul în care primiți șah, botul vostru trebuie să se apere într-un fel și să nu facă mutări invalide
 +  - Promovări - un pion care ajunge pe ultima linie trebuie să se poată promova într-un dintre piesele: Damă (Regină), Turn, Cal, Nebun
 +  - En passant - https://​en.wikipedia.org/​wiki/​En_passant
 +  - Rocadă mică + Rocadă Mare
 +  - Regulile de imposibilitate pentru efectuarea rocadei https://​en.wikipedia.org/​wiki/​Castling#​Requirements:​
 +        * Dacă regele se află în șah, nu se poate efectua rocada
 +        * Dacă regele a fost mutat înainte de momentul actual, nu se poate efectua rocada
 +        * Dacă turnul care ar putea fi folosit pentru rocadă a fost mutat înainte de momentul actual, nu se poate efectua rocada
 +        * Dacă regele trece prin șah, nu se poate efectua rocada
 +        * Dacă regele ajunge în șah prin rocadă, nu se poate efectua rocada
 +
 +<note important>​Pentru a putea testa ultima regulă (cea cu rocada) de mai sus **trebuie** ca strategia voastră de a muta să aleagă să facă rocada dacă acest lucru este posibil. Dacă ambele rocade sunt disponibile puteți să alegeți pe oricare dintre ele. În rest, mutările voastre pot fi aleatoare.</​note>​
 +
 +Ce nu vom testa, dar va fi nevoie de ele pentru etapa următoare vor fi condițiile de terminare a partidei:
 +  - repetiție de **3** ori a //​aceeași//​ poziție cu //​aceeași//​ culoare la mutare -> remiză
 +  - 50 de mutări fără captură și fără mutări de pioni -> remiză
 +  - pat -> remiză
 +  - mat -> victorie
 +  - 3 șahuri date unui rege (*regulă specială 3 check chess) -> victorie
 +
 +<note important>​Orice mutare invalidă/​regulă care nu este respectată va aduce depunctări în funcție de gravitatea și frecvența cu care ea apare.</​note>​
  
 ===== Etapa 3 ===== ===== Etapa 3 =====
  
-**TBA**+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. Nu uitați că botul submis de voi pentru această etapă va fi luat în considerare și pentru concursul din Etapa 4. 
 + 
 +Această etapă va avea **4 săptămâni**. Punctajul alocat acestei etape este de **0.5 puncte**. 
 + 
 +Deadline-ul acestei etape este **26 mai 2021, ora 23:55**. 
 + 
 + 
 +==== 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=2, ori la depth=3, ori la depth=4. 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. 
 +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 3check -fcp "​pulsar2009-9b-64 mxT-2" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt ​ -reuseFirst false</​note>​ 
 +<note important>​xboard -variant 3check -fcp "​pulsar2009-9b-64 mxT-3" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt ​ -reuseFirst false</​note>​ 
 +<note important>​xboard -variant 3check -fcp "​pulsar2009-9b-64 mxT-4" -tc 5 -inc 2 -autoCallFlag true -mg 4 -sgf partide.txt ​ -reuseFirst 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. 
 +  * **-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 "​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ă. 
 +  * **-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. 
 +  * **-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.
  
 ==== Punctare ==== ==== Punctare ====
 Punctajul de **0.5 puncte** se va acorda în felul următor: Punctajul de **0.5 puncte** se va acorda în felul următor:
-  * **0.35 puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs FairyMax ​cu depth-ul 3 +  * **0.puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs Pulsar cu depth-ul 2 
-  * **0.15 puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs FairyMax ​cu depth-ul 4 +  * **0.2 puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs Pulsar ​cu depth-ul 3 
 +  * **0.puncte** obținerea a 2 puncte (orice combinație de remize + victorii) din 4 partide vs Pulsar ​cu depth-ul 4
  
 Punctele se vor acorda după următoarea formulă: Punctele se vor acorda după următoarea formulă:
  
 <​code>​ <​code>​
-punctaj_etapă = min(0.35, 0.35 * (număr_puncte_din_meci_vs_fm3 ​/ 2)) + +punctaj_etapă = min(0.2, 0.* (număr_puncte_din_meci_vs_pulsar2 ​/ 2)) + 
-                min(0.15, 0.15 * (număr_puncte_din_meci_vs_fm4 ​/ 2))</​code>​+                min(0.2, 0.* (număr_puncte_din_meci_vs_pulsar3 / 2)) + 
 +                min(0.1, 0.1 * (număr_puncte_din_meci_vs_pulsar4 ​/ 2))</​code>​ 
  
 ===== Etapa 4 ===== ===== Etapa 4 =====
Line 133: Line 190:
 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 :-). 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?​=== ===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.+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, ​tipul de șah "3 checks"​ este diferit ​de șahul normal astfel că un engine care joacă șah normal va pierde destul de sigur împotriva unuia specializat. 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 imi aleg coechipierii?​===
 Cum vrei, pe baza oricăror criterii crezi tu că sunt importante. Cum vrei, pe baza oricăror criterii crezi tu că sunt importante.
pa/regulament-proiect-2021.1614858922.txt.gz · Last modified: 2021/03/04 13:55 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