Sto provando a costruire un'intelligenza artificiale strong per un gioco chiamato Puyo Puyo , in Matlab (lo so .. . ma è l'unica lingua che conosco bene.
Fondamentalmente è come il Tetris ma ottieni coppie cadenti di 2 puyos (blob) di colore diverso (o uguale), tra 4 possibili colori. Puoi spostarli e posizionarli come preferisci. Riempi lo schermo (più precisamente il caso più in alto sulla terza colonna) e sei morto. Metti 4 puyos dello stesso colore che si collegano verticalmente o orizzontalmente (senza diagonali, 4-connettività) e si apriranno, scomparendo dallo schermo. I puyos sopra gli schioccanti cadono verso il basso fino a raggiungere un altro puyo o il terreno. Puoi lavorare con le tue coppie cadenti attuali e le due coppie successive come informazioni.
Lo scopo del gioco è quello di produrre una grande catena accumulando puyos in modo che la rottura di un gruppo possa anche innescare altri gruppi in seguito. I buoni giocatori umani raggiungono 19 catene in allenamento senza fine, il massimo possibile sulla scheda 13x6, ma la catena massima è tipicamente intorno ai 12-13 nelle partite umane. Sto limitando la mia intelligenza artificiale a una tavola 12x6 (la tredicesima fila ha proprietà speciali di cui non voglio occuparmi ora), e mirare alla mia IA che costruisce catene da 13 o più che è adatta per la battaglia contro forti giocatori umani.
Quindi ho provato diverse cose come l'euristica, ma mi sento come se la ricerca di profondità 3 (ne abbiamo tre di cui siamo a conoscenza) dovesse dare buoni risultati, poiché utilizza tutte le informazioni disponibili per il giocatore. Comunque sto codificando in Matlab e ci sono 5 per loop imbricati l'uno nell'altro (uno per il numero di giochi che faccio giocare all'IA, uno per ogni mossa che permetto all'IA e tre per la ricerca di profondità 3). Quindi il codice funziona sloooow ... e in futuro mi piacerebbe combinare la ricerca di profondità 3 con altri parametri euristici e ottimizzare l'intero processo con un algoritmo genetico.
Qualcuno ha consigli su cose che potrei accelerare, magari vettorializzare alcune operazioni? La codifica in un'altra lingua accelera i cicli for? di un fattore di quanto?