In che modo Syzygy memorizza le sue informazioni?


10

Dalla lettura di tutto ciò che ho trovato finora, so che Syzygy utilizza sia i file win / draw / loss che i file distance-to-zero, ma non ho trovato alcuna informazione sul formato di file interno utilizzato da questi file. Sto cercando la spiegazione grintosa di basso livello.

Risposte:


13

Poiché non esiste un'unica pubblicazione completa, si basa sul codice di sondaggio , sul generatore e su varie spiegazioni di Ronald de Man (l'autore del generatore).


Quando si sondano praticamente tutti i tablebase (ovvero la grande mappa hash compressa):

  1. La posizione è normalizzata ...
  2. ... mappato su un indice intero.
  3. L'indice viene cercato in una tabella che identifica a quale "blocco" appartiene.
  4. Il blocco viene decompresso fino a quando non è possibile recuperare le informazioni per l'indice.

Quindi di solito c'è del codice "esterno" del sondaggio, almeno per risolvere acquisizioni passanti.


A partire dal codice esterno per WDL. Le tabelle Syzygy utilizzano un'ottimizzazione basata sulla seguente osservazione: Se una posizione ha una cattura che raggiunge un valore particolare (ad es. Sta vincendo), allora la posizione stessa ha almeno quel valore (ad es. Sta vincendo). In questo caso la tabella può memorizzare un valore inferiore arbitrario, a seconda di quale sia la migliore per la compressione, e questo può essere facilmente corretto controllando i sottotitoli per le acquisizioni.

Per ottenere una DTZ, è necessario eseguire prima una sonda WDL. Se la posizione viene disegnata, DTZ è 0 e la tabella può memorizzare qualsiasi cosa, a seconda di quale sia la migliore per la compressione. Se la mossa migliore è stata una cattura (che possiamo ricordare dalla sonda WDL), allora la DTZ è +/- 1 o +/- 101 a seconda della WDL, e la tabella può ancora memorizzare qualsiasi cosa, qualunque sia la migliore per la compressione.

Le tabelle pedonali contengono 4 sottotitoli, uno per ciascun file del "pedone principale" (dopo la normalizzazione).

Le tabelle (sotto) WDL sono a due facciate, ovvero contengono essenzialmente due tabelle separate per ciascun lato del gioco finale (a meno che il materiale non sia simmetrico).

Le tabelle DTZ memorizzano solo un lato da spostare. Pertanto potrebbe essere necessaria una breve ricerca a 1 strato per calcolare il DTZ per l'altro lato.


(1) Informazioni sulla normalizzazione: ci sono molti modi per farlo e non è facile dire in anticipo quale porterà alla migliore compressione. Il generatore prova solo diverse permutazioni. L'ordine finale dei pezzi è memorizzato nell'intestazione del file della tabella.

(2) Alcuni combinatori. La sfida non è avere grandi lacune per posizioni impossibili. Sebbene sia piuttosto complicato, non penso che Syzygy faccia qualcosa di speciale qui. Concettualmente, pezzi o gruppi di pezzi vengono posizionati sul tabellone nell'ordine specificato nell'intestazione.

(3) I valori compressi sono memorizzati in blocchi. La dimensione del blocco è specificata nell'intestazione della tabella. La tabella che associa gli indici ai blocchi è scarsa, quindi consente di saltare molto vicino al blocco corretto e quindi richiede una breve scansione in avanti o indietro per trovare il blocco esatto. Un blocco può memorizzare valori per un massimo di 65536 posizioni.

(4) Le tabelle Syzygy utilizzano la compressione personalizzata basata su RE-PAIR . Una caratteristica importante è che in realtà consente di sfruttare le opportunità di memorizzare valori arbitrari identificati in precedenza. La decompressione è molto rapida e può arrestarsi non appena il valore per l'indice desiderato è disponibile.

Facoltativamente, le tabelle DTZ possono richiedere un altro passaggio f (wdl, valore memorizzato) = valore reale. Questa mappa DTZ aggiuntiva è indicata nell'intestazione della tabella ed è essa stessa una tabella con voci a 8 bit. (Stranamente questo si è rivelato insufficiente per i giochi finali a 7 pezzi, anche con pedine, quindi ora c'è un altro flag che abilita le voci a 16 bit).

Per i valori DTZ, se il generatore ha determinato che tutti i valori di una tabella sono inferiori a 100, non sono necessari conteggi di mezzo movimento precisi per garantire un gioco perfetto. Invece, imposta un flag nell'intestazione della tabella e arrotonda le mezze mosse a quelle complete per risparmiare spazio.

Inoltre, chiaramente non è necessario memorizzare il segno o un offset aggiuntivo di +/- 100 per i finali maledetti, poiché ciò può essere dedotto dal valore WDL.

Poiché la decompressione è molto rapida, non è necessaria una cache. Invece i motori possono fare affidamento sulla cache della pagina dei sistemi operativi per archiviare blocchi (ancora compressi).


Le tabelle da 6 pezzi contengono informazioni WDL e DTZ per 3.787.154.440.416 posizioni uniche in 150 Gigabyte, quindi ~ 0,3 bit per posizione.

Tutto sommato, le tabelle Syzygy sono migliorate rispetto ai precedenti formati di tablebase in almeno 3 di queste aree, rendendolo un formato molto compatto e veloce. Sorprendentemente anche il generatore è abbastanza veloce.

E, naturalmente, usare DTZ50 è una scelta pragmatica, perché si tratta di informazioni sufficienti per fare progressi in modo affidabile e consentire un gioco perfetto (risultato wrt.) Sia con che senza la regola delle 50 mosse. Tuttavia, in base alle modifiche a Cfish pubblicate finora (RdM sta ora lavorando su tabelle DTM), molte delle tecniche si applicheranno anche a DTM.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.