private void LlegoMantenimiento(Condiciones condiciones) { Mantenimiento mantenimiento = new Mantenimiento(); estadoActual.ColaMantenimientos.Clear(); List <Equipo> equipos = new List <Equipo> { estadoActual.equipo1, estadoActual.equipo2, estadoActual.equipo3, estadoActual.equipo4, estadoActual.equipo5, }; equipos.ForEach(x => x.Mantenido = false); Equipo equipoLibre = equipos.FindAll(x => x.Libre).FirstOrDefault(); if (equipoLibre == null) { estadoActual.ColaMantenimientos.Add(mantenimiento); } else { equipoLibre.alumno = null; equipoLibre.Libre = false; equipoLibre.TipoOcupacion = Ocupacion.Mantenimiento; equipoLibre.ObtenerTiempoAtencion(); equipoLibre.TiempoFinAtencion = equipoLibre.TiempoEjecucion + estadoActual.tiempo; equipoLibre.Mantenido = true; equipoLibre.mantenimiento = mantenimiento; } estadoActual.ObtenerTiempoLlegadaProximoMantenimiento(estadoActual.tiempo); }
public Equipo(string nombre, Evento eventoFin, Condiciones condiciones) { condicionesIniciales = condiciones; Nombre = nombre; TiempoFinAtencion = 0; Libre = true; Mantenido = false; EventoFin = eventoFin; CantidadInscripciones = 0; alumno = null; mantenimiento = null; }
private void LlegoAlumno(Condiciones condiciones) { Alumno alumno; if (estadoActual.colaAbandono.Count > 0 && estadoActual.tiempo == estadoActual.colaAbandono.First().TiempoRegreso) { alumno = estadoActual.colaAbandono.First(); estadoActual.colaAbandono.RemoveAt(0); } else { alumno = new Alumno(condiciones, estadoActual.numeroAlumno); } List <Equipo> equipos = new List <Equipo> { estadoActual.equipo1, estadoActual.equipo2, estadoActual.equipo3, estadoActual.equipo4, estadoActual.equipo5 }; Equipo proximoEquipo = equipos.FindAll(x => x.Libre).Count > 0 ? equipos.FindAll(x => x.Libre).First() : null; if (proximoEquipo != null) { proximoEquipo.Libre = false; proximoEquipo.TipoOcupacion = Ocupacion.Inscripcion; proximoEquipo.ObtenerTiempoAtencion(); proximoEquipo.TiempoFinAtencion = proximoEquipo.TiempoEjecucion + estadoActual.tiempo; proximoEquipo.alumno = alumno; } else { if (estadoActual.colaAlumnos.Count < 4) { estadoActual.colaAlumnos.Add(alumno); } else { alumno.TiempoRegreso = estadoActual.tiempo + 30 * 60; estadoActual.AlumnosAbandono++; estadoActual.colaAbandono.Add(alumno); } } estadoActual.numeroAlumno++; estadoActual.ObtenerTiempoLlegadaProximoAlumno(estadoActual.tiempo); }
public EstadoSimulacion GenerarSimulacion(Condiciones condiciones) { estadoActual = (EstadoSimulacion)estadoAnterior.Clone(); estadoActual.tiempo = estadoAnterior.tiempoProximoEvento; estadoActual.eventoActual = estadoAnterior.proximoEvento; bool CambioHora = Math.Floor(((double)estadoActual.tiempo / 3600)) > Math.Floor(((double)estadoAnterior.tiempo / 3600)); if (CambioHora) { estadoActual.CalcularPromedios(); } switch (estadoActual.eventoActual) { case Evento.LlegadaAlumno: LlegoAlumno(condiciones); break; case Evento.LlegadaMantenimiento: LlegoMantenimiento(condiciones); break; case Evento.FinAtencionEquipo1: FinAtencion(estadoActual.equipo1); break; case Evento.FinAtencionEquipo2: FinAtencion(estadoActual.equipo2); break; case Evento.FinAtencionEquipo3: FinAtencion(estadoActual.equipo3); break; case Evento.FinAtencionEquipo4: FinAtencion(estadoActual.equipo4); break; case Evento.FinAtencionEquipo5: FinAtencion(estadoActual.equipo5); break; default: break; } estadoActual.CalcularTiempoProximoEvento(); estadoAnterior = (EstadoSimulacion)estadoActual.Clone(); return(estadoActual); }
public object Clone() { Condiciones condiciones = new Condiciones(); condiciones.AInscripcion = AInscripcion; condiciones.ALlegadaMantenimiento = ALlegadaMantenimiento; condiciones.BInscripcion = BInscripcion; condiciones.BLlegadaMantenmiento = BLlegadaMantenmiento; condiciones.DesvLlegadaAlumno = DesvLlegadaAlumno; condiciones.DesvMantenimiento = DesvMantenimiento; condiciones.HorasSimulacion = HorasSimulacion; condiciones.MaxAlumnosCola = MaxAlumnosCola; condiciones.MediaLlegadaAlumno = MediaLlegadaAlumno; condiciones.MediaMantenimiento = MediaMantenimiento; condiciones.HorasInicio = HorasInicio; condiciones.CantidadHoras = CantidadHoras; return(condiciones); }
public EstadoSimulacion(Condiciones condiciones) { tiempo = 0; eventoActual = Evento.Inicio; equipo1 = new Equipo("Equipo1", Evento.FinAtencionEquipo1, condiciones); equipo2 = new Equipo("Equipo2", Evento.FinAtencionEquipo2, condiciones); equipo3 = new Equipo("Equipo3", Evento.FinAtencionEquipo3, condiciones); equipo4 = new Equipo("Equipo4", Evento.FinAtencionEquipo4, condiciones); equipo5 = new Equipo("Equipo5", Evento.FinAtencionEquipo5, condiciones); numeroEvento = 0; numeroAlumno = 0; colaAlumnos = new List <Alumno>(); ColaMantenimientos = new List <Mantenimiento>(); colaAbandono = new List <Alumno>(); AlumnosAbandono = 0; Inscripciones1 = 0.0; Inscripciones2 = 0.0; Inscripciones3 = 0.0; Inscripciones4 = 0.0; Inscripciones5 = 0.0; PromedioInscripciones1 = 0.0; PromedioInscripciones2 = 0.0; PromedioInscripciones3 = 0.0; PromedioInscripciones4 = 0.0; PromedioInscripciones5 = 0.0; PromedioInscripcionesSistema = 0.0; condicionesIniciales = condiciones; ObtenerTiempoLlegadaProximoMantenimiento(tiempo); ObtenerTiempoLlegadaProximoAlumno(tiempo); if (tiempoLlegadaProximoAlumno < tiempoLlegadaProximoMantenimiento) { tiempoProximoEvento = tiempoLlegadaProximoAlumno; proximoEvento = Evento.LlegadaAlumno; } else { tiempoProximoEvento = tiempoLlegadaProximoMantenimiento; proximoEvento = Evento.LlegadaMantenimiento; } }
public Alumno(Condiciones condiciones, int acumulador) { id = acumulador + 1; TiempoRegreso = 0; }
public Mantenimiento(Condiciones condiciones, int tiempo, int acumulador) { id = acumulador + 1; TiempoLlegada = tiempo; }