Ejemplo n.º 1
0
 /// <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;
 }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 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());
        }
Ejemplo n.º 4
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());


        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        /// <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);
        }