KULT Underground

una della più "antiche" e-zine italiane – attiva dal 1994

Il nano che gioca a scacchi

5 min read

Il nano che gioca a scacchi

Quasi quattro secoli fa il gioco degli scacchi godeva già di una grande diffusione anche in Europa ed era noto per le sue analogie con le battaglie reali. Si dice che per anni alle corti dei re un grande maestro di scacchi avesse esposto un marchingegno (rigorosamente meccanico) capace di giocare con un opponente umano, vincendo sistematicamente. In realtà (ma questo si seppe soltanto molti anni dopo) si trattava di un sofisticato meccanismo falso che mascherava il posto in cui un nano abilissimo giocatore era in grado di muovere i pezzi dall’interno del mobile che simulava il meccanismo.
Per molti versi di fronte a un programma che gioca a scacchi ci troviamo di fronte ad una situazione analoga. Se proviamo a smontare gli elementi che costituiscono un software scacchistico ci possiamo rendere conto che non si tratta né di magia né di sofisticatissimi processi di intelligenza ricostruita artificialmente.
Va notato che di fronte all’empasse della scienza nella realizzazione di veri modelli capaci di ragionamento, pensiero autonomo, capacità critica e decisionale, la comunità dei ricercatori ha scelto di considerare intelligenza artificiale qualcosa di molto più primitivo di quanto ci si aspettava verso la fine degli anni sessanta quando questa branca della ricerca ha cominciato a fare capolino dai laboratori di matematica e scienza dell’informazione di tutto il mondo.
Si racconta che Marvin Minsky, universalmente riconosciuto come il padre dell’intelligenza artificiale, ogni volta che uno dei suoi studenti del MIT (Massachusset Institute of Technology) lo chiamava entusiasta per mostrargli un nuovo algoritmo di AI gli domandava se era in grado di fargli il caffè e poi si allontanava sorridendo e scrollando la testa.
Oggi possiamo parlare di intelligenza artificiale, nel nostro caso applicata ai programmi di scacchi non tanto perché si tratta di un obiettivo raggiunto ma perché i risultati di cui oggi si dispone sono considerati unanimemente tali.
Un programma che gioca a scacchi in primo luogo sfrutta le enormi capacità di calcolo offerte dall’elaboratore, per cui sicuramente potrà sviluppare tutte le possibilità di gioco in modo più completo e veloce di quanto possa fare un giocatore umano. Questa capacità consente al programma di far fronte all’esperienza del giocatore sopperendo all’impossibilità di effettuare una vera e propria valutazione del gioco in base a parametri che non siano strettamente legati alle sessantaquattro caselle.
Ciò che ci interessa comprendere, del meccanismo di gioco del nostro generico programma di scacchi non sono le caratteristiche in sé degli algoritmi oppure le sofisticazioni messe a punto dal team di programmatori che l’ha realizzato, perché una dissertazione tecnica a nulla giova né aiuta ad entrare nella mentalità di gioco di una macchina pensante. Prendendo in analisi un software scacchistico mediamente sofisticato, proviamo a considerare quali sono i parametri che possiamo controllare quando ne personalizziamo il profilo; questo ci può aiutare molto a capire su quali basi si articola il meccanismo contro cui stiamo giocando. I primi programmi mettevano a disposizione opzioni molto semplici, tuttavia si fondavano sulle stesse basi. Chiunque abbia giocato con una delle scacchiere della famiglia Chess Challenger, uno dei primi automi per il gioco degli scacchi ricorderà sicuramente il binomio fra livello di gioco e tempo a disposizione per ciascuna mossa.
Dunque un primo elemento è proprio il tempo di elaborazione; maggior tempo l’elaboratore avrà a disposizione e più risulterà difficile da battere, perché potrà sviluppare un albero di possibilità di gioco per ogni mossa sempre più ampio. Tanto peggio se attiviamo anche l’opzione Hash. Possiamo scegliere di configurare il computer da un livello principiante fino a intermediario e poi… intervengono i secondi a disposizione per ogni mossa (su cui influisce significativamente la velocità del processore). Le altre opzioni di personalizzazione del gioco ci forniscono un’altra utile indicazione degli elementi su cui si basa il computer per elaborare le mosse.
Sicurezza del re, mobilità dei pezzi e struttura dei pedoni
; questi tre elementi corrispondono ad altrettante strutture di gioco su cui il programma può essere configurato, ovvero decidiamo quanto dovrà essere tenuto in conto ciascuno di questi parametri.
Un altro aspetto su cui possiamo applicare una personalizzazione è il peso di ogni pezzo; possiamo stabilire l’importanza di pedoni, alfiere, cavallo, torre, re e regina. In questo modo ad esempio sarà possibile alterare la convenzione secondo cui il pedone è il pezzo meno importante o semplicemente dare una maggior importanza alla torre piuttosto che al cavallo e così via.
Ma ora proviamo a riflettere un attimo sul significato di questi parametri (più sarà sofisticato e complesso il programma più parametri avremo a disposizione).
Nel corso di una partita a scacchi, ci troviamo continuamente a dover effettuare delle scelte, condizionate in parte dalla strategia di gioco che stiamo perseguendo ed in parte dalle mosse dell’avversario; quella del computer – per quanto di fatto torni estremamente utile – risulterà essere una finta capacità decisionale, in quanto la mossa migliore sarà scelta in base alla configurazione di gioco e alle mosse possibili che si presentano a partire da una determinata posizione di gioco. Un buon programma per il gioco degli scacchi (per riprendere l’esempio di Minsky), non è detto che sappia giocare a scacchi, piuttosto è in grado di elaborare risposte molto sofisticate che dipendono strettamente dalle nostre mosse, ma sempre predefinite e in qualche modo statiche.
Prendiamo a prestito un piccolo esempio dalla matematica; oggi i computer sono in grado di generare sequenze di numeri casuali estremamente lunghe a partire da informazioni come ad esempio l’orologio interno della macchina, ma i primi linguaggi di programmazione utilizzavano semplicemente i numeri di Fibonacci. Questo matematico già quasi tre secoli fa aveva complilato un’ampia tabella di numeri casuali, da utilizzare nei calcoli matematici; si tratta di una sequenza abbastanza lunga di numeri che non hanno nessuna relazione fra loro. Il "trucco" è proprio che non sappiamo quale numero il computer sta utilizzando, così come è estremamente difficile per un giocatore prevedere la mossa di un computer che gioca a scacchi pur conoscendo i meccanismi che produrranno la risposta.
Ciò che ci interessa concludere non è distruggere l’idea dei programmi di gioco, ma semplicemente ridimensionarla pensando che ci troviamo di fronte a strumenti molto complessi e sofisticati ma perfettamente spiegabili, degli ottimi maestri con cui confrontarsi ma non certo dei maghi. Un ottimo elemento di integrazione è utilizzare i programmi di gioco come palestra di studio delle parti in cui si divide una partita per poter affrontare con maggior conoscenza di causa partite vere contro giocatori in carne ed ossa capaci di commettere errori e trarci in inganno, che perseguono realmente una strategia
attirandoci in tranelli e trabocchetti per raggiungere il loro intento.

Enrico Miglino

Commenta