/// <summary> /// Permite agrupar aquellas paradas que se ecuentran en una misma estación. /// Precondición: Las paradas existen. /// Precondición: Las estaciones existen. /// </summary> /// <param name="paradas"></param> /// <param name="sim"></param> /// <returns></returns> public static List <Estacion> AgruparParadas(List <Stop> paradas, Simulacion sim) { //String[] troncales = DarCodEstTroncales(); String[] nomTroncales = DarNombreEstTroncales(); List <Estacion> estaciones = new List <Estacion>(); int cont = 0; Estacion temp = null; for (int a = 0; a < nomTroncales.Length; a++) { temp = new Estacion(cont, nomTroncales[a], 0, 0, 0, sim); Parada p = null; for (int b = 0; b < paradas.Count; b++) { if (paradas[b].LongName.Contains(nomTroncales[a]) && StartEquals(nomTroncales[a], paradas[b].LongName.Trim())) { p = new Parada(paradas[b].StopId, paradas[b].LongName, paradas[b].DecimalLatitude, paradas[b].DecimalLongitude); temp.AgregarParada(p); } } temp.SetLatitud(p.Latitud); temp.SetLongitud(p.Longitud); estaciones.Add(temp); cont += 1; } for (int i = 0; i < paradas.Count; i++) { if (!IsInList(paradas[i].LongName, nomTroncales)) { temp = new Estacion(cont, paradas[i].LongName, paradas[i].DecimalLatitude, paradas[i].DecimalLongitude, 0, sim); Parada p = new Parada(paradas[i].StopId, paradas[i].LongName, paradas[i].DecimalLatitude, paradas[i].DecimalLongitude); temp.AgregarParada(p); estaciones.Add(temp); cont += 1; } } Console.WriteLine("Cantidad de estaciones: " + estaciones.Count); return(estaciones); }
/// <summary> /// Permite agrupar aquellas paradas que se ecuentran en una misma estación. /// Precondición: Las paradas existen. /// Precondición: Las estaciones existen. /// </summary> /// <param name="paradas"></param> /// <param name="sim"></param> /// <returns></returns> public static List<Estacion> AgruparParadas(List<Stop> paradas, Simulacion sim) { //String[] troncales = DarCodEstTroncales(); String[] nomTroncales = DarNombreEstTroncales(); List<Estacion> estaciones = new List<Estacion>(); int cont = 0; Estacion temp = null; for (int a = 0; a < nomTroncales.Length; a++) { temp = new Estacion(cont, nomTroncales[a], 0, 0, 0, sim); Parada p = null; for (int b = 0; b < paradas.Count; b++) { if (paradas[b].LongName.Contains(nomTroncales[a]) && StartEquals(nomTroncales[a], paradas[b].LongName.Trim())) { p = new Parada(paradas[b].StopId, paradas[b].LongName, paradas[b].DecimalLatitude, paradas[b].DecimalLongitude); temp.AgregarParada(p); } } temp.SetLatitud(p.Latitud); temp.SetLongitud(p.Longitud); estaciones.Add(temp); cont += 1; } for (int i = 0; i < paradas.Count; i++) { if (!IsInList(paradas[i].LongName, nomTroncales)) { temp = new Estacion(cont, paradas[i].LongName, paradas[i].DecimalLatitude, paradas[i].DecimalLongitude, 0, sim); Parada p = new Parada(paradas[i].StopId, paradas[i].LongName, paradas[i].DecimalLatitude, paradas[i].DecimalLongitude); temp.AgregarParada(p); estaciones.Add(temp); cont += 1; } } Console.WriteLine("Cantidad de estaciones: " + estaciones.Count); return estaciones; }
/// <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()); }
public static int BuscarIndiceEstacion(Estacion[] estaciones, int id) { for (int a = 0; a < estaciones.Length; a++) { if (estaciones[a].ContieneParada(id)) { return a; } } return -1; }
/// <summary> /// Permite generar los pasajeros que llegan a cada una de las estaciones haciendo uso de distribución de Poisson. /// Postcondición: se crea lista de eventos futuros de pasajeros. /// </summary> /// <param name="cantidad"></param> /// <param name="duracion"></param> /// <param name="estaciones"></param> /// <param name="idEstIn"></param> /// <returns name="respuesta"></returns> public static bool GenerarPasajeros(int cantidad, int duracion, Estacion[] estaciones, int idEstIn) { //Console.WriteLine("entro"); bool respuesta = true; List<Pasajero> pasajeros = new List<Pasajero>(); Random a = new Random(); Random b = new Random(); int baseSim = 0; for (int i = 0; i < cantidad; i++) { int tiemp = (int)Proximo(0.3, b); baseSim = baseSim + tiemp; if (baseSim > 1080) { baseSim = 0; } Pasajero pas = new Pasajero(i, estaciones[idEstIn].GetId(), estaciones[(int)(a.Next(estaciones.Length))].GetId(), baseSim); pasajeros.Add(pas); } pasajeros.Sort(); List<string> pasajeros1 = new List<string>(); for (int i = 0; i < pasajeros.Count; i++) { pasajeros1.Add(pasajeros[i].ToString()); } System.IO.File.WriteAllLines(@"..\\..\\Almacenamiento\Pasajeros\estacion" + idEstIn + ".txt", pasajeros1); return respuesta; }