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)); }
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; } }
public void setCamionSiendoAtendido(Camion camionSiendoAtendido) { this.camionSiendoAtendido = camionSiendoAtendido; }