Ho un programma F # funzionante che esegue Dominion, un gioco di carte. Mi piacerebbe utilizzare un algoritmo genetico per determinare le strategie ottimali per giocare. Tuttavia, non so molto su AI o algoritmi genetici. Puoi indicarmi qualche buona letteratura per iniziare?Algoritmo genetico per un gioco di carte (Dominion)
Una strategia per giocare consiste in una reazione a una mano data. In ogni turno, un robot riceve una mano di carte. Può scegliere di giocare a carte azione o acquistare nuove carte, in base a ciò che è stato distribuito. L'obiettivo è terminare il gioco con il maggior numero possibile di carte punti vittoria.
Un approccio hardcoded potrebbe somigliare:
def play(hand, totalDeck):
if hand contains Smithy then use Smithy
if hand contains enough coins for Province then buy Province
if more than 30% of the totalDeck is Smithy, then buy coins
pensavo di descrivere una strategia in termini di un vettore di porzioni target del ponte totale per ogni carta:
[Smithy, Province, Copper, ...]
[.3, .2, .1, ...]
Poi per mutare un bot, potrei semplicemente cambiare quel vettore in giro, e vedere se la versione mutata funziona meglio. La funzione fitness sarebbe il punteggio medio giocando a Dominion contro una varietà di altri robot. (Il punteggio di un robot dipende da chi sta giocando contro, ma si spera che giocando molte partite contro molti robot questo possa essere eliminato.)
Ha senso? Sono diretto lungo la strada giusta?
Siamo spiacenti, ma IMO è una descrizione davvero brutta del problema. Non so nemmeno perché vuoi "combinare" due bot o quello dei robot che vuoi combinare. Presumo che le action cards siano una proprietà dinamica che cambia durante il gioco. Si prega di indicare il problema più chiaramente in termini di una funzione obiettivo e le vostre variabili decisionali. Presumo che tu voglia allenare alcuni parametri di un bot generico che hai scritto. Forse puoi elaborarlo un po 'di più. Che tipo di linguaggio di programmazione hai scritto sul simulatore del gioco di carte? – Andreas
Concordo sul fatto che non stavo formulando il problema molto bene. Ho provato di nuovo; come appare? –
sicuramente degno di trascorrere un po 'di tempo in più – Andreas