public Tuple <int, int> SimulacionDia(int dia)
        {
            cantCamionesAtendidos   = 0;
            cantCamionesNOAtendidos = 0;
            proximaLlegadaCamion    = seteoDeProximos;
            // Boolean bandera = true;
            banderaAperturaDePuertas = false;
            banderaCierreDePuertas   = false;
            //Validacion si es primer dia
            if (dia == 1)
            {
                reloj = new TimeSpan(12, 0, 0);
                // tiempoSimulado = tiempoSimulado -reloj;
                //colaRecepcion.Enqueue(new Camion(reloj));
            }
            else
            {
                reloj            = new TimeSpan(5, 0, 0);
                estadoSimulacion = "Apertura de Puertas";
                //tiempoSimulado = tiempoSimulado - reloj;
            }
            while (reloj < relojFinDia || recepcion.estado == "Ocupado" || colaBalanza.Count != 0 || balanza.estado == "Ocupado" || colaDarcena.Count != 0 || darsena1.estado == "Ocupado" || darsena2.estado == "Ocupado")
            {
                servicioRealizado = false;
                relojAnterior     = reloj;
                if (contadorDescargasDarcena1 == 15)
                {
                    contadorDescargasDarcena1  = 0;
                    proximaCalibracionDarcena1 = reloj + darsena1.CalcularTiempoCalibracion(10, 1.2);
                    darsena1.estado            = "Calibrando";
                }
                if (contadorDescargasDarcena2 == 15)
                {
                    contadorDescargasDarcena2  = 0;
                    proximacalibracionDarcena2 = reloj + darsena2.CalcularTiempoCalibracion(10, 1.2);
                    darsena2.estado            = "Calibrando";
                }
                if (colaRecepcion.Count != 0 && recepcion.estado == "Libre" && reloj < relojFinDia && reloj >= relojInicio)
                {
                    proximaRecepcion = reloj + recepcion.CalcularTiempoAtencion(3, 7);
                    recepcion.setCamionSiendoAtendido(colaRecepcion.Dequeue());
                    recepcion.getCamionSiendoAtendido().setHoraLlegada(reloj);
                    recepcion.getCamionSiendoAtendido().agregarEstado("En Recepción", reloj);
                    recepcion.estado = "Ocupado";
                }
                if (colaBalanza.Count != 0 && balanza.estado == "Libre")
                {
                    proximaBalanza = reloj + balanza.CalcularTiempoPesaje(5, 7);
                    balanza.setCamionSiendoAtendido(colaBalanza.Dequeue());
                    balanza.getCamionSiendoAtendido().agregarEstado("En Balanza", reloj);
                    balanza.estado = "Ocupado";
                }
                if (colaDarcena.Count != 0 && darsena1.estado == "Libre" && contadorDescargasDarcena1 < 15)
                {
                    if (ultimoCamion.getTipoCamion() == 1)
                    {
                        proximaDarcena1 = reloj + darsena1.CalcularTiempoDescarga(15, 20);
                    }
                    else //----- TP6
                    {
                        proximaDarcena1 = reloj + darsena1.CalcularDescargaEuler(ultimoCamion.getPeso());
                    }


                    darsena1.estado = "Ocupado";


                    darsena1.setCamionSiendoAtendido(colaDarcena.Dequeue());
                    darsena1.getCamionSiendoAtendido().agregarEstado("En Dársena1", reloj);
                }
                if (colaDarcena.Count != 0 && darsena2.estado == "Libre" && contadorDescargasDarcena2 < 15)
                {
                    if (ultimoCamion.getTipoCamion() == 1)
                    {
                        proximaDarcena2 = reloj + darsena2.CalcularTiempoDescarga(15, 20);
                    }
                    else //----- TP6
                    {
                        proximaDarcena2 = reloj + darsena2.CalcularDescargaEuler(ultimoCamion.getPeso());
                    }

                    darsena2.estado = "Ocupado";

                    darsena2.setCamionSiendoAtendido(colaDarcena.Dequeue());
                    darsena2.getCamionSiendoAtendido().agregarEstado("En Dársena2", reloj);
                }
                if (estadoSimulacion == "Llegada Camión" && reloj >= medioDia && reloj < relojFinDia)
                {
                    proximaLlegadaCamion    = reloj + llegadaCamion(7.5);
                    valorValorLLegadaCamion = proximaLlegadaCamion - reloj;
                }
                if (proximaLlegadaCamion > relojFinDia)
                {
                    proximaLlegadaCamion = seteoDeProximos;
                }

                generarVectorEstado(dia);

                tiempoMinimo = minimo(proximaBalanza, proximaDarcena1, proximaDarcena2, proximaRecepcion, proximaLlegadaCamion, proximaCalibracionDarcena1, proximacalibracionDarcena2);

                if (tiempoMinimo >= relojFinDia && banderaCierreDePuertas == false)
                {
                    estadoSimulacion       = "Cierre de las Puertas";
                    reloj                  = relojFinDia;
                    servicioRealizado      = true;
                    banderaCierreDePuertas = true;
                }


                if (tiempoMinimo == seteoDeProximos)
                {
                    reloj             = medioDia;
                    servicioRealizado = true;
                    estadoSimulacion  = "Llegada Camión";
                }
                if (reloj <= medioDia && tiempoMinimo >= medioDia && proximaLlegadaCamion == seteoDeProximos && servicioRealizado == false)
                {
                    proximaLlegadaCamion = medioDia + llegadaCamion(7.5);
                    servicioRealizado    = true;
                }

                if (tiempoMinimo == proximaLlegadaCamion && servicioRealizado == false)
                {
                    reloj            = proximaLlegadaCamion;
                    estadoSimulacion = "Llegada Camión";
                    colaRecepcion.Enqueue(new Camion(contadorDeCamiones));
                    colaRecepcion.Last().setGenerador(ref GeneradorUnico);
                    contadorDeCamiones++;
                    ultimoCamion         = colaRecepcion.Last();
                    proximaLlegadaCamion = seteoDeProximos;
                    servicioRealizado    = true;
                    colaRecepcion.Last().agregarEstado("En Cola Recepción", reloj);
                }
                if (tiempoMinimo == proximaRecepcion && servicioRealizado == false)
                {
                    reloj            = proximaRecepcion;
                    estadoSimulacion = "Fin Atención Recepción";
                    recepcion.estado = "Libre";
                    proximaRecepcion = seteoDeProximos;
                    recepcion.getCamionSiendoAtendido().agregarEstado("Fin Atención Recepción", reloj);
                    //recepcion.getCamionSiendoAtendido().setGenerador(ref GeneradorUnico);

                    servicioRealizado = true;
                    if (recepcion.getCamionSiendoAtendido().getTipoCamion() == 1)
                    {
                        colaDarcena.Enqueue(recepcion.getCamionSiendoAtendido());
                        ultimoCamion = colaDarcena.Last();
                        colaDarcena.Last().agregarEstado("En Cola Dársena", reloj);
                    }
                    else
                    {
                        colaBalanza.Enqueue(recepcion.getCamionSiendoAtendido());
                        ultimoCamion = colaBalanza.Last();
                        colaBalanza.Last().agregarEstado("En Cola Balanza", reloj);
                    }
                    recepcion.setCamionSiendoAtendido(ningunCamion);
                }

                if (tiempoMinimo == proximaBalanza && servicioRealizado == false)
                {
                    reloj = proximaBalanza;

                    estadoSimulacion = "Fin Atención Balanza";
                    balanza.estado   = "Libre";

                    balanza.getCamionSiendoAtendido().agregarEstado("Fin Atención Balanza", reloj);

                    colaDarcena.Enqueue(balanza.getCamionSiendoAtendido());
                    ultimoCamion      = colaDarcena.Last();
                    proximaBalanza    = seteoDeProximos;
                    servicioRealizado = true;
                    balanza.setCamionSiendoAtendido(ningunCamion);
                    colaDarcena.Last().agregarEstado("En Cola Dársena", reloj);
                }

                if (tiempoMinimo == proximaDarcena1 && servicioRealizado == false)
                {
                    reloj            = proximaDarcena1;
                    estadoSimulacion = "Fin Atención Dársena1";
                    cantCamionesAtendidos++;
                    darsena1.estado = "Libre";

                    // darsena1.getCamionSiendoAtendido().agregarEstado("Fin Atención Dársena1", reloj);

                    listaCamionesAtendidos.Add(darsena1.getCamionSiendoAtendido());
                    listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].setHoraSalida(reloj);
                    listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].agregarEstado("Fin Atención Dársena1", reloj);
                    ultimoCamion      = darsena1.getCamionSiendoAtendido();
                    proximaDarcena1   = seteoDeProximos;
                    servicioRealizado = true;
                    contadorDescargasDarcena1++;
                    darsena1.setCamionSiendoAtendido(ningunCamion);
                }
                if (tiempoMinimo == proximaDarcena2 && servicioRealizado == false)
                {
                    reloj            = proximaDarcena2;
                    estadoSimulacion = "Fin Atención Dársena2";
                    cantCamionesAtendidos++;
                    darsena2.estado = "Libre";

                    //darsena2.getCamionSiendoAtendido().agregarEstado("Fin Atención Dársena2", reloj);

                    listaCamionesAtendidos.Add(darsena2.getCamionSiendoAtendido());
                    listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].setHoraSalida(reloj);
                    listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].agregarEstado("Fin Atención Dársena2", reloj);
                    ultimoCamion      = darsena2.getCamionSiendoAtendido();
                    proximaDarcena2   = seteoDeProximos;
                    servicioRealizado = true;
                    contadorDescargasDarcena2++;
                    darsena2.setCamionSiendoAtendido(ningunCamion);
                }
                if (tiempoMinimo == proximaCalibracionDarcena1 && servicioRealizado == false)
                {
                    reloj                      = proximaCalibracionDarcena1;
                    estadoSimulacion           = "Fin Calibración Dársena1";
                    proximaCalibracionDarcena1 = seteoDeProximos;
                    darsena1.estado            = "Libre";
                    servicioRealizado          = true;
                }
                if (tiempoMinimo == proximacalibracionDarcena2 && servicioRealizado == false)
                {
                    reloj                      = proximacalibracionDarcena2;
                    estadoSimulacion           = "Fin Calibración Dársena2";
                    proximacalibracionDarcena2 = seteoDeProximos;
                    darsena2.estado            = "Libre";
                    servicioRealizado          = true;
                }

                tiempoSimulado = tiempoSimulado + reloj - relojAnterior;

                if (contadorDeIteracionesRealizadas == iteraciones)
                {
                    cantCamionesNOAtendidos = colaRecepcion.Count;
                    IteracionesCompletadas  = true;
                    return(Tuple.Create(cantCamionesAtendidos, cantCamionesNOAtendidos));
                }
            }
            generarVectorEstado(dia);

            estadoSimulacion = "Fin del Día";

            cantCamionesNOAtendidos = colaRecepcion.Count;

            generarVectorEstado(dia);

            return(Tuple.Create(cantCamionesAtendidos, cantCamionesNOAtendidos));
        }
Beispiel #2
0
        private void realizarAccion()
        {
            if (tiempoMinimo == proximaLlegadaCamion && servicioRealizado == false)
            {
                reloj            = proximaLlegadaCamion;
                estadoSimulacion = "Llegada Camión";
                colaRecepcion.Enqueue(new Camion(contadorDeCamiones));
                colaRecepcion.Last().setGenerador(ref GeneradorUnico);
                contadorDeCamiones++;
                ultimoCamion         = colaRecepcion.Last();
                proximaLlegadaCamion = seteoDeProximos;
                servicioRealizado    = true;
                colaRecepcion.Last().agregarEstado("En Cola Recepción", reloj);
            }
            if (tiempoMinimo == proximaRecepcion && servicioRealizado == false)
            {
                reloj            = proximaRecepcion;
                estadoSimulacion = "Fin Atención Recepción";
                recepcion.estado = "Libre";
                proximaRecepcion = seteoDeProximos;
                recepcion.getCamionSiendoAtendido().agregarEstado("Fin Atención Recepción", reloj);
                //recepcion.getCamionSiendoAtendido().setGenerador(ref GeneradorUnico);

                servicioRealizado = true;
                if (recepcion.getCamionSiendoAtendido().getTipoCamion() == 1)
                {
                    colaDarcena.Enqueue(recepcion.getCamionSiendoAtendido());
                    ultimoCamion = colaDarcena.Last();
                    colaDarcena.Last().agregarEstado("En Cola Dársena", reloj);
                }
                else
                {
                    colaBalanza.Enqueue(recepcion.getCamionSiendoAtendido());
                    ultimoCamion = colaBalanza.Last();
                    colaBalanza.Last().agregarEstado("En Cola Balanza", reloj);
                }
                recepcion.setCamionSiendoAtendido(ningunCamion);
            }

            if (tiempoMinimo == proximaBalanza && servicioRealizado == false)
            {
                reloj = proximaBalanza;

                estadoSimulacion = "Fin Atención Balanza";
                balanza.estado   = "Libre";

                balanza.getCamionSiendoAtendido().agregarEstado("Fin Atención Balanza", reloj);

                colaDarcena.Enqueue(balanza.getCamionSiendoAtendido());
                ultimoCamion      = colaDarcena.Last();
                proximaBalanza    = seteoDeProximos;
                servicioRealizado = true;
                balanza.setCamionSiendoAtendido(ningunCamion);
                colaDarcena.Last().agregarEstado("En Cola Dársena", reloj);
            }

            if (tiempoMinimo == proximaDarcena1 && servicioRealizado == false)
            {
                reloj            = proximaDarcena1;
                estadoSimulacion = "Fin Atención Dársena1";
                cantCamionesAtendidos++;
                darsena1.estado = "Libre";

                // darsena1.getCamionSiendoAtendido().agregarEstado("Fin Atención Dársena1", reloj);

                listaCamionesAtendidos.Add(darsena1.getCamionSiendoAtendido());
                listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].setHoraSalida(reloj);
                listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].agregarEstado("Fin Atención Dársena1", reloj);
                ultimoCamion      = darsena1.getCamionSiendoAtendido();
                proximaDarcena1   = seteoDeProximos;
                servicioRealizado = true;
                contadorDescargasDarcena1++;
                darsena1.setCamionSiendoAtendido(ningunCamion);
            }
            if (tiempoMinimo == proximaDarcena2 && servicioRealizado == false)
            {
                reloj            = proximaDarcena2;
                estadoSimulacion = "Fin Atención Dársena2";
                cantCamionesAtendidos++;
                darsena2.estado = "Libre";

                //darsena2.getCamionSiendoAtendido().agregarEstado("Fin Atención Dársena2", reloj);

                listaCamionesAtendidos.Add(darsena2.getCamionSiendoAtendido());
                listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].setHoraSalida(reloj);
                listaCamionesAtendidos[listaCamionesAtendidos.Count - 1].agregarEstado("Fin Atención Dársena2", reloj);
                ultimoCamion      = darsena2.getCamionSiendoAtendido();
                proximaDarcena2   = seteoDeProximos;
                servicioRealizado = true;
                contadorDescargasDarcena2++;
                darsena2.setCamionSiendoAtendido(ningunCamion);
            }
            if (tiempoMinimo == proximaCalibracionDarcena1 && servicioRealizado == false)
            {
                reloj                      = proximaCalibracionDarcena1;
                estadoSimulacion           = "Fin Calibración Dársena1";
                proximaCalibracionDarcena1 = seteoDeProximos;
                darsena1.estado            = "Libre";
                servicioRealizado          = true;
            }
            if (tiempoMinimo == proximacalibracionDarcena2 && servicioRealizado == false)
            {
                reloj                      = proximacalibracionDarcena2;
                estadoSimulacion           = "Fin Calibración Dársena2";
                proximacalibracionDarcena2 = seteoDeProximos;
                darsena2.estado            = "Libre";
                servicioRealizado          = true;
            }
        }
Beispiel #3
0
 public void setCamionSiendoAtendido(Camion camionSiendoAtendido)
 {
     this.camionSiendoAtendido = camionSiendoAtendido;
 }