Newsgroup: it.hobby.scacchi
Titolo: Per i programmatori di finali: un'osservazione curiosa

Occupandomi di programmi per risolvere i finali di scacchi mi sono
imbattuto in un'osservazione  IMO curiosa, che volevo comunicare almeno
a quelli a cui può interessare (mi scuso con gli altri :-)).
Per creare la tabella per un dato finale si deve generare in memoria un
vettore di byte (il programma tbgen di Nalimov ne genera molto
opportunamente 2), ciascuno dei quali rappresenta una disposizione dei
pezzi di quel finale sulla scacchiera. Non tutti i byte corrispondono a
disposizioni possibili e quindi il programma dovrà inizialmente marcare
tali  byte per non elaborarli nei calcoli successivi.
Ad esempio, oltre ad eliminare le disposizioni simmetricamente
equivalenti,  non è possibile una disposizione in cui il Re avversario
sia sotto minaccia dei pezzi di colui che deve muovere, oppure che un Re
sia soggetto ad uno scacco triplo o più.
Ma l'osservazione curiosa, che ovviamente ha prodotto un crash nel mio
programma,  è che anche uno scacco doppio può essere impossibile, perché
uno scacco doppio è sempre uno scacco di scoperta, e di conseguenza non
può mai essere dato né da due pezzi identici, né da Regina e Torre lungo
una riga/colonna, nè da Regina e Alfiere lungo una diagonale. In pratica
la Regina non può minacciare nello stesso modo con cui minaccia l'altro
pezzo.
Già, ma c'è un'eccezione alla regola e se ne dovrebbe tenere conto nei
finali con pedoni: il caso del pedone che mangiando di sbieco venga
promosso a Torre o Regina, scoprendo il Re avversario ad un'altra Torre
o Regina e minacciandolo contemporaneamente.
Mi scuso se vi ho annoiato.
Guido
--
Posted from 
smtp1.libero.it
 [193.70.192.51]
via Mailgate.ORG Server - 
http://www.mailgate.org

 a quelli a cui può interessare (mi scuso con gli altri :-)).
.....[].....
...interessante... anche se non ho capito che vuoi dire;;  !!!!
(in effetti dici che devi generare tutte le possibili combinazioni di mosse
a partire da una posizione di finale,,, e che esistono posizioni
"eccezionali" ?? hu?)
:)Julian//



 Julian E.Spina ha scritto:




Ho riletto il mio testo e non riesco a capire la tua difficoltà
di interpretazione :-).


Prendiamo un finale semplice come rdr (o kqk all'inglese).Parlando in
termini generali del finale dirò che questo finale ha una certa

composizione
, cioè è composto da Re bianco, Regina
bianca e Re nero.


Prescindendo dalle regole degli scacchi io posso disporre questi tre
pezzi sulla scacchiera in:


 64*63*62 = 238.266     
posizioni
 (si
può anche usare il termine disposizioni)


Però se incomincio a ragionarci sopra sulla base delle regole
degli scacchi, scopro che il primo pezzo (per comodità il Re bianco),
può occupare solo 10 caselle (a1,b1,c1,d1,b2,c2,d2,c3,d3 e d4) nel
senso che con operazioni di simmetria, qualunque sua posizione può
essere riportata ad una di queste celle.


(Nota per chi conosce le matrici: se si interpreta la simmetrizzazione
come applicazione alla scacchiera di operatori, vi sono 8 operatori, uno
dei quali è l'identità, mentre degli altri sette, ben cinque
sono involutori e gli altri due sono reciprocamente involutori. Matrice
involutoria: tale che  A A
-1
 = I).


Quanto dico vale solo per i pezzi degli scacchi, perché la presenza
di pedoni porterebbe ad avere una sola simmetria ed il Re bianco potrebbe
disporsi solo su 32 caselle, cioè tutte le caselle delle colonne
a,b,c e d.

Perciò, riprendendo il discorso, le (dis)posizioni  sono
solamente:


10*63*62 = 39.060


Ma seguendo i ragionamenti di Nalimov, autore delle tablebases freeware
TBGEN, se il secondo pezzo è il Re nero, allora si vede che Re bianco
e Re nero non si dispongono in 10*63 = 630 modi diversi, ma solo in 462,
sempre per ragioni di simmetria e tenendo conto che i Re non possono essere
vicini, e quindi le (dis)posizioni sarebbero solo 462*62 = 28.644.


Ora se in questo finale consideriamo il caso di mossa al Nero, la Regina
bianca potrà collocarsi in qualsiasi posizione; se possiedi i file
dei finali di Nalimov, noterai che la dimensione in byte del file kqk.nbb
(il "b" finale indica la mossa al Nero), è esattamente pari a 
28.644 byte (poiché  le "broken positions" che leggi nel file
ASCII kqk.tbs sono nulle, altrimenti andrebbero sottratte).

 

Nella realtà i casi differenti sono di meno ed esattamente 28056.
Ho scritto in proposito su CCC (Computer-Chess Club) e Nalimov mi ha dato
ragione, sostenendo però che per semplicità di programmazione,
non è stato preciso, dato che nulla cambia sulla correttezza pratica
dei suoi finali.


Invece a me la precisione serviva per controllare la correttezza dei

miei programmi
 :-).


Come vedi partendo da 238.266 siamo arrivati a solo 28.056 casi differenti,
però il problema sta nel fatto che la dimensione fisica del file
è sempre maggiore del minimo necessario. Ciò dipende dal
fatto che, non potendo salvare in un byte l'informazione sulla (dis)posizione,
tale informazione deve essere associata all'indice con cui mi indirizzo
sulla tablebase. Nalimov ha già fatto i salti mortali per calcolare
l'indice in modo da ridurre le dimensioni dei file, ma le regole degli
scacchi impediscono di raggiungere il limite massimo, eccetto che per pochissimi
semplici casi.


Ritornando al mio iniziale intervento, io ero stato colpito dal fatto
che nessun scacco doppio poteva essere dato da due pezzi identici, tranne
il caso eccezionale di cui avevo parlato, e questo ragionamento mi serviva
per marcare come scacchisticamente illegali tali situazioni e quindi evitare
di calcolarle.


Spero di non aver complicato ulteriormente il problema.


Ciao

Guido

 


 Guido
ciaoz! No, non hai complicato --- piu' che altro non capivo dove stava
il "fuoco" del tuo post precedente!!
Grazie delle info aggiuntive, cmq.
Julian//


Oops...


Parlando di simmetrie negli scacchi avevo scritto:


"Matrice involutoria: tale che  A A
-1
 = I".


Leggasi: "Matrice involutoria: tale che  A A = I"


Guido