示例#1
0
        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);
        }
示例#2
0
 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;
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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;
            }
        }
示例#7
0
 public Alumno(Condiciones condiciones, int acumulador)
 {
     id            = acumulador + 1;
     TiempoRegreso = 0;
 }
示例#8
0
 public Mantenimiento(Condiciones condiciones, int tiempo, int acumulador)
 {
     id            = acumulador + 1;
     TiempoLlegada = tiempo;
 }