Choose Language
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
Abak Logo
ABK-GOFAI: Intelligenza Artificiale Classica

ABK-GOFAI: Un'Intelligenza Artificiale Classica per Giocare ad Abak Evolution Backgammon.

Senza l'aiuto di una Rete Neurale, lo sviluppo di un'Intelligenza Artificiale (IA) per Abak si è rivelato un compito impegnativo e, col tempo, ha raggiunto un limite apparente. Tuttavia, è stato un processo divertente svilupparla, ed è ancora in servizio per giocare ai livelli "facile", "normale" e "avanzato". Questo è un articolo su come funziona e come è stata creata.

Fase 1, GOFAI PHP

La prima versione dell'IA di Abak fu scritta in PHP ed era destinata a mandare in crash il sistema con errori di 'memoria esaurita', ma ha aperto la strada per una versione in C++. È stata il campo di prototipazione per capire come diavolo si potesse creare un'IA. La prima volta che l'ho eseguita collegata al server web (quindi stavo effettivamente giocando contro di essa), ha avuto bisogno di 15 lunghissimi secondi per selezionare una mossa, e quando ho visto il server muovere da solo, sono impazzito e potrei aver fatto un piccolo ballo. Non ne sono sicuro.

Fase 2, GOFAI C

Quindi, la versione C/C++ dell'IA, la prima ad andare in un ambiente produttivo, il mio amato motore GOFAI, è nata sulle ceneri del PHP. Esegue 29 algoritmi di analisi su migliaia di posizioni in nanosecondi, e funziona così:

  • Data una posizione del tavoliere e un set di dadi.
  • Calcola uno stato
  • Ottieni ogni movimento possibile.
  • Analizza ogni movimento e assegna un punteggio.
  • Seleziona il punteggio 'migliore'.

Ecco un diagramma del processo.

Diagrama Abak-GOFAI Artificial Intelligence

È composto da quattro funzioni principali:

  • Ottieni Azioni (Calcola Movimenti Validi):

    Data una posizione del tavoliere e un lancio di dadi, calcola ogni movimento valido.

    I movimenti validi possono andare da 0 a decine di migliaia.

    In ogni linguaggio in cui ho scritto questo, ho adottato un approccio ricorsivo non necessario che rende il codice così difficile da debuggare, ma è così elegante. Ha un paio di centinaia di righe di codice ma mi ci sono volute settimane per scriverlo, e poi altre settimane per tradurlo in C.

  • Ottieni Stato (Calcola lo stato del Tavoliere):

    Data una posizione del tavoliere, calcola uno stato semantico, piuttosto autoesplicativi:

    • Inizio
    • Metà Partita
    • Corsa senza Speranza
    • Corsa con Speranza
    • Fine Partita
    • Ingresso a Casa
  • Analizza Movimento (Calcola Punteggi per una Posizione del Tavoliere):

    Questo è di gran lunga l'algoritmo più esteso di tutti. Analizza le caratteristiche del tavoliere, ciascuna restituendo un punteggio, e poi, basandosi sullo stato calcolato in precedenza, applica dei fattori, così puoi dare importanza a diversi aspetti dell'analisi in base allo stato della partita.

    L'IA è partita con 8 algoritmi e ha finito con 29, un assaggio:

    • Altezza delle Colonne
    • Rischio di essere Colpito
    • Rischio di essere Intrappolato
    • Forza del Tavoliere Interno
    • Punti di fuga
    • Pedine sulla Barra
    • Pedine al Sicuro

    Molti di questi algoritmi erano molto basilari all'inizio o semplicemente non esistevano.

    Col tempo ci ho lavorato, aggiungendo funzionalità e regolando i fattori.

  • Seleziona Azione (Seleziona il Movimento "Migliore"):

    Questo algoritmo è relativamente banale se vuoi solo il punteggio più alto (come fa il Livello Avanzato).

    Per il Livello Normale e Facile, seleziona un movimento casualmente tra una lista delle migliori azioni; la sua dimensione (o la sua tolleranza a movimenti scadenti) è data dal livello.

Grazie al C, questo motore è velocissimo, quindi lo userò sempre come funzione primaria per ottenere le azioni.

Fase 3, Messa a Punto GOFAI C

Per debuggare, risolvere problemi e mettere a punto questo motore, ho dovuto costruire molti strumenti per monitorare il processo decisionale. A differenza della Rete Neurale, ogni decisione qui è verificabile, quindi almeno avevi quello.

Il processo è stato divertente ma dolorosamente lento. Ho giocato molto contro la CPU, e ogni volta che vedevo una mossa scarsa, venivo a questi strumenti per controllare cosa fosse andato storto. A volte questo mi portava su un percorso di correzione di un algoritmo, regolazione di un fattore, o semplicemente costruzione di un nuovo modello di analisi. A volte, e questo era bellissimo, mi portava a riconsiderare le mie Strategie di Abak Evolution.

Abak-GOFAI Debug Tool Screenshot 1 Abak-GOFAI Debug Tool Screenshot 2

Col tempo, avevo un'IA piuttosto solida, ma perfezionarla ulteriormente stava diventando sempre più difficile. C'erano così tante righe di codice, così tanti scenari, operazioni così massicce, che il debug a livello di codice era un compito pesante, e la regolazione manuale dei fattori non dava risultati.

Fase 4, Disperazione

Ma volevo di più perché gioco ad Abak, e avevo bisogno di un giocatore solido per divertirmi, e non c'erano molti umani che ci giocavano all'epoca (e anche mentre scrivo questo).

E questo approccio ha molti svantaggi:

  • Calcola lo stato del tavoliere data la sua posizione attuale, e quello stato viene usato per cambiare i fattori degli algoritmi di analisi per ogni azione valida. Quell'azione, però, potrebbe aver alterato lo stato, ma il motore non ne tiene conto.
  • La regolazione manuale dei fattori richiedeva una quantità tremenda di tempo. Momenti divertenti comunque, ma tonnellate comunque.
  • Lo stato è brutalmente difficile da calcolare, dato il numero di scenari possibili. È sempre stato un algoritmo difettoso.
  • L'equità della partita è impossibile da calcolare con precisione, perché questo motore ha un sistema di punteggio arbitrario per ogni algoritmo di analisi, e il punteggio finale non riflette una probabilità di vittoria, funziona solo come punteggio comparabile tra diverse posizioni del tavoliere. Si può dire che ha un valore relativo invece che assoluto.

Fase 5, Il Risveglio

E poi, un giorno, nel 2018, Google ha battuto il campione di GO con la sua Rete Neurale AlphaGo, e c'è stato così tanto clamore, e nuove fantastiche librerie open source di Machine Learning sono diventate disponibili, e utilizzavano GPU domestiche per velocizzare il processo di addestramento.

Ovviamente, conoscevo già un po' le Reti Neurali, ma non ne avevo mai costruita una, e onestamente, le vedevo come un compito al di là delle mie capacità.

Quindi non ho potuto resistere, e il livello esperto non gira più sul motore GOFAI, salvo per la parte di ottenimento delle azioni.

Ma questa storia finisce qui.

Se hai letto tutto fino a qui, sono stupito.

Questo testo è stato scritto per scopi SEO dall'onesto Team di Abak Evolution,
Alias Samy Garib.

Abak Evolution Backgammon è una fantastica variante del Backgammon basata su classi, che aggiunge letteralmente una nuova dimensione al classico gioco da tavolo.