Newsgroup: it.hobby.scacchi
Titolo: [Per Robitri] Info sui programmi di scacchi

Chiedo scusa se apro un nuovo thread, ma ho qualche problema di
spezzettamento dei thread che seguo, non ho capito perche'.
Mi avevi chiesto delle informazioni sui programmi di scacchi che
usassero algoritmi non brute force.
Ho trovato il testo di Levy "Computer Chess Compendium", edito dalla
Batsford, che e' una vera e propria miniera di informazioni. Sono
descritti numerosi programmi di scacchi con gli algoritmi che li
implementano, e vi sono sezioni specifiche dedicate, per esempio, ai
finali. Il libro e' piuttosto datato, ma per il genere di richiesta che
mi hai fatto credo sia ancora il meglio disponibile. Vi e' citato
persino l'articolo iniziale di Shannon, un reperto da non perdere
assolutamente.
Ho trovato inoltre numerose fotocopie di articoli, sempre
sull'implementazione di programmi intelligenti, ma (mea culpa) all'epoca
non mi ero annotato la fonte. Ricordo solo che molte venivano dall'ICCA
Journal (International Computer Chess Association, non so nemmeno se
esista ancora), ed altre da riviste specializzate nel campo
dell'intelligenza artificiale.
Non so se e' proprio questo che ti interessa. Per il momento mi limito a
segnalarti questi riferimenti, se poi  vogliamo approfondire il discorso
(eventualmente in forma privata, anche se non credo che questo discorso
sia OT) sono sempre disponibile.
Ciao
Mauro

 sia OT) sono sempre disponibile.
Intanto grazie per la risposta ... cerchero' di reperire i testi cui fai
riferimento.
Quanto l'OT ... credo e spero che questo tipo di argomento possa interessare
anche altre persone.
Io non sono un esperto in programmi di scacchi "intelligenti", ma ho un
certo interesse nel campo delle menti artificiali e piu' in particolare in
IA. Mi sono interesseto piu' di altri aspetti del problema, quali la
comprensione di un discorso e la reazione (logica) al contenuto dello
stesso. Pur avendo interrotto per lungo tempo le mie personali ricerche nel
settore le sto riprendendo in questo ultimo periodo. Purtroppo il poco tempo
libero mi costringe a fare ben poche cose, spero in futuro piu' propizio ...
ancora non dispero e tento :)

 IA. ...(cut)...
Ma il tuo interesse riguarda anche linguaggi di programmazione tipo il Lisp o il
Prolog ?.... alla fine dei conti mi pare che la resa non sia delle migliori....
ciao,
Julian

 Prolog ?.... alla fine dei conti mi pare che la resa non sia delle migliori....
che cosa intendi per "resa"? Un linguaggio di programmazione si valuta in base a
molti parametri. Quali sono quelli che "non sono dei migliori"? (Eventualmente
possiamo proseguire in forma privata se il discorso si allontana troppo dagli
scacchi)
Ciao
Mauro

Mauro Scarpa wrote:

Ops! La mia era una supposizione dettata dal fatto che la riproduzione della logica
umana su di un calcolatore si avvale(*) quasi sempre su di algoritmi espressi in modo
molto....."lontano" dalla logica umana stessa.
Voglio dire, hai presente quei giochetti di logica del tipo: Marco e' il fratello di
Anna che e' la cugina di Paolo che e' lo zio di Mirella .... e via dicendo ? Ebbene
sottolineavo la differenza sostanziale nel gestire (nel ragionare!) cio' in un
linguaggio di programmazione di tipo generico (C/Basic/Pascal/Java) dal gestirlo in un
linguaggio scritto appositamente per implementare forme di AI (Lisp/Prolog/else).....
mi pare di aver letto che nel mondo degli scacchi gli approcci tentati via AI con il
computer non hanno portato molto lontano.... al contrario del logica, sicuramente piu'
primitiva, piu' efficace implementata in linguaggi che prima ho chiamato generici.
    Ebbene, secondo me l'ideale sarebbe avere un mix di entrambi gli strumenti per
codificare una rudimentale logica scacchistica che abbia anche delle prestazioni
accettabili. Non uso il Prolog da forse 10 anni, ma all'epoca dei miei (piccoli!)
esperimenti mi impressiono' molto la differenza nel codificare "logica" rispetto al
C/else...
  Sicuramente interessante!!
Ciao,
Julian
(*)per quanto riguarda i programmi di scacchi commerciali e free e' cosi'


Concordo. Peraltro, tieni presente che bisogna distinguere fra linguaggio e approccio al
problema, nel senso che non e' certo vietato l'approccio AI in C (e nemmeno quello brute
force in LISP). Si dice (e per quella che e' la mia esperienza e' vero) che un programma
in Prolog/LISP richiede una quantità di codice 10 volte inferiore ad uno scritto in C (ed
e' vero, prova a scrivere un algoritmo di derivazione simbolica in Prolog e confrontalo
con uno scritto in C, il secondo e' molto piu' voluminoso)
D'altra parte, il C puo' essere 10/100 volte piu' veloce del prolog. Pertanto, un forte
programma di scacchi e' scritto in C, perche' la sua forza dipende dal 
n.ro
 di posizioni
che riesce a valutare, e non dalle conoscenze scacchistiche che sono estremamente
limitate.
Come dicevo nel precedente thread, gli approcci "intelligenti" agli scacchi sono stati
piuttosto deludenti: se e' vero che alcuni ricercatori sono riusciti a scrivere un
programma che "scopre" i concetti posizionali analizzando partite giocate (non ne ricordo
il nome, ricordo che usava una forma di back reasoning) o che autoadatta la propria
funzione di valutazione usando algoritmi genetici, e' anche vero che questi programmi
vengono regolarmente strinati da gnuchess (che e' la pietra di paragone nel mondo della
ricerca: se il tuo prototipo non batte gnuchess la sua forza di gioco non e' accettabile):
in altre parole questi programmi hanno il concetto di alfiere cattivo e di colonna aperta
come puo' averlo un esordiente, cioe' non supportato da una effettiva forza di gioco e da
una capacità di sintesi.
Per quanto riguarda un linguaggio "intelligente ed efficiente", cioe' che mischi il meglio
dei due mondi, credo che la cosa sia alquanto problematica: l'efficienza del C viene dal
fatto che mima il comportamento della macchina (ragiona in termini di memoria, variabili,
tipi di dato e operazioni elementari su questi) e quindi si puo' tradurre in codice
macchina molto efficiente, mentre l'intelligenza del prolog deriva dal fatto che mima il
ragionamento umano e pertanto si esprime in un modo che non puo' essere direttamente
convertito in codice macchina e deve essere interpretato (la borland ci aveva provato
annio fa col turbo prolog, ma per ottenere la compilabilità in codice macchina aveva
demolito e snaturato il linguaggio, infatti non lo si vede piu' da un pezzo).
Come si applica questo ai programmi di scacchi? In pratica tutti i programmi di una certa
forza usano un algoritmo ideato nientemeno che da Shannon negli anni 50! Shannon (che per
chi non lo conoscesse e' il padre dell'informatica moderna) perse una partita (se volete
la posso postare) in una trentina di mosse applicando il proprio algoritmo contro un
dilettante e tale algoritmo era piu' o meno lo stesso di FRITZ, solo che shannon, dovendo
fare i conti con carta e penna andava in avanti di ... una semimossa. Fritz va oltre le
10. Considera che, a parità di altre condizioni, una semimossa in piu' vale 200 punti ELO
(cioe' se fai un match fra il programma X a profondità n e il progr. X a profondità n+1 la
differenza nel risultato equivale a circa 200 punti Elo, cioe' finisce circa 15 a 5 per il
prg a n+1. Pertanto, piuttosto che diventare matti a cercare algoritmi intelligenti,
meglio aspettare che i computer diventino piu' veloci: quando i computer diventano 30
volte piu' veloci (ogni 8-10 anni) lo stesso programma fa una semimossa in piu' e guadagna
200 punti Elo. La maggior parte dei progressivi guadagni in forza dei programmi viene
dall'hardware, e non certo dalla bontà degli algoritmi.
Ciao
Mauro