Questo semplice progetto è realizzato nel contesto del corso di Fondamenti di Intelligenza Artificiale. Esso rappresenta un esempio di possibile implementazione di un agente risolutore di giochi a costo zero mediante l'algoritmo minimax.
Sono presenti 2 package, ai
e tictactoe
.
Nel primo risiede l'implementazione dell'agente, la classe MinimaxAI
, e due interfacce, Board
e Move
.
Tali interfacce permettono all'agente di poter effettuare i propri calcoli rimanendo agnostico rispetto al gioco effettivamente implementato.
In particolare, l'interfaccia Board
rappresenta il piano di gioco, e quindi tutte le configurazioni che esso assume, e dunque anche gli stati visistati da minimax.
Inoltre, è la stessa astrazione che fornisce le azioni possibili, nonchè il valore di utilità quando si raggiunge uno stato terminale.
L'interfaccia Move
, invece, rappresenta una effettiva mossa di gioco, che tramite un command pattern reversibile, modifica lo stato del gioco.
A seconda dell'implementazione concreta di queste astrazioni, varia il gioco implemementato: tuttavia, l'agente può essere riutilizzato completamente.
In questo package sono contenute 3 classi: TicTacToeBoard
, TicTacToeMove
(interna a board), e TicTacToeGame
.
Le prime due rappresentano l'implementazione concreta delle interfacce per l'agente, mentre la terza gestisce tutto l'andamento del gioco.
Nella classe TicTacToeBoard
, in particolare, oltre ai metodi ereditati dall'interfaccia, sono presenti dei metodi propri per gestire il gioco del Tris (o TicTacToe).
Da notare la possibilità di dare una dimensione alla game board: questo occorre per rendere evidente l'inefficienza in termini di computazione di minimax, e della necessità di ottimizzarlo.