Gli scacchi sono al 99% tattica.
Richard TeichmannQuando il gioco si fa tattico, i computer iniziano a giocare.
Robert Hyatt
JOKER
Joker è un giocatore artificiale, risultato di una grande passione per gli scacchi.
Rappresenta un utilissimo "laboratorio" per la sperimentazione di algoritmi
di intelligenza artificiale e delle tecniche per l'ottimizzazione del codice.
Non è un programma commerciale e, almeno per ora, non è disponibile al pubblico. Siamo comunque pronti a rispondere a qualsiasi domanda o curiosità in merito al suo funzionamento, interessati a scambiare esperienze ed opinioni circa i giocatori artificiali e pronti a renderlo disponibile per tornei/eventi via internet.
Scacchi ed intelligenza artificiale
Da sempre è vivo l'interesse per macchine capaci di giocare a scacchi: la creazione di un sistema in grado di competere con successo contro l'uomo, in un'attività che richiede notevoli capacità strategiche, fu subito percepita come la pietra miliare sulla strada verso l'intelligenza artificiale.
Gli scacchi sono un gioco ad informazione perfetta: al contrario del poker o del backgammon, tutte le informazioni riguardanti lo stato della partita sono note ai partecipanti e non si riscontrano elementi legati al caso. Entrambi i giocatori possono osservare la posizione e conoscono le mosse effettuate dall'avversario; per questo gli scacchi sono un gioco puramente intellettuale ed un sistema "perfetto" per sperimentare tecniche di intelligenza artificiale.
Il principale punto di forza del computer risiede nella velocità di calcolo. Generalmente i programmi scacchistici adottano un algoritmo brute force strettamente legato alla velocità di generazione / ricerca / analisi delle mosse. Nel tempo le tecniche di ricerca si sono evolute rimanendo però legate, in un modo o nell'altro, all'albero di gioco minmax (una delle idee più note e di successo dell'IA).
Considerata la sconfitta, a metà degli anni '90, del campione del mondo Gary Kasparov ad opera di Deep Blue, si potrebbe pensare che la ricerca in questo campo sia ormai esaurita. In realtà non è così. Esistono numerose altre idee che possono essere realizzate e sperimentate in un programma scacchistico (reti neurali, algoritmi genetici, calcolo in collaborazione…). Gli scacchi sono un ambiente controllato che permette di sottoporre al computer una situazione ed un obiettivo da raggiungere decidendo quali possibilità preferire. Gli algoritmi di decision making devono molto agli scacchi ma è sicuro che anche molte altre branche dell'IA abbiano avuto ricadute positive.
La programmazione scacchistica è simile ad un capolavoro di letteratura, anche dopo averlo ponderato nei dettagli, continua a produrre tesori.
Caratteristiche
Tecniche
- motore di gioco realizzato in assembler/C++ per la massima velocità. Basato sull'algoritmo di ricerca MTD(f) con tecniche per l'accelerazione della convergenza, approfondimento iterativo, null moves forward pruning, null move verification, internal iterative deepening, ricerca di quiescenza, ricerca selettiva con estensioni dinamiche e fractional ply increment.
- funzioni di valutazione diversificate in base alla fase di gioco. Sfruttamento di tecniche quali lazy eval, Pawn hash table estesa con informazioni relative a struttura pedonale e Re.
- ordinamento mosse specifico in base alla situazione della ricerca con ricorso a tabella delle trasposizioni, mosse killer, euristica storica ed MVT/LVA (durante la ricerca di quiescenza).
- bitboard per la massima efficienza su architetture a 64bit;
- learning function per la libreria di apertura;
Di gioco
- Supporto per le tabelle dei finali EGTB (Eugene Nalimov).
- Interfaccia di gioco Arena / Xboard / Winboard (con supporto della seconda versione del Chess Engine Communication Protocol).
- Libreria di apertura creabile dall'utente.
- Disponibile per BSD, Linux e Windows.
- Analisi delle partite giocate.
- Supporto per connessione a FICS (Free Internet Chess Server).
Risultati
Il sistema di riferimento è un elaboratore con microprocessore AMD Athlon XP 2500+, 256MB di Ram, sistema operativo Linux v2.6.10; ultima versione di Joker con impostazioni di gioco "da torneo".
| Test suite | Tempo limite | Tempo medio | Profondità media | NPS | Risultato |
|---|---|---|---|---|---|
| WAC | 2s | 0.16s | 5ply | 1318K | 296/300 |
| ECM | 30s | 3.26s | 7ply | 1338K | 738/879 |
| GCP | 60s | 10.54s | 9ply | 1344K | 167/183 |
| LCT | 180s | 12.75s | 10ply | 1319K | 24/35 |
Con tempo limite si intende il tempo massimo di analisi per posizione concesso al programma. Il tempo medio è la media dei tempi necessari a Joker per scoprire la mossa corretta e confermarla per due ply (profondità di ricerca in semimosse) consecutivi. La profondità media è la media delle profondità di analisi raggiunte dal programma alla seconda conferma consecutiva della mossa corretta. Gli NPS sono le posizioni al secondo elaborate da Joker durante l'analisi (in migliaia).
