Migliora il tuo punteggio Elo!
AIChess
Per capire come è nato AIChess, un passo indietro. Da neolaureato al CISE fui fra i primi a confrontarmi con l’intelligenza artificiale, quando allora era solo un gioco per informatici un po’ visionari. Ho sempre seguito l’evoluzione della materia e un anno fa ho avuto il privilegio di scrivere per Tecniche Nuove un paio dei libri più venduti su ChatGPT.
Il mio sito Internet, albanesi.it, si è occupato per oltre 20 anni di qualità della vita, ma, oggi che la concorrenza in Rete offre molte soluzioni simili, ho deciso di riconvertirlo agli scacchi (sono Maestro di scacchi dal 1995); è nato così AIChess.
Costruire un modello di intelligenza artificiale che svolga un determinato compito (per esempio sostituisca un dietologo o un personal trainer) può costare milioni di euro per due motivi principali. Il primo è che è necessario che utilizzi il linguaggio naturale (l’NLP, il Natural Language Processing, l’elaborazione del linguaggio naturale) e ciò richiede risorse che solo team che stanno alle spalle di modelli come ChatGPT, Copilot o Gemini riescono ad avere. Il secondo è che è necessario fornirgli database di addestramento non solo buoni, ma anche completissimi, per evitare lacune e/o errori.
Nel caso degli scacchi si può ovviare ai due precedenti problemi perché il linguaggio scacchistico è composto al massimo da qualche centinaio di parole (le mosse) e come database di apprendimento si possono usare i database delle partite fra umani. Devono essere scelte solo le partite fra giocatori di un certo livello (è stato scelto un database con entrambi i giocatori over 2200 punti Elo) perché, soprattutto nello studio delle aperture, le statistiche globali (cioè comprensive di tutte le partite conosciute) risentono delle “trappole d’apertura” che, ovviamente, i forti giocatori sanno evitare.
Poi si deve dire a ChatGPT o a un altro chatbot:
- cosa si vuole
- come interfacciarsi con i dati esterni (su cui addestrarsi o collaborare per la risposta).
ChatGPT 5.5:
- segue molto bene prompt complessi;
- mantiene la coerenza per centinaia di varianti;
- ragiona bene quando deve confrontare dati provenienti da fonti diverse (Stockfish + database umano);
- ha una finestra di contesto enorme, quindi è possibile passargli parecchie analisi.
La difficoltà maggiore sta nel:
- Fornire un prompt molto dettagliato
- Dare regole numeriche precise su come fondere Stockfish e database umano
- Indicare una procedura sempre identica per ogni posizione.
In questo modo si ottengono risultati molto coerenti.
La cosa più difficile è stato proprio costruire il prompt. Chi lavora con l’AI usa spesso prompt brevi e troppo sbrigativi, non sa che ChatGPT 5.5 riesce a soddisfare anche prompt molto, molto estesi. Nel caso di AIChess ci sono voluti circa due mesi per avere un prompt molto performante, costituito da ben sei pagine Word!
I libri e i video sulle aperture
Questo punto è trattato in dettaglio in AIChess vs. libri e video sulle aperture.
Perché AIChess
Perché non usare i motori per costruire un repertorio di apertura? Innanzitutto, perché in una certa posizione il motore considera troppe mosse; per esempio, in questa posizione (muove il Bianco):
il motore vede 15 mosse nell’intervallo di 20 centesimi; poiché la priorità delle mosse cambia o può cambiare variando la profondità d’analisi, si dovrebbero considerare tutte, ma così facendo, il repertorio diventerebbe gigantesco e poco utile. Infatti, scopo di un repertorio efficiente è che sia gestibile (memorizzabile) da un umano.
Se andiamo a consultare le statistiche per partite fra giocatori over 2200 si scopre che 5 delle 15 mosse dell’intervallo sopraccitato coprono il 95% delle partite che sono arrivate a quella posizione, le altre non sono state giocate o sono marginali. Addestrare AIChess con un database di partite rende “umane” le scelte del modello.
AIChess è nato per avere finalmente repertori che siano validati sia dalle statistiche fra umani sia dai motori.
AIChess dimostra che:
1 – Non sempre le continuazioni più giocate sono le migliori (quindi non ci si può soffermare solo sul database, una linea molto giocata può essere ridimensionata da una novità teorica trovata dal motore o da una trovata recentemente da un umano).
2 – Non sempre le continuazioni con la statistica migliore sono le migliori. Per esempio, nell’Inglese la variante Drill 1.c4 e5 2.g3 h5?! è l’unica che ha un saldo Elo positivo (è stata giocata anche da superGM), ma il motore le affibbia dopo lunga valutazione un -0.60, che ovviamente viene compensato da un giocatore forte quando incontra uno più debole, anche perché quest’ultimo magari non conosce la variante Drill (se gioca 3.h4 il vantaggio del Bianco scende a 0.20, parità!).
Nella variante Drill Stockfish a profondità > 30 dà vantaggio al Bianco solo per 3.♘f3 (circa 0.60) e 3.♘c3 (circa 0.40).
3 – Non sempre la soluzione migliore proposta dal motore lo è veramente. Spesso cambiando la profondità di analisi (per esempio da 30 a 36) il motore stesso può cambiare idea: questo accade quando di fatto ci sono due, tre o più mosse molto vicine nella valutazione. Quando esiste un intervallo di equivalenza, AIChess aumenta l’importanza delle statistiche fra giocatori per scegliere quella “umanamente” migliore. Le statistiche rendono l’approccio di AIChess più “umano” perché è ormai evidente che un motore è in grado di gestire complessità che un uomo non saprebbe gestire con eguale efficacia.
Impostare (fornire un prompt) AIChess
Per costruire un buon repertorio è necessario impostare bene AIChess, cioè spiegargli cosa vogliamo, passandogli opportuni parametri iniziali e dirgli cosa deve farne. Questo lavoro è la “domanda” che si deve fare ad AIChess, usando un linguaggio che è un sottoinsieme molto ristretto della lingua italiana (per esempio: “crea un repertorio per il Nero dopo 1.e4 e6 con N=30, E=0.10, v=+0.25, Z=10, P=36”; ovviamente poi gli si deve spiegare quando fermarsi)
N dice ad AIChess quando il numero di partite tra umani (superiori a un certo punteggio Elo) rende la statistica significativa al massimo, per esempio N=30. Sotto N, al diminuire del numero di partite per una linea, diminuisce il peso che AIChess attribuisce alla statistica delle partite.
L’intervallo di equivalenza E dice quando due mosse valutate dal motore nell’intervallo (per esempio 0.10) si devono considerare equivalenti (nell’intervallo di equivalenza aumenta il peso delle statistiche fra umani fino a diventare prioritario).
Nell’esempio soprariportato (muove il Nero), se l’intervallo di equivalenza fosse fissato a 0.10, AIChess dovrebbe considerare solo una mossa (5…♗xc3); se fosse 0.20, le mosse da considerare sarebbero tre (anche 5…♕e7 e 5…exd4).
v è la valutazione massima accettabile per non scartare la linea; per esempio, in un repertorio per il Nero, +0.25 (il segno + è a favore del Bianco, il range di parità di Stockfish, va da -0.25 a +0.25).
Z indica quando fermarsi nel database (Z=10 vuol dire che si continua a scansionare il database fino a che ci sono almeno 10 partite con quella mossa). Se Z è troppo grande, il repertorio sarà scarno, facile da memorizzare. Se Z è troppo piccolo (al limite uguale a 1, cioè si considerano tutte le partite del database, anche quelle giocate una sola volta!) la memorizzazione per un umano sarà impossibile. In alternativa, Z può anche essere una frequenza, cioè “fermati quando la linea ha una probabilità inferiore a 0.1% di essere giocata, relativamente al database)
La profondità del motore P (cioè il motore deve arrivare fino a P) è collegata alla bontà del repertorio. Se per la mossa scelta (in base alla valutazione del motore) al livello di profondità P:
- La statistica è significativa ed è positiva: STOP
- La statistica è significativa ed è negativa si prosegue oltre P
- Se la statistica non è significativa e ci sono mosse nell’intervallo di equivalenza, si sceglie la migliore (purché giocata da umani)
- Se si tratta di una novità e ci sono altre mosse nell’intervallo di equivalenza, si analizza la statistica per vedere se la novità è nettamente superiore alle mosse nell’intervallo di equivalenza.
Durante i due mesi di addestramento si è rilevato che P dovesse essere 36 (con 4 CPU) verificando che con questa scelta si massimizzava la frequenza del punto 1 e che il motore non diventava il collo di bottiglia del sistema. Infatti, Stockfish è attualmente il punto debole del sistema perché con P=36 per rispondere ad AIChess può impiegare in alcuni casi per una sola linea anche cinque minuti. Esiste anche un parametro S (stop) che dice ad AIChess di fermarsi comunque: per esempio se il Nero vuole una monografia per il controgambetto Albin che pareggi il gioco, dopo diverse ore AIChess si ferma, evidenziando che con v=+0.25 non è possibile.
Analizza le statistiche del database, determinando per ogni linea la variazione V in termini di punteggio Elo che dà la bontà della linea secondo le statistiche. Si noti che AIChess non considera le percentuali di successo che possono essere funzione anche del livello medio dei giocatori. Per esempio, una linea della variante di cambio della difesa francese può avere una percentuale di successo da parte del Nero del 60%, ma una variazione Elo di -5 (comunque ottima, visto che chi gioca con il Nero mediamente ha una valutazione Elo di -35), cosa che indica che la linea è molto giocata da un Bianco che è più “debole” del Nero.
AIChess può indicare anche una partita modello (mostrando il miglioramento trovato o l’unica partita che arriva in quella posizione) o semplicemente il giudizio del motore quando le partite sono troppe.
AIChess segnala le novità (sia per il Bianco sia per il Nero) con la classica N accanto alla mossa oppure con un commento del tipo “improving the Carlsen vs. Nakamura game …”. Si deve notare che, essendo il database su cui AIChess è stato addestrato quello con partite con entrambi i giocatori over 2200, in teoria, la mossa che AIChess segnala come novità potrebbe essere stata giocata in partite con uno o entrambi i giocatori sotto i 2200 punti Elo.
La complessità del prompt è dovuta alla gestione dei molti casi particolari, casi in cui AIChess deve sapere cosa fare. Per capire questo punto, un esempio.
La gestione dei rientri
Ovviamente AIChess segnala i rientri quando si accorge che due posizioni sono uguali. Il problema nasce quando si rientra in un’altra apertura perché AIChess, diligentemente, va in profondità anche su questa linea. Vediamo un esempio.
Dopo 1.e4 e5 2.♘f3 d6 3.d4 exd4 4.♘xd4 il Nero è entrato nella variante di cambio della difesa Philidor. Il Nero, cultore della Philidor, sviluppa l’ala di Re con ♘f6 e l’Alfiere camposcuro in e7 o in fianchetto. Ma un 5% delle partite rientra nella difesa Steinitz della spagnola con 4…♘c6, cui il Bianco replica 5.♗b5 ecc. AIChess non segnala il rientro in altre posizioni della Philidor, ma analizza correttamente tutta la difesa Steinitz! Una volta avuto il risultato finale, la redazione umana segnala il semplice rientro, rimandando allo studio della spagnola.
Perché la lingua inglese?
La scelta di lasciare i repertori in lingua inglese (con le notazioni grafiche dei pezzi) è dovuta al fatto che si parte da chatbot che in lingua inglese performano ancora meglio. I nomi delle località sono stati lasciati in inglese perché così sono più facilmente recuperabili dai database (per esempio Beijing non è stata tradotta con Pechino).
La creazione di protoaperture
Gli scacchi 3.0 danno una nuova definizione di apertura, definendo la fase iniziale del gioco protoapertura:
lo studio della parte iniziale della partita considerando l’ampiezza e la profondità delle varianti giocate con una frequenza tale da rendere il loro apprendimento compatibile con le capacità di memorizzazione del giocatore.
Così basta fornire Z in termini di frequenza (Z=0,05 -> fermarsi quando la posizione ha nel database una frequenza di una partita su 2.000) e AIChess fornirà una monografia “ridotta”, la protoapertura. Nel mio canale YouTube potete vedere molti esempi di protoaperture.