Example #1
0
        public Usuario(int idSimulacion, double motivacionInicial, double aPositiva, double aNegativa, double fFacilidad, double sinRecomendacion)
        {
            _ficticio         = true;
            _motivacion       = motivacionInicial;
            _aPositiva        = aPositiva;
            _aNegativa        = aNegativa;
            _fFacilida        = fFacilidad;
            _sinRecomendacion = sinRecomendacion;
            _resueltos        = 0;
            _fallos           = 0;
            // TODO: Obtener ID de nuevo usuario creado
            SimulacionDB simulacion = new SimulacionDB();

            _idUsuario           = simulacion.creaUsuarioFicticion();
            _idUsuarioSimulacion = simulacion.creaUsuarioSimulacion(_idUsuario,
                                                                    idSimulacion,
                                                                    motivacionInicial,
                                                                    aPositiva,
                                                                    aNegativa,
                                                                    fFacilidad,
                                                                    sinRecomendacion);
            if (VariablesCompartidas.Instance.maximaMotivacion < _motivacion)
            {
                VariablesCompartidas.Instance.maximaMotivacion = _motivacion;
            }
        }
Example #2
0
        public void registraRecomendacion(Usuario user, int idPorblema, bool resolvio, bool subioNivel)
        {
            SimulacionDB simulacion = new SimulacionDB();
            int          res        = 0;

            if (resolvio)
            {
                res = 1;
            }
            int paso = 0;

            if (subioNivel)
            {
                paso = 1;
            }
            simulacion.registraRecomendacion(
                _idRecomendador,
                _id,
                user.idUsuarioSimulacion,
                idPorblema,
                res,
                paso);
            if (resolvio)
            {
                simulacion.registraResultado(user.idUsuario, idPorblema, 100);
            }
            else
            {
                simulacion.registraResultado(user.idUsuario, idPorblema, 0);
            }
        }
Example #3
0
 public void termina()
 {
     if (_id != -1)
     {
         SimulacionDB simulacion = new SimulacionDB();
         simulacion.finalizaSimulacion(_id);
     }
 }
Example #4
0
 public void inicia()
 {
     if (_id == -1)
     {
         SimulacionDB simulacion = new SimulacionDB();
         _id = simulacion.iniciaSimulacion();
     }
 }
Example #5
0
        private void cargaAlgoritmos()
        {
            SimulacionDB simulacion = new SimulacionDB();
            var          algoritmos = simulacion.algoritmos();

            idAlgoritmo      = new Dictionary <int, Algoritmo>();
            nombreAAlgoritmo = new Dictionary <string, Algoritmo>();
            foreach (var algorithm in algoritmos)
            {
                idAlgoritmo[algorithm.id]          = algorithm;
                nombreAAlgoritmo[algorithm.nombre] = algorithm;
            }
        }
Example #6
0
        private void agregaAlgoritmo(string algo)
        {
            int id = 1;

            if (idAlgoritmo.Keys.Count > 0)
            {
                id = idAlgoritmo.Keys.Max() + 1;
            }
            string       descripcion = "Algortimo Auto Generado";
            Algoritmo    nuevo       = new Algoritmo(id, algo, descripcion);
            SimulacionDB simulacion  = new SimulacionDB();

            simulacion.agregaAlgoritmo(nuevo);
        }
Example #7
0
        public bool resolvioTodo()
        {
            SimulacionDB simulacion    = new SimulacionDB();
            bool         _resolvioTodo = simulacion.resolvioTodo(_idUsuario);

            if (!_terminado && _resolvioTodo)
            {
                //el usuario ha terminado todo
                _acaboProblemas = true;
                _motivacion     = 0.0;
                _terminado      = true;
                var llaves = new List <int>(_habilidades.Keys);
                foreach (var idHabilidad in llaves)
                {
                    _habilidades[idHabilidad] = 6;
                }
            }
            return(_resolvioTodo);
        }
Example #8
0
        public void Simula()
        {
            ciclosCompletos    = 0;
            totalRResueltas    = 0;
            totalRFallidas     = 0;
            totalSubioNivel    = 0;
            totalColdStart     = 0;
            alumnosCompletos   = 0;
            alumnosRendidos    = 0;
            sinRecomendaciones = 0;
            VariablesCompartidas.Instance.reinicia();

            RegistroSimulacion rsimulacion = new RegistroSimulacion();

            rsimulacion.inicia();
            idSimulacion = rsimulacion.id;
            EventoManager.Instance.registroSimulacion = rsimulacion; //indica que debe guardar las simulaciones
            rsimulacion.recomendador = recomendador;

            SimulacionDB simuladorDB = new SimulacionDB();

            simuladorDB.limpiaBase();
            //simuladorDB.llenaUsuarios();
            //simuladorDB.llenaUsuariosProbelmas();

            pasaUsuariosReales();

            log      = new StringBuilder();
            usuarios = new Dictionary <int, Usuario>();
            for (int i = 0; i < nUsuarios; i++)
            {
                Usuario nuevo = new Usuario(rsimulacion.id, motivacionInicial, aPositiva, aNegativa, fFacilidad, sinRecomendacion);
                usuarios[nuevo.idUsuario]       = nuevo;
                usuarios[nuevo.idUsuario].temas = temas;
            }
            VariablesCompartidas.Instance.usuarios = usuarios;
            Stopwatch sw = new Stopwatch();

            sw.Start();
            recomendador.iniciaRecomendador();
            sw.Stop();
            TimeSpan tiempoTranscurrido = sw.Elapsed;

            EventoManager.Instance.registraEvento("tIniciaRecomendador", tiempoTranscurrido.TotalMilliseconds.ToString());
            for (int iteracion = 0; iteracion < nCiclos; iteracion++)
            {
                parcialRResueltas = 0;
                parcialRFallidas  = 0;
                parcialSubioNivel = 0;
                VariablesCompartidas.Instance.nColdStart = 0;
                log.Append("Iteracion: " + iteracion.ToString() + "\r\n");
                foreach (var user in usuarios)
                {
                    log.Append(user.Value.ToString());
                }

                sw = new Stopwatch();
                sw.Start();
                recomendador.realizaAnalisis();
                sw.Stop();
                tiempoTranscurrido = sw.Elapsed;
                EventoManager.Instance.registraEvento("tRealizaAnalisis", tiempoTranscurrido.TotalMilliseconds.ToString());

                SelectorRandom sr = new SelectorRandom(nUsuarios);
                alumnosCompletos = 0;
                alumnosRendidos  = 0;
                foreach (var user in usuarios)
                {
                    int i = user.Key;
                    sr.agrega(i, (int)Math.Floor(usuarios[i].motivacion));
                    if (usuarios[i].rendido)
                    {
                        alumnosRendidos++;
                    }
                    if (usuarios[i].acaboProblemas)
                    {
                        alumnosCompletos++;
                    }
                }
                simulacionesADar  = sr.cuantosRestantes();
                simulacionesDadas = 0;
                EventoManager.Instance.registraEvento("nRecomendaciones", simulacionesADar.ToString());
                double totalTiempoRecomendacion = 0.0;
                int    contTiempoRecomendacion  = 0;
                while (!sr.empty())
                {
                    int pUsuario = sr.saca();

                    sw = new Stopwatch();
                    sw.Start();
                    int recomendacion = recomendador.recomendacion(usuarios[pUsuario].idUsuario);
                    sw.Stop();
                    tiempoTranscurrido        = sw.Elapsed;
                    totalTiempoRecomendacion += tiempoTranscurrido.TotalMilliseconds;
                    contTiempoRecomendacion++;

                    log.Append(pUsuario);
                    log.Append(",");
                    log.Append(recomendacion.ToString());
                    log.Append(",");
                    //Registrar recomendacion
                    //TODO: hacer un random Unico
                    if (recomendacion < 0)
                    {
                        // el recomendador no pudo generar recomendacion
                        if (usuarios[pUsuario].resolvioTodo())
                        {
                            log.Append("Resolvio Todo");
                        }
                        else
                        {
                            sinRecomendaciones++;
                            log.Append("Recomendador no tiene recomendaciones");
                        }
                    }
                    else
                    {
                        if (pasa(usuarios[pUsuario], recomendacion))
                        {
                            totalRResueltas++;
                            parcialRResueltas++;
                            log.Append("paso");
                            log.Append(",");
                            usuarios[pUsuario].resolvio(problemas[recomendacion]);
                            if (subeNivel(usuarios[pUsuario], recomendacion))
                            {
                                totalSubioNivel++;
                                parcialSubioNivel++;
                                rsimulacion.registraRecomendacion(usuarios[pUsuario], recomendacion, true, true);
                                usuarios[pUsuario].subeNivel(problemas[recomendacion].idTema);
                                log.Append("Subio");
                                log.Append(",");
                            }
                            else
                            {
                                rsimulacion.registraRecomendacion(usuarios[pUsuario], recomendacion, true, false);
                                log.Append("no subio");
                                log.Append(",");
                            }
                        }
                        else
                        {
                            totalRFallidas++;
                            parcialRFallidas++;
                            log.Append("no paso");
                            log.Append(",");
                            rsimulacion.registraRecomendacion(usuarios[pUsuario], recomendacion, false, false);
                            usuarios[pUsuario].fallo(problemas[recomendacion]);
                            log.Append("no subio,");
                        }
                    }
                    log.Append("\r\n");
                    simulacionesDadas++;
                }
                log.Append("\r\n");
                foreach (var user in usuarios)
                {
                    int i = user.Key;
                    usuarios[i].tickTiempo();
                }
                parcialColdStart = VariablesCompartidas.Instance.nColdStart;
                totalColdStart  += parcialColdStart;
                EventoManager.Instance.registraEvento("nFallos", totalRFallidas.ToString());
                EventoManager.Instance.registraEvento("nFallosCiclo", parcialRFallidas.ToString());
                EventoManager.Instance.registraEvento("nExitos", totalRResueltas.ToString());
                EventoManager.Instance.registraEvento("nExitosCiclo", parcialRResueltas.ToString());
                EventoManager.Instance.registraEvento("nIncNivel", totalSubioNivel.ToString());
                EventoManager.Instance.registraEvento("nIncNivelCiclo", parcialSubioNivel.ToString());
                EventoManager.Instance.registraEvento("nCompletos", alumnosCompletos.ToString());
                EventoManager.Instance.registraEvento("nRendidos", alumnosRendidos.ToString());
                EventoManager.Instance.registraEvento("nSinRecomendacion", sinRecomendaciones.ToString());
                EventoManager.Instance.registraEvento("nColdStart", totalColdStart.ToString());
                EventoManager.Instance.registraEvento("nColdStartCiclo", parcialColdStart.ToString());
                if (contTiempoRecomendacion > 0)
                {
                    EventoManager.Instance.registraEvento("tPromedioRecomendacion", (totalTiempoRecomendacion / (double)contTiempoRecomendacion).ToString());
                }
                else
                {
                    EventoManager.Instance.registraEvento("tPromedioRecomendacion", "0.0");
                }

                double presicion = 0.0;
                if (simulacionesADar != 0)
                {
                    presicion = (double)parcialRResueltas / (double)simulacionesADar;
                }
                EventoManager.Instance.registraEvento("precision", presicion.ToString());
                EventoManager.Instance.registraEvento("precisionRecomendacion", (presicion * simulacionesADar).ToString());
                EventoManager.Instance.registraEvento("precisionRecomendacion2", (presicion * Math.Log(simulacionesADar)).ToString());
                ciclosCompletos++;
            }
            rsimulacion.termina();
            idSimulacion = -1;
            this.termino = true;
        }