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; } }
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); } }
public void termina() { if (_id != -1) { SimulacionDB simulacion = new SimulacionDB(); simulacion.finalizaSimulacion(_id); } }
public void inicia() { if (_id == -1) { SimulacionDB simulacion = new SimulacionDB(); _id = simulacion.iniciaSimulacion(); } }
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; } }
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); }
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); }
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; }