// --- funcion evaluarRecompensa private float evaluarRecompensa(TablaAER Q, String accion, Bloque estado) { // recompensa por morir. if (life <= 0) { return(-10f); } ColumnasAER tupla = Q.getTupla(accion, estado); if (tupla != null) { return(tupla.valor); } float Out = -1f; // recompensa para avanzarDer, avanzarIzq, saltar es de -0.03 if ((accion.Equals("avanzarDer")) || (accion.Equals("avanzarIzq"))) { Out = -3f; } // recompensa para saltarIzq, saltarDer es de -0.02 if ((accion.Equals("saltarDer")) || (accion.Equals("saltarIzq")) || (accion.Equals("saltar"))) { Out = -2f; } return(Out); }
public AgenteAprende(Microsoft.Xna.Framework.Game game, Vector2 tamano, Vector2 posicion, String nombreImagen) : base(game, tamano, posicion, nombreImagen) { NombreImagen = nombreImagen; ColorImagen = Color.White; posPlayer = new Vector2(-1, -1); posAgent = new Vector2(-1, -1); area = new Bloque(); accionAnterior = new ColumnasAER(); life = 1; try { Q = XML.Deserialize <TablaAER>("memoria"); } catch (Exception) { nomemory = true; Q = new TablaAER(); } LoadContent(); }
// --- funcion evalua cada accion, estado y recompensa. Retorna la accion a tomar private String funcionQ(String aA, Bloque eA) // valores Actuales : accionActual, estadoActual, recompensaActual { TablaAER Q = new TablaAER(); String accion = "nada"; // guardar // XML.Serialize(Q, "memoria"); // cargar // XML.Deserialize<TablaAER>("memoria"); // verificamos si existe el archivo memoria //if (contacto) //{ // rA = 1; // contacto = false; //} if (File.Exists("memoria")) { // cargar memoria Q = XML.Deserialize <TablaAER>("memoria"); if (Q.getTupla(aA, eA) != null) // busca la tupla en la tabla { float rA = evaluarRecompensa(Q, aA, eA); ColumnasAER tupla = Q.getActionMaxQ(aA, eA, rA); // agrega la tupla en la tabla Q.addTupla(tupla); accion = tupla.accion; // - Debug.WriteLine("La tupla si esta"); } else // si no la encuentra { float rA = evaluarRecompensa(Q, aA, eA); ColumnasAER tupla = new ColumnasAER(aA, eA, 0, rA); // agrega la tupla directo en la tabla Q.addTupla(tupla); accion = tupla.accion; // - Debug.WriteLine("La tupla no esta"); } XML.Serialize(Q, "memoria"); return(accion); } // algoritmo que se ejecuta por defecto cuando no existe memoria else { // crear informacion Q.FilasAER = new List <ColumnasAER>(); float rA = evaluarRecompensa(Q, aA, eA); ColumnasAER tupla = new ColumnasAER(aA, eA, 0, rA); Q.FilasAER.Add(tupla); // se agrega el moviemiento a su memoria Q.Movimientos = new List <String>(); Q.Movimientos.Add(aA); // guardar informacion en memoria XML.Serialize(Q, "memoria"); // cerrar archivo // asigna la accion actual como accion por defecto accion = aA; // retorna la accion // - Debug.WriteLine("No existe memoria"); return(accion); } }