/// <summary> /// Permite verificar si un pasajero se ha de bajar en la estación actual o continuar en su bus. /// Precondición: El bus del pasajero se encuentra en una estación. /// </summary> /// <param name="idEst"></param> /// <param name="actual"></param> /// <param name="grafo"></param> /// <returns int name = "Estado"></returns> public int EsMiEstacion(int idEst, Bus actual, GrafoMatriz<Estacion> grafo) { int parada = actual.EstacionAct(); int proximaEstacion = actual.EstacionAct(); if (parada + 1 < actual.DarRuta().DarParadas().Count) { proximaEstacion = actual.DarRuta().DarParadas()[parada + 1][0]; int paradaActual = actual.DarRuta().DarParadas()[parada][0]; double[,] matrizGrafo = grafo.DarMatriz(); if (matrizGrafo[paradaActual, EstDestinoId] == 0) { Estado = 4; } if (matrizGrafo[paradaActual, EstDestinoId] >= matrizGrafo[proximaEstacion, EstDestinoId]) { Estado = 2; } else { Estado = 1; } } else { Estado = 4; } return Estado; }
/// <summary> /// Permite verificar si un pasajero se ha de bajar en la estación actual o continuar en su bus. /// Precondición: El bus del pasajero se encuentra en una estación. /// </summary> /// <param name="idEst"></param> /// <param name="actual"></param> /// <param name="grafo"></param> /// <returns int name = "Estado"></returns> public int EsMiEstacion(int idEst, Bus actual, GrafoMatriz <Estacion> grafo) { int parada = actual.EstacionAct(); int proximaEstacion = actual.EstacionAct(); if (parada + 1 < actual.DarRuta().DarParadas().Count) { proximaEstacion = actual.DarRuta().DarParadas()[parada + 1][0]; int paradaActual = actual.DarRuta().DarParadas()[parada][0]; double[,] matrizGrafo = grafo.DarMatriz(); if (matrizGrafo[paradaActual, EstDestinoId] == 0) { Estado = 4; } if (matrizGrafo[paradaActual, EstDestinoId] >= matrizGrafo[proximaEstacion, EstDestinoId]) { Estado = 2; } else { Estado = 1; } } else { Estado = 4; } return(Estado); }
/// <summary> /// Permite realizar las operaciones del bus, que consiten en desenso de pasajeros, subir pasajeros y avanzar a otra estación. /// </summary> /// <param name="tiempo"></param> /// <param name="grafo"></param> /// <returns></returns> public void AtiendeBus(int tiempo, GrafoMatriz <Estacion> grafo) { if (tiempo == siguienteInteraccion) { Estacion[] estaciones = grafo.DarVertices(); int EstacionActualRuta = ruta.DarParadas()[EstacionActual][0]; int NumParada = ruta.DarParadas()[EstacionActual][1]; int NumCola = ruta.DarParadas()[EstacionActual][2]; if (ruta.DarParadas().Count <= EstacionActual + 1) { TerminoRecorrido = true; } Estacion estacion = estaciones[EstacionActualRuta]; Parada parada = estacion.DarParadas()[NumParada]; if (!parada.Estado && !Estado) { parada.Estado = true; this.Estado = true; for (int i = 0; i < Pasajeros.Length; i++) { if (Pasajeros[i] != null) { if (Pasajeros[i].EsMiEstacion(EstacionActual, this, grafo) == 4) { Pasajeros[i] = null; CapacidadActual--; } else if (Pasajeros[i].EsMiEstacion(EstacionActual, this, grafo) == 1) { estaciones[EstacionActual].agregarPasajeros(Pasajeros[i]); estaciones[EstacionActual].AumentarCantidadPasajeros(); Pasajeros[i] = null; CapacidadActual--; } } } ArregloCola <Pasajero> pasajeros = parada.ColasPasajeros; while (!pasajeros.ColaVacia(NumCola) && CapacidadActual < Capacidad) { agregarPasajero(pasajeros.ObtenerElemento(NumCola)); pasajeros.EliminarElemento(NumCola); CapacidadActual++; } siguienteInteraccion++; datos[tiempo] = "Nombre estación: " + grafo.DarVertices()[EstacionActualRuta].GetNombre() + " Siguiente interacción: " + siguienteInteraccion + " Cantidad pasajeros: " + CapacidadActual + " Tiempo Actual: " + tiempo + " Numero parada: " + NumParada + " Cola: " + NumCola; } else if (Estado) { datos[tiempo] = "Atiende"; parada.Estado = false; this.Estado = false; EstacionActual++; if ((tiempo > 120 && tiempo < 240) || (tiempo > 780 && tiempo < 900)) { siguienteInteraccion += (int)(grafo.DarMatriz()[EstacionActualRuta, ruta.DarParadas()[EstacionActual][0]] / VELOCIDAD_PICO); } else { //Console.WriteLine(ruta.DarParadas()[EstacionActual][0]); //Console.WriteLine(grafo.DarMatriz()[EstacionActualRuta, ruta.DarParadas()[EstacionActual][0]]); siguienteInteraccion += (int)(grafo.DarMatriz()[EstacionActualRuta, ruta.DarParadas()[EstacionActual][0]] / VELOCIDAD_VALLE); } } else { datos[tiempo] = "Espera Atención"; siguienteInteraccion++; } } else { datos[tiempo] = "Espera"; } Utilidades.ExportarInfo(datos, @"Informacion\bus" + this.ruta.GetNombre() + " ", this.GetHashCode()); }
/// <summary> /// Permite realizar las operaciones del bus, que consiten en desenso de pasajeros, subir pasajeros y avanzar a otra estación. /// </summary> /// <param name="tiempo"></param> /// <param name="grafo"></param> /// <returns></returns> public void AtiendeBus(int tiempo, GrafoMatriz<Estacion> grafo) { if (tiempo == siguienteInteraccion) { Estacion[] estaciones = grafo.DarVertices(); int EstacionActualRuta = ruta.DarParadas()[EstacionActual][0]; int NumParada = ruta.DarParadas()[EstacionActual][1]; int NumCola = ruta.DarParadas()[EstacionActual][2]; if (ruta.DarParadas().Count <= EstacionActual + 1) { TerminoRecorrido = true; } Estacion estacion = estaciones[EstacionActualRuta]; Parada parada = estacion.DarParadas()[NumParada]; if (!parada.Estado && !Estado) { parada.Estado = true; this.Estado = true; for (int i = 0; i < Pasajeros.Length; i++) { if (Pasajeros[i] != null) { if (Pasajeros[i].EsMiEstacion(EstacionActual, this, grafo) == 4) { Pasajeros[i] = null; CapacidadActual--; } else if (Pasajeros[i].EsMiEstacion(EstacionActual, this, grafo) == 1) { estaciones[EstacionActual].agregarPasajeros(Pasajeros[i]); estaciones[EstacionActual].AumentarCantidadPasajeros(); Pasajeros[i] = null; CapacidadActual--; } } } ArregloCola<Pasajero> pasajeros = parada.ColasPasajeros; while (!pasajeros.ColaVacia(NumCola) && CapacidadActual < Capacidad) { agregarPasajero(pasajeros.ObtenerElemento(NumCola)); pasajeros.EliminarElemento(NumCola); CapacidadActual++; } siguienteInteraccion++; datos[tiempo] = "Nombre estación: " + grafo.DarVertices()[EstacionActualRuta].GetNombre() + " Siguiente interacción: " + siguienteInteraccion + " Cantidad pasajeros: " + CapacidadActual +" Tiempo Actual: " + tiempo + " Numero parada: " + NumParada + " Cola: " + NumCola; } else if (Estado) { datos[tiempo] = "Atiende"; parada.Estado = false; this.Estado = false; EstacionActual++; if ((tiempo > 120 && tiempo < 240) || (tiempo > 780 && tiempo < 900)) { siguienteInteraccion += (int)(grafo.DarMatriz()[EstacionActualRuta, ruta.DarParadas()[EstacionActual][0]] / VELOCIDAD_PICO); } else { //Console.WriteLine(ruta.DarParadas()[EstacionActual][0]); //Console.WriteLine(grafo.DarMatriz()[EstacionActualRuta, ruta.DarParadas()[EstacionActual][0]]); siguienteInteraccion += (int)(grafo.DarMatriz()[EstacionActualRuta, ruta.DarParadas()[EstacionActual][0]] / VELOCIDAD_VALLE); } } else { datos[tiempo] = "Espera Atención"; siguienteInteraccion++; } } else { datos[tiempo] = "Espera"; } Utilidades.ExportarInfo(datos, @"Informacion\bus" + this.ruta.GetNombre()+" ", this.GetHashCode()); }
/// <summary> /// Permite generar los pasajeros de la estación y agregarlos a la lista de pasajeros de la estación, desde donde son enviados a la cola de su ruta correspondiente. /// Precondición: Lista de eventos futuros de pasajeros existe. /// </summary> /// <param name="tiempo"></param> /// <param name="grafo"></param> /// <returns></returns> public void AtiendeEstacion(int tiempo, GrafoMatriz <Estacion> grafo) { LeerPasajeros(tiempo); for (int i = 0; i < Pasajeros.Count; i++) { int dest = Pasajeros[i].GetEstacionDestinoId(); //bool encontro = true; Queue <Pasajero> posible = null; for (int j = 0; j < RutasPosibles.Count; j++) { for (int k = 0; k < RutasPosibles[j].DarParadas().Count; k++) { if (this.Id == RutasPosibles[j].DarParadas()[k][0]) { if (grafo.DarMatriz()[k, dest] > grafo.DarMatriz()[k + 1, dest]) { //Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.AgregarElemento(Pasajeros[i], RutasPosibles[j].DarParadas()[k][2]); //Pasajeros.RemoveAt(i); if (posible == null) { posible = Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.ObtenerCola(RutasPosibles[j].DarParadas()[k][2]); } else if (Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.TamanoCola(RutasPosibles[j].DarParadas()[k][2]) < posible.Count) { posible = Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.ObtenerCola(RutasPosibles[j].DarParadas()[k][2]); } //encontro = false; } } } } if (posible != null) { posible.Enqueue(Pasajeros[i]); Pasajeros.RemoveAt(i); } } string cadena = ""; for (int i = 0; i < Paradas.Count; i++) { cadena += "Parada numero: " + i + " "; for (int j = 0; j < Paradas[i].ColasPasajeros.DarTamano(); j++) { if (Paradas[i].ColasPasajeros.colaEnUso(j)) { cadena += "Cantidad cola " + j + ": " + Paradas[i].ColasPasajeros.TamanoCola(j) + " "; } } cadena += "|| "; } cadena += "Cantidad pasajeros Historico : " + CantidadPasajeros + " Cantidad pasajeros Actual " + cantidadPasajerosEstacion() + " Cantidad pasajeros lista: " + Pasajeros.Count; //cadena = this.Nombre; //for (int i = 0; i < RutasPosibles.Count; i++) //{ // cadena += RutasPosibles[i].GetNombre(); //} datos[tiempo] = cadena; Utilidades.ExportarInfo(datos, @"InformacionEst\" + this.Nombre, Id); }
/// <summary> /// Permite generar los pasajeros de la estación y agregarlos a la lista de pasajeros de la estación, desde donde son enviados a la cola de su ruta correspondiente. /// Precondición: Lista de eventos futuros de pasajeros existe. /// </summary> /// <param name="tiempo"></param> /// <param name="grafo"></param> /// <returns></returns> public void AtiendeEstacion(int tiempo, GrafoMatriz<Estacion> grafo) { LeerPasajeros(tiempo); for (int i = 0; i < Pasajeros.Count; i++) { int dest = Pasajeros[i].GetEstacionDestinoId(); //bool encontro = true; Queue<Pasajero> posible = null; for (int j = 0; j < RutasPosibles.Count; j++) { for (int k = 0; k < RutasPosibles[j].DarParadas().Count ; k++) { if (this.Id == RutasPosibles[j].DarParadas()[k][0]) { if (grafo.DarMatriz()[k, dest] > grafo.DarMatriz()[k + 1, dest]) { //Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.AgregarElemento(Pasajeros[i], RutasPosibles[j].DarParadas()[k][2]); //Pasajeros.RemoveAt(i); if (posible == null) { posible = Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.ObtenerCola(RutasPosibles[j].DarParadas()[k][2]); }else if (Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.TamanoCola(RutasPosibles[j].DarParadas()[k][2]) < posible.Count) { posible = Paradas[RutasPosibles[j].DarParadas()[k][1]].ColasPasajeros.ObtenerCola(RutasPosibles[j].DarParadas()[k][2]); } //encontro = false; } } } } if (posible != null) { posible.Enqueue(Pasajeros[i]); Pasajeros.RemoveAt(i); } } string cadena = ""; for (int i = 0; i < Paradas.Count; i++) { cadena += "Parada numero: " + i + " "; for (int j = 0; j < Paradas[i].ColasPasajeros.DarTamano(); j++) { if (Paradas[i].ColasPasajeros.colaEnUso(j)) { cadena += "Cantidad cola " + j + ": " + Paradas[i].ColasPasajeros.TamanoCola(j) + " "; } } cadena += "|| "; } cadena += "Cantidad pasajeros Historico : " + CantidadPasajeros +" Cantidad pasajeros Actual " + cantidadPasajerosEstacion() + " Cantidad pasajeros lista: " + Pasajeros.Count; //cadena = this.Nombre; //for (int i = 0; i < RutasPosibles.Count; i++) //{ // cadena += RutasPosibles[i].GetNombre(); //} datos[tiempo] = cadena; Utilidades.ExportarInfo(datos, @"InformacionEst\" +this.Nombre, Id); }