Bueno, tengo unos mesecitos metido en el asunto de la creacion de una AI y espero poder ayudarte.
Lo que yo uso mas frecuentemente para entrenar aplicaciones que tomen una decision "inteligente" son las "redes neuronales multicapa" ( puedes buscarlas en internet por el nombre de multilayer perceptron o MLP, tambien tengo un blog en el que he puesto mi trabajo y algunas traducciones de papers en
http://sauruxum.blogspot.com ).
Estas redes no es que sean inteligentes, sino que "aprenden" en base a la "experiencia" ( si, basicamente es asi ). Esto es en caso de una aplicacion como la que presente en el concurso ehn-Dev, crear un archivo con algunos patrones tomados de experiencias pasadas que contienen las entradas ( como en los centros biologicos, muestras de tegido cancerigeno y no-cancerigeno por ejemplo ) y las salidas ( la respuesta: "es o no es cancerigeno" ) y asi estas redes, una vez entrenadas reconocen efectivamente el tipo de tejido que es.
No solo eso, asi como aprenden de la experiencia son capaces de hacer predicciones basados en las condiciones actuales y la experiencia ( son tambien usadas para las predicciones meteorologicas ).
Como ejemplo propio puedo poner algo curioso que me pregunto uno hace poco: como puede tu programa reconocer si es un ave o no? ( no podia ser mas facil el desafio... )
Entonces como es basado en mi programa pues me pongo el problema:
Entrada 1: vuela? ( 1=si, 0=no )
Entrada 2: pone huevos? ( 1=si, 0=no )
Entrada 3: tiene alas? ( 1=si, 0=no )
creo que bastan esos.
Entonces basado en experiencias pasadas ( mas bien logicas a este punto de nuestra existencia xD ) hacemos el archivo de patrones asi:
Entradas Salidas
aguila: 1 1 1 1
avestruz: 0 1 1 1
murcielago: 1 0 1 0
caballo: 0 0 0 0
pez: 0 1 0 0
Quedando el archivo de patrones asi:
5
1 1 1
1
0 1 1
1
1 0 1
0
0 0 0
0
0 1 0
0
Lo guardamos y entrenamos la red... es posible reconocer correctamente muchas variedades de animales ( incluye el pinguino y el pez volador xD )
En el caso de un juego de cartas primero que todo poner las reglas del juego, y jugar contra una red no entrenada, y hacer el modo que aprenda tus movimientos a medida que juega ( de ahi hay que saber que juego para saber las caracteristicas de la red a usar ). En caso que el jugador sea bueno, la red aprendera bien y sera potente y viceversa. Puedes al paso entrenar una segunda red y decirle: perder esta mal, ganar esta bien ( me suena a un tio xD ) asi no solo jugara bien, sino que intentara ganar. Y puedes entrenar una tercera red que tome desiciones segun las cartas que ya han salido.
Mi programa puede ser infinitamente mejorado, espero poder dedicarle mas tiempo, pero bueno... funciona bastante bien xD
Saludos