// IMPRIME UNA SOLUCION en consola public void PrintIndividuo() { List <Vehiculo> listaEsperaTemp = this.vehiculos; List <Linea> lineasTemp = this.lineas; Console.WriteLine("##############################################################"); Console.WriteLine("##############################################################"); Console.WriteLine("LINEAS"); for (int i = 0; i < lineasTemp.Count; i++) { Console.WriteLine("---------------------------------------------------------------"); Console.WriteLine("Linea: " + i); Console.WriteLine("Tiempo de atencion: " + lineasTemp.ElementAt(i).GetTiempoAtencion()); Console.WriteLine("Tiempo restante: " + lineasTemp.ElementAt(i).GetTiempoRestante()); Console.WriteLine("¿Está activa?: " + lineasTemp.ElementAt(i).GetEstaActiva()); Console.WriteLine("---------------------------------------------------------------"); } Console.WriteLine(""); Console.WriteLine(""); Console.WriteLine("VEHICULOS"); for (int i = 0; i < listaEsperaTemp.Count; i++) { Console.WriteLine("---------------------------------------------------------------"); Console.WriteLine("Vehiculo: " + listaEsperaTemp.ElementAt(i).GetId()); Console.WriteLine("Tipo: " + listaEsperaTemp.ElementAt(i).GetTipo()); Console.WriteLine("Tiempo total: " + listaEsperaTemp.ElementAt(i).GetTiempo()); Console.WriteLine("Probabilidad: " + listaEsperaTemp.ElementAt(i).GetProbAsignado()); Linea linea = listaEsperaTemp.ElementAt(i).GetLineaAsignada(); if (linea != null) { Console.WriteLine("Tiempo restante de linea asignada: " + linea.GetTiempoRestante()); } Console.WriteLine("---------------------------------------------------------------"); } Console.WriteLine("FITNESS: " + this.fitness); Console.WriteLine("##############################################################"); Console.WriteLine("##############################################################"); }
public void SetLineaAsignada(Linea pLinea) { this.lineaAsignada = pLinea; }
/**************************************************** * Asigna los vehiculos de una poblacion a las lineas * ****************************************************/ public void AsignarVehiculosALineas() { // Asigna el valor inicial a cada linea foreach (Linea l in this.lineas) { l.RestablecerTiemporestante(); l.SetNumVehiculosAsignados(0); } foreach (Vehiculo v in this.vehiculos) { v.SetLineaAsignada(null); } // Ordena la lista de menor a mayor segun las probabilidades del vehiculo IEnumerable <Vehiculo> sorted = this.vehiculos.OrderBy(x => x.GetProbAsignado()); List <Vehiculo> tempListaEspera = new List <Vehiculo>(); foreach (Vehiculo v in sorted) { tempListaEspera.Add(v); } for (int i = 0; i < tempListaEspera.Count; i++) { // Aleatorio segun la probabilidad del vehiculo int rand = rnd.Next(0, 101); if ((rand < tempListaEspera.ElementAt(i).GetProbAsignado())) { Vehiculo tempVehiculo = tempListaEspera.ElementAt(i); // Busco las lineas en que puede entrar List <Linea> tempLineas = new List <Linea>(); for (int j = 0; j < this.lineas.Count; j++) { if (this.lineas.ElementAt(j).GetEstaActiva()) { List <char> opciones = this.lineas.ElementAt(j).getTiposVehiculos(); if (opciones.Contains(tempVehiculo.GetTipo())) { if ((this.lineas.ElementAt(j).GetTiempoRestante() - tempVehiculo.GetTiempo()) >= 0) { tempLineas.Add(this.lineas.ElementAt(j)); } } } } // Lista de lineas donde el vehiculo puede entrar if (tempLineas.Count > 0) { // ver cual está vacia Linea tempMenorLinea = tempLineas.ElementAt(0); bool asignado = false; foreach (Linea l in tempLineas) { if (l.GetTiempoAtencion() == l.GetTiempoRestante()) { tempVehiculo.SetLineaAsignada(l); l.RestarTiempo(tempVehiculo.GetTiempo()); l.IncrementarVehiculos(); asignado = true; break; } int tiempoAsignado = tempMenorLinea.GetTiempoAtencion() - tempMenorLinea.GetTiempoRestante(); if (tiempoAsignado > (l.GetTiempoAtencion() - l.GetTiempoRestante())) { tempMenorLinea = l; } } // si no, ver la que tenga menor carga if (asignado == false) { int futuroValorLinea = (tempMenorLinea.GetTiempoAtencion() - tempMenorLinea.GetTiempoRestante()) + tempVehiculo.GetTiempo(); int maximoConsumo = this.GetTiempoatencionLineaMasPequena() + 20; if (futuroValorLinea <= maximoConsumo) { tempVehiculo.SetLineaAsignada(tempMenorLinea); tempMenorLinea.RestarTiempo(tempVehiculo.GetTiempo()); tempMenorLinea.IncrementarVehiculos(); } } } /*Console.WriteLine("El vehiculo: " + tempVehiculo.GetId()); * Console.WriteLine("Puede entrar en las lineas: "); * foreach (Linea l in tempLineas) * { * Console.WriteLine("Tiempo Atención--> " + l.GetTiempoAtencion()); * Console.WriteLine("Tiempo restante--> " + l.GetTiempoRestante()); * Console.WriteLine("#"); * } * Console.WriteLine("--------------------------------------"); * Console.WriteLine("--------------------------------------");*/ } } // Busca la linea con menor capacidad Linea lineaConMenoCapacidad = this.GetLineaConMenorCapacidad(); int maximoValorPorLinea = lineaConMenoCapacidad.GetTiempoAtencion(); int rango = maximoValorPorLinea + 20; this.LineasEnRango(rango); }