Tengo un programa F # activo que ejecuta Dominion, un juego de cartas. Me gustaría utilizar un algoritmo genético para determinar las estrategias óptimas para jugar. Sin embargo, no sé mucho sobre IA o algoritmos genéticos. ¿Me puede indicar alguna buena literatura para comenzar?Algoritmo genético para un juego de cartas (Dominion)
Una estrategia para jugar consiste en una reacción a una mano determinada. En cada turno, un bot recibe una mano de cartas. Puede elegir jugar cartas de acción o comprar nuevas cartas, según lo que se le haya repartido. El objetivo es terminar el juego con tantas cartas de puntos de victoria como sea posible.
Un enfoque codificado podría ser algo como:
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
Estaba pensando en que describe una estrategia en términos de un vector de porciones deseadas del total de la cubierta para cada tarjeta:
[Smithy, Province, Copper, ...]
[.3, .2, .1, ...]
Entonces para mutar un bot, podría cambiar ese vector y ver si la versión mutada mejora. La función de acondicionamiento físico sería la puntuación promedio jugando Dominio contra una variedad de otros bots. (El puntaje de un bot depende de contra quién esté jugando, pero con suerte al jugar muchos juegos contra muchos bots esto puede igualar).
¿Tiene sentido esto? ¿Me dirijo por el camino correcto?
Lo siento, pero IMO es una muy mala descripción de su problema. Ni siquiera sé por qué quieres "combinar" dos bots o qué bots quieres combinar. Supongo que las cartas de acción son una propiedad dinámica que cambia durante el juego. Indique el problema más claramente en términos de una función objetivo y sus variables de decisión. Supongo que quieres entrenar algunos parámetros de un bot genérico que escribiste. Tal vez puedas elaborar esto un poco más. ¿Qué tipo de lenguaje de programación escribiste el simulador del juego de cartas? – Andreas
Estoy de acuerdo en que no estaba formulando el problema muy bien. Lo intenté de nuevo; ¿Cómo se ve esto? –
definitivamente vale la pena gastar un poco más de tiempo – Andreas