// --- 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();
        }
Example #3
0
        // --- 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);
            }
        }