示例#1
0
        /// <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);
        }
示例#2
0
        /// <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;
        }
示例#3
0
        /// <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());
        }
示例#4
0
        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;
        }
示例#5
0
        /// <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;
        }