public void Insertar(Trabajo T) { if (!Existe(T)) { if (raiz == null) { raiz = T; } else { Trabajo anterior = null, reco; reco = raiz; while (reco != null) { anterior = reco; if (precioTotal(T) < precioTotal(reco)) { reco = reco.izq; } else { reco = reco.der; } } if (precioTotal(T) < precioTotal(anterior)) { anterior.izq = T; } else { anterior.der = T; } } } }
public Trabajo(int id, List <Disenador> disenadores, Ubicacion ubicacion, Seccion seccion) { Id = id; Disenadores = disenadores; Ubicacion = ubicacion; Seccion = seccion; izq = null; der = null; }
private void Cantidad(Trabajo reco) { if (reco != null) { cant++; Cantidad(reco.izq); Cantidad(reco.der); } }
public Trabajo() { Id = 0; Disenadores = new List <Disenador>(); Ubicacion = null; Seccion = null; izq = null; der = null; }
public int precioTotal(Trabajo T) { int total = 0; total += T.Seccion.Precio; foreach (Disenador d in T.Disenadores) { total += d.Salario; } return(total); }
private void CantidadNodosHoja(Trabajo reco) { if (reco != null) { if (reco.izq == null && reco.der == null) { cant++; } CantidadNodosHoja(reco.izq); CantidadNodosHoja(reco.der); } }
private void RetornarAltura(Trabajo reco, int nivel) { if (reco != null) { RetornarAltura(reco.izq, nivel + 1); if (nivel > altura) { altura = nivel; } RetornarAltura(reco.der, nivel + 1); } }
public List <Trabajo> RamificacionyPoda(Trabajo t) { Trabajo anterior = new Trabajo(); List <Trabajo> trabajos = new List <Trabajo>(); Trabajo aux = t; while (aux != null) { trabajos.Add(aux); anterior = aux; aux = aux.izq; } return(trabajos); }
public void MayorValorl() { if (raiz != null) { Trabajo anterior = new Trabajo(); Trabajo reco = raiz; while (reco.der != null) { anterior = reco; reco = reco.der; } Console.WriteLine("Mayor valor del árbol:" + precioTotal(anterior)); } }
public List <Trabajo> Mutacion(int n, Trabajo raiz) { var tiempo = Stopwatch.StartNew(); Trabajo Padre1; Trabajo Padre2; Trabajo temp = raiz, anterior, preanterior; a++; preanterior = temp; a++; temp = temp.izq; a++; anterior = temp; a++; temp = temp.izq; a++; while (temp != null) { c++; preanterior = anterior; a++; anterior = temp; a++; temp = temp.izq; a++; } c++; if (anterior.der != null) { c++; preanterior = anterior.der; a++; } Padre1 = anterior; a++; Padre2 = preanterior; a++; // ciclo para encontar al menor o sea al primer padre List <Trabajo> padres = new List <Trabajo> { Padre1, Padre2 }; a++; for (int i = 0; i < n; i++) // for para hacer las n generaciones { c++; Console.WriteLine("Generacion: " + i); padres = mutar(padres); a++; } c++; Console.WriteLine("Asignaciones: " + a); Console.WriteLine("Comparaciones: " + c); Console.WriteLine("Tiempo " + tiempo.Elapsed.TotalMilliseconds); return(padres); }
private void ImprimirEntre(Trabajo reco) { if (reco != null) { ImprimirEntre(reco.izq); Console.WriteLine("Id: " + reco.Id + " PrecioTotal: " + precioTotal(reco)); Console.WriteLine(" Seccion:" + reco.Seccion.Nombre + " Seccion Horario:" + reco.Seccion.Horario + " Precio:" + reco.Seccion.Precio); Console.WriteLine(" Ubicacion:" + reco.Ubicacion.Nombre + " Diurno:" + reco.Ubicacion.Diurno + " Nocturno:" + reco.Ubicacion.Nocturno); foreach (Disenador d in reco.Disenadores) { Console.WriteLine(" Disenador:" + d.Nombre + " Nocturno:" + d.Nocturno + " Diurno:" + d.Diurno + " Salario" + d.Salario); } ImprimirEntre(reco.der); } }
public List <Trabajo> mutar(List <Trabajo> padres) { Trabajo t1 = creaTrabajo(padres); Trabajo t2 = creaTrabajo(padres); padres.Add(t1); a++; padres.Add(t2); a++; // impresion de los dos padres y los dos hijos imprimirT(padres); List <int> precioTrabajo = new List <int> { precioTotal(padres[0]), precioTotal(padres[1]), precioTotal(t1), precioTotal(t2) }; a++; precioTrabajo.Sort(); a++; List <Trabajo> mejoresDeLaGen = new List <Trabajo>(); a++; foreach (Trabajo t in padres) { c++; if (precioTotal(t) == precioTrabajo[0] || precioTotal(t) == precioTrabajo[1]) { c++; mejoresDeLaGen.Add(t); a++; if (mejoresDeLaGen.Count() == 2) { c++; break; } } a++; } c++; Console.WriteLine("Los mejores de la generacion fueron: "); imprimirT(mejoresDeLaGen); return(mejoresDeLaGen); }
public void BorrarMenor() { if (raiz != null) { if (raiz.izq == null) { raiz = raiz.der; } else { Trabajo atras = raiz; Trabajo reco = raiz.izq; while (reco.izq != null) { atras = reco; reco = reco.izq; } atras.izq = reco.der; } } }
public bool Existe(Trabajo T) { Trabajo reco = raiz; while (reco != null) { if (T.Id == reco.Id) { return(true); } else if (T.Id > reco.Id) { reco = reco.der; } else { reco = reco.izq; } } return(false); }
public List <Trabajo> RamificacionyPoda(Trabajo t) { var tiempo = Stopwatch.StartNew(); int a = 0, c = 0; Trabajo anterior = new Trabajo(); List <Trabajo> trabajos = new List <Trabajo>(); Trabajo aux = t; a++; while (aux != null) { c++; trabajos.Add(aux); anterior = aux; aux = aux.izq; a += 3; } c++; Console.WriteLine("**Algoritmo de Ramificacion y Poda**"); Console.WriteLine("Asignaciones" + a); Console.WriteLine("Comparaciones " + c); Console.WriteLine("Tiempo " + tiempo.Elapsed.TotalMilliseconds); return(trabajos); }
public Trabajo creaTrabajo(List <Trabajo> padres) { int s = r.Next(0, 2); //NUMERO RANDOM PARA SECCION int u = r.Next(0, 2); //NUMERO RANDOM PARA UBICACION int dis = r.Next(0, 2); //NUMERO RANDOM PARA CANTIDAD DE DISENADORES a += 3; //nuevo trabajo Trabajo t1 = new Trabajo(); // se agrega seccion y ubicacion y la cantidad de jugadores de cada padre random t1.Seccion = padres[s].Seccion; t1.Ubicacion = padres[u].Ubicacion; int cantDisenadores = padres[dis].Disenadores.Count(); a += 3; int horario = t1.Seccion.Horario; a++; //horario predefido para disenadores List <Disenador> d = new List <Disenador>(); //lista donde se guardan los disenadores del nuevo trabajo a++; for (int j = 0; j < cantDisenadores; j++) { c++; int indDisenador = r.Next(0, disenadores.Count); //genera random el disenador if (horario == 1) // 7am a 4pm { c++; if ((disenadores[indDisenador].Diurno == 1) || (disenadores[indDisenador].Diurno == 2)) { c++; d.Add(disenadores[indDisenador]); a++; } else { c++; j--; a++; } } else if (horario == 2) // 7am a 11am { c++; if (disenadores[indDisenador].Diurno == 2) { c++; d.Add(disenadores[indDisenador]); a++; } else { c++; j--; a++; } } else if (horario == 3) // 7pm a 4am { c++; if (disenadores[indDisenador].Nocturno == 3 || disenadores[indDisenador].Nocturno == 4) { c++; d.Add(disenadores[indDisenador]); a++; } else { c++; j--; a++; } } else if (horario == 4) // 7:00pm a 11:00pm { c++; if (disenadores[indDisenador].Nocturno == 4) { c++; d.Add(disenadores[indDisenador]); a++; } else { c++; j--; a++; } } } c++; t1.Disenadores = d; a++; return(t1); }
public ArbolBinarioOrdenado() { raiz = null; }