Newsgroup: it.hobby.scacchi
Titolo: Ma i programmi imparano?

Mi sono chiesto se e quanto siano efficaci i meccanismi di
"learning" presenti in alcuni programmi di scacchi ed in
che modo sia possibile misurarne l'effetto.
Se il "learning" funziona è lecito attendersi un miglioramento
graduale e misurabile della forza di gioco del programma in
funzione del numero delle partite giocate: piu' partite,
piu' apprendimento, migliori risultati.
Da questa premessa deriva che se faccio giocare un programma
con il learning attivo, contro lo stesso programma senza
learning, dovrei osservare, dopo un certo numero di partite,
una prevalenza crescente del primo sul secondo.
Ho, quindi, preso un programma con l'opzione "learn" attivabile:
Phalanx versione XXI. L'ho installato in due diverse directory
e, per evitare errori nell'assegnazione dei punteggi, ho
modificato il nome del modulo eseguibile: Phalsi per il programma
che utilizza il learning, Phalno per quello che non lo utilizza.
Successivamente, con l'ausilio di Winboard, ho fatto giocare
al programma una serie di match, di sei partite ciascuno:
60 mosse, 5 minuti.
Nel file Winboard.ini ho inserito i programmi (Phalsi e Phalno)
con l'opzione learning (-l) attivata o disattivata.
Per evitare problemi di contesa della CPU ho, inoltre,
disattivato il "permanent brain" (-p). 
L'hash table (-t), per ambedue le versioni, e' di 6 MB:
"
/firstChessProgramNames="GNUChess
\"Phalsi -p- -l+ -t6000\" /fd=\"C:\\Scacchi\\Phalsi\"
\"Phalno -p- -l- -t6000\" /fd=\"C:\\Scacchi\\Phalno\"
"
/secondChessProgramNames="GNUChess
\"Phalsi -p- -l+ -t6000\" /sd=\"C:\\Scacchi\\Phalsi\"
\"Phalno -p- -l- -t6000\" /sd=\"C:\\Scacchi\\Phalno\"
"
Dopo aver impostato Winboard.ini ho iniziato i match
mediante una piccola procedura batch:
c:\winboard\winboard.exe /mg 6 /sgf c:\rating\learn.pgn /tc 5 /mps 60
Dopo 20 match (120 partite) ho controllato i risultati 
delle partite nel file learn.pgn, con l'utility Pgnres:
Results from file learn.pgn:
No. Name     Win Draw Loss Score Games    %
------------------------------------------------------------
  1 Phalno   +53   =21  -46    63.5   120   52.9%
  2 Phalsi    +46   =21  -53    56.5   120   47.1%
Total Games:     120
White Wins:        53 (44.2%)
Black Wins:        46 (38.3%)
Draws:                21 (17.5%)
 
Ma piu' del risultato globale e' importante la sequenza 
dei punteggi. Ecco i punti ottenuti da Phalsi:
1   3,5/6     11  2
2   2           12  3,5
3   2,5        13  4,5
4   4,5        14  4
5   2           15  2
6   5           16  2
7   1           17  2,5
8   0           18  4,5
9   4           19  1
10  3           20  4
Ho analizzato questi risultati con un indice statistico: 
il coefficiente di correlazione (si trova tra le 
funzioni statistiche di Excel o di altri fogli
elettronici).
Questo indice (che puo' variare da -1 a +1) misura la
dipendenza tra due variabili quantitative.
Il valore -1 indica massima dipendenza negativa 
(al crescere della prima corrisponde il diminuire 
della seconda), valori prossimi a zero indicano indipendenza, 
il valore +1 segnala massima dipendenza positiva.
Nel nostro caso un valore vicino a +1 indicherebbe che 
con il progredire dei match (1, 2, 3, ...) progrediscono, 
in media, i punteggi di Phalsi. 
Il coefficiente di correlazione tra il numero ordinale 
dei match e la successione dei risultati di Phalsi e'
risultato di 0,03373. Molto prossimo allo zero!
Tutto questo (ma voi direte che si vedeva benissimo ad occhio!)
indica che il learning di Phalanx, con un numero contenuto di 
partite, non produce nessun incremento della forza di gioco.
Riconosco che 120 e' un numero molto limitato di partite e 
che la correlazione potrebbe divenire significativamente 
positiva continuando il test. 
D'altra parte dovete convenire che continuare a lungo 
l'esperimento e' oltremodo palloso. La correlazione, 
in questo caso, raggiunge rapidamente +1!! :))
Potrebbe essere piu' interessante provare con altri
programmi: Comet e, soprattutto Crafty che, 
suppongo, disponga di algoritmi piu' sofisticati.  
Per finire c'e' un altra cosa che mi sembra interessante:
la grande variabilita' dei risultati. 
Phalsi ha ottenuto 1/12 nei match 7 e 8 
e 8,5/12 nei match 13 e 14. 
Dal cappotto alla superiorita' netta! 
Si dimostra,ancora una volta, quanto sia illusorio 
ricavare indicazioni sulla forza di gioco relativa 
senza un numero di partite molto molto elevato!
 
Se qualcuno fosse interessato ai meccanismi di apprendimento 
dei giochi elettronici puo' trovare informazioni e materiale 
(anche per gli scacchi) nel sito: "Machine learning in games" 
in: 
http://forum.swarthmore.edu/~jay/learn-game/index.html
Ciao a tutti!
Alberto

una prevalenza crescente del primo sul secondo.
Per quel poco che so sulle reti neurali, quindi sul learning, penso
che una discussione seria sull'argomento sia impossibile tra profani.
Learning e' una parola troppo vaga. Esistono diversi tipi ed in ogni
caso si abbisogna di un numero di "esercizi" molto elevato.
Che io sappia, l'Elsag (che utilizza reti neurali per produrre ocr che
ha venduto alle poste di tutto il mondo) ha database vastissimi sui
quali "esercita" i propri software. 120 partite sono quindi proprio un
infinitesimo e giungere a conclusioni, anche se ben vestite con
correlazioni varie, e' pura illusione (almeno per quel che ne so io).

 correlazioni varie, e' pura illusione (almeno per quel che ne so io).
Aggiungerei che probabilmente questa capacita' di imparare sara' un
qualcosa del tipo che il programma cerchera' di capire che ha commesso
un errore "a posteriori" per battere strade diverse qualora si dovesse
ritrovare nella stessa posizione: questo algoritmo e' di banale
implementazione (e permette di scrivere sulla scatola che il programma
"impara dall'esperienza") ma ha la forte limitazione che il sw non
riconosce posizioni *simili* ma solo posizioni *identiche* e, senza
capire il perche' dell'errore, si limita a non ripeterlo.
Approccio che e' diverso dal processo di apprendimento di una rete
neurale e che comunque necessita anch'esso di un gran numero di
esperienze per poter produrre qualche eventuale risultato.
Invece, e questo da subito, le righe di codice che implementano il
processo di apprendimento usano parte del tempo di CPU altrimenti
destinato al gioco in quanto tale, non mi stupirei piu' di tanto nel
vedere una leggera prevalenza della versione statica.
Ciao!
Marco Bordin

 vedere una leggera prevalenza della versione statica.
Se ti riferisci ai risultati del test su Phalanx (63,5/120) 
la prevalenza della versione statica, considerando la grande 
variabilita' dei risultati, mi sembra troppo esigua per trarre 
conclusioni su un inefficiente utilizzo della CPU.
Tanto piu' se l'algoritmo di learning, come tu dici, e' davvero 
cosi' banale e, di conseguenza, non dovrebbe consumare CPU in 
modo significativo.
Ciao
Alberto      

 e' pura illusione
Su questo punto il mio dissenso e' piu' radicale. Il numero
di partite necessarie perche' l'algoritmo produca risultati 
e' essenziale per stabilirne l'efficacia.
Ed e' essenziale non solo dal punto di vista pratico 
(e qui penso che siamo d'accordo) ma anche da quello
teorico (forse qui non lo siamo piu').
Il learning *deve* produrre risultati e i risultati *devono*
essere misurabili altrimenti non ha nessun significato. 
Potra' essere molto efficace (poche centinaia di partite) 
o poco efficace (decine di migliaia di partite) ma se 
il numero di partite necessarie per avvertirlo fosse talmente 
elevato da impedire una misura, allora (questa e' la mia opinione) 
non solo e' inefficace ma anche inesistente.
 
Voglio anche chiarire che non sono affatto scettico sul
learning in generale. Credo che non solo sia possibile ma 
sia efficace in molte applicazioni. Nella lettura ottica
dei caratteri manoscritti, come tu dici, il software OCR 
(o ICR) viene "allenato" a riconoscere le diverse calligrafie. 
I risultati ci sono e sono misurabili statisticamente.
Anche in alcuni giochi funziona egregiamente. 
Negli scacchi, invece, sospetto che i problemi siano diversi 
e piu' complessi.
Avverto un piccolo sarcasmo (ma assolutamente lecito) nella 
frase "anche se ben vestite con correlazioni varie" ma 
la cosa non mi dispiace, anzi stimola la discussione.
Saluti
Alberto
PS Scusami,  ho spedito per errore questo post anche sulla tua e-mail.
 







PS Scusami,  ho spedito per errore questo post anche sulla tua e-mail.
Ops, non l'ho vista ancora...
Forse il nospam-@-nopubblicita' mi ha schermato.

 precalcolate con posizioni ricorrenti.
per quello che so io i programmi che dicono di fare learning fanno solo ed
esclusivamente questo, ovvero aggiornano il loro database di aperture, tutto
cio` perche` non vogliono essere battuti dieci volte con la stessa linea di
apertura. Credetemi, io gestisco una copia di Crazy Bishop su ICC, che non
ha questa capacita`, ed e` pieno di idioti che ti trovano un baco nel tuo
libro di aperture e ti rigiocano poi la stessa linea venti volte spellandoti
100 punti elo sudatissimi.
La questione ha poi avuto origine quando alcuni programmi hanno cominciato
ad avere libri di aperture adattati specificatamente a colpire buchi nei
libri di al;tri programmi professionali per "rubare" punti nei tornei e
nelle partite della SDDF.
Eccezione che io conosco sono un paio di programi basati su reti neurali che
sono capaci di modificare la loro funzione di valutazione dinamicamente.
ciao
Franz

 conclusioni su un inefficiente utilizzo della CPU.
La differenza e' quasi del 6%, percentuale che giudicherei di tutto
rispetto. Casomai quello che e' scarso IMHO e' il numero di prove, se
venisse confermata la stessa percentuale su migliaia di partite riterrei
che il test qualcosa e' riuscito a provare.
Ciao!
Marco Bordin

che il test qualcosa e' riuscito a provare.
Io non sono molto convinto che per verificare se l'apprendimento
legato alle posizioni invece che ai concetti posizionali funziona
servano grandi masse di partite.
A mio parere e' ben piu' rapido e probante selezionare un numero
ridotto di partite in cui ad un certo punto il computer non solo non
gioca la mossa giusta, ma sbaglia completamente la valutazione della
posizione.
A questo punto si crea una piccola libreria d'apertura su misura, per
trasportarlo in quelle posizioni, e, giocandogli contro, si giocano le
mosse giuste.
Una volta fatto questo si riproducono le stesse posizioni facendolo
giocare con entrambi i colori e si verifica il suo comportamento.
Il minimo che ci si deve aspettare e' che da difendente eviti i
seguiti che ha "imparato" non essere buoni, il massimo che da
attaccante riesca a trovare i seguiti buoni che prima non era in grado
di vedere.
Nel tempo risparmiato godetevi una bella partita, che e' quasi
sicuramente il prodotto di due lentissimi umani.

Abbandonerei quindi velleita' misuristiche. 8-)
Velleita' misuristiche?! Ho fatto il geometra, ho studiato
Statistica, lavoro all'Istat, vuoi che non conti e misuri! :-)
Pero' anche tu con le reti neurali ti difendi bene. Hai
seguito un corso qualche anno fa ma ti e' rimasto molto
impresso! ;-)
Ciao
Alberto
 

non erro. Paolo Fasce aveva posta tempo fa qualche info a riguardo.
ftp.primonet.it/othello
 in qualche sottodirectory ci sono le Tesi
(othellistiche e scacchistiche).