CoolFace
Apppublic

kiskujab1/coke-nitro-lichess-bot

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
App README

Coke Zero 10.0 ♟️

Nulláról, C++17-ben írt UCI sakk-engine, ami a klasszikus (kézzel hangolt értékelésű, HCE) megközelítés modern eszköztárát igyekszik teljesen kihasználni. Bármelyik UCI-kompatibilis felülettel (Arena, Cute Chess, BanksiaGUI, lichess-bot) használható.

10.0 (ARM64 NEON SIMD): a teljes NNUE-számítás hardveresen vektorizált Apple Siliconon. A forward pass fő szűk keresztmetszete (512→32 réteg) NEON vdotq_s32 hardveres int8 dot-producttal megy, 4 független akkumulátorral (latencia-rejtés) és kimenet-blokkolással (4× kevesebb aktiváció-load); az akkumulátor-frissítés (vaddq_s16/vsubq_s16) szintén NEON. Az egész #ifdef __ARM_NEON ágban, skalár fallbackkel — a számítás bitre azonos a skalárral (egész aritmetika), csak gyorsabb: az NNUE bench NPS ~820k → ~1.0M (Apple M2). A v9 minden funkciója (inkrementális akkumulátor, skála-kalibráció) változatlan. 9.0 (NNUE-korszak): teljes NNUE-alrendszer — HalfKP(Friend) háló (41024→256x2), inkrementális akkumulátor + forward pass, UseNNUE / NNUEPath opciók. A coke_net.nnue (nn-62ef826d1a6d, klasszikus Stockfish HalfKP) élesben betöltődik és fut; setoption name UseNNUE true -> neurális kiértékelés. A betöltő fail-safe: ismeretlen formátumnál a kiváló HCE-n marad. A v8 minden funkciója változatlan. - Inkrementális akkumulátor: a do_move/undo_move a szülő-akkumulátorból olcsó deltákkal származtatja a gyermeket (a királylépés az adott perspektívát refresheli), így keresésenként lényegében csak a gyökér kap teljes refresht. Per-szál akkumulátor-verem (a Lazy SMP szálak saját Position-másolaton dolgoznak) — bitre azonos a teljes refresh-sel. - Skála-kalibráció: a nyers HalfKP-kimenetet a HCE centipawn-skálájához igazítja (gyalog ≈ 100, vezér ≈ 1014), így a keresési paraméterek helyes nagyságrendben kapják az NNUE-értéket. `` setoption name UseNNUE value true # neurális háló be (alap: HCE) setoption name NNUEPath value coke_net.nnue ` Korábbi mérföldkövek: **v2** ponder, **v3** lazy eval, **v4** PolyGlot könyv, **v5** continuation history, **v6** Lazy SMP + singular + capture history, **v7** Syzygy, **v8** intelligens időkezelés, **v9** NNUE (inkrementális akkumulátor + skála-kalibráció). A v1` és minden korábbi mappa érintetlen.

Végjáték-adatbázis (Syzygy)

# A közös ../Syzygy mappa az alapértelmezett (nincs verziónként duplikálva):
setoption name SyzygyPath value ../Syzygy     # felülírható tetszőleges úttal

Többszálúság (Lazy SMP)

setoption name Threads value 4     # 4 keresőszál a közös hash-táblán
setoption name Hash value 512      # nagyobb TT ajánlott több szálhoz

Fordítás

bash
make            # optimalizált build -march=native -O3 -flto mellett -> ./coke-zero-v9
make portable   # hordozható build (march=native nélkül)
make perft      # lépésgenerátor helyességének ellenőrzése (perft tesztek)
make bench      # rögzített benchmark (csomópontszám / sebesség)

Csak Apple clang / g++ kell, külső függőség nincs. (CMake nem szükséges.)

Használat

UCI motorként indítható egy GUI-ból, vagy közvetlenül a terminálból:

./coke-zero-v9
uci
position startpos moves e2e4 e7e5
go movetime 3000

Pondírozás (gondolkodás az ellenfél idejében)

position startpos moves e2e4
go ponder wtime 60000 btime 60000   # háttérkeresés a várt válaszra, óra NEM ketyeg
ponderhit                           # az ellenfél a várt lépést játszotta -> óra indul
# (vagy 'stop', ha mást lépett -> azonnal kiadjuk az eddigi legjobb lépést)

Hasznos saját parancsok a szabványos UCI mellett:

ParancsHatás
dTábla és FEN kiírása
evalStatikus értékelés az aktuális állásban
go perft NPerft (lépésszámlálás) N mélységig, lépésenként
benchBenchmark futtatása

Támogatott go opciók: wtime btime winc binc movestogo movetime depth nodes infinite ponder perft. Beállítható opciók: Hash (TT mérete MB-ban, 1–65536), Ponder (képesség jelzése), Threads.

Architektúra

src/
├── types.h        alaptípusok, lépés-kódolás (16 bites Move)
├── bitboard.*     bitboard-műveletek, magic bitboard támadások (futásidőben generált magicek)
├── position.*     állásreprezentáció, make/unmake, Zobrist-hash, SEE, gives_check
├── movegen.*      pszeudo-legális generálás (captures/quiets/evasions) + legalitás-szűrés
├── tt.*           transzpozíciós tábla (4-utas cluster, korosítás, mélység-eltolás)
├── eval.*         tapered HCE: PeSTO PST + mobilitás, királybiztonság, gyalogstruktúra...
├── search.*       PVS alfa-béta (lásd lent)
└── uci.cpp        UCI protokoll, perft, bench, belépési pont

Tábla és lépések

  • —Bitboard reprezentáció, magic bitboard csúszó-figura támadások.
  • —Legális lépésgenerálás: pszeudo-legális captures/quiets/evasions, majd pin- és király-biztonsági szűrés (Position::legal). Sakk esetén dedikált evasion-generálás.
  • —A helyességet a make perft igazolja (Kiwipete és a többi standard tesztállás bitre pontos).

Keresés (search.cpp)

  • —Iteratív mélyítés aspiration window-okkal
  • —PVS (principal variation search) + transzpozíciós tábla
  • —Null-move pruning (mély csomóban verifikációval)
  • —ProbCut (probability cutoff): értékes ütés redukált keresésben béta fölött → vágás
  • —Late Move Reductions — dinamikus, history/cont-hist + taktikai kontextus (sakk, ütés, cutNode, ttCapture, PV, improving) szerint hangolt redukció
  • —History-pruning: kis mélységben a történelmileg rossz csendes lépéseket elhagyjuk
  • —Reverse futility (static null move), futility pruning, late move pruning, razoring
  • —SEE-alapú metszés csendes és ütő lépésekre
  • —Singular extension, sakk-kiterjesztés, mate-distance pruning
  • —Quiescence search SEE- és delta-metszéssel
  • —Lépésrendezés: TT-lépés → jó ütések (MVV-LVA + SEE) → killer → countermove → history → rossz ütések
  • —Ismétlés / 50-lépés szabály szerinti döntetlen, idő-menedzsment

Értékelés (eval.cpp)

  • —Tapered eval közép- és végjáték között (game phase alapján)
  • —PeSTO anyagi értékek és piece-square táblák
  • —Mobilitás, királybiztonság (támadó-súlyozás + gyalogpajzs), futópár
  • —Gyalogstruktúra: szabadgyalog (rang szerint), izolált, duplázott
  • —Bástya nyílt / félnyílt vonalon, tempó, elégtelen anyag → döntetlen

Megjegyzés az erősségről

A motor egyszálas. A keresés tipikusan ~20 ply mélységet ér el pár másodperc alatt közepjátékban, és a klasszikus taktikai teszteket (pl. Win At Chess) magas arányban megoldja. További erősítési lehetőségek: Lazy SMP (több szál), NNUE értékelés, megnyitáskönyv, Syzygy végjáték-táblák, és az értékelő/keresési paraméterek SPSA-hangolása.