private Dictionary <string, int> Calcular_Histogramas(List <string> pNGram, List <string> lista_poemaMeta) { Histograma histograma = new Histograma(); Dictionary <string, int> histogramaObtenido = histograma.CalcularHistograma(pNGram, lista_poemaMeta); return(histogramaObtenido); }
public List <Individuo> IniciarProcesoGenetico() { CrearPoblacionInicial(); //While. A partir de aqui "población" se irá modificando, por lo que no hay que llamar alguna función de crearPoblación while (0 < generaciones) { // Console.WriteLine("Generación: " + generaciones); // Console.WriteLine("\n ******************* POBLACION ACTUAL: " + poblacion.Count); // Console.WriteLine("\n ******************* GENERACION: " + generaciones); for (int i = 0; i < poblacion.Count; i++) { N_Gram ngram = new N_Gram(poblacion[i].getTexto(), 2); List <string> lista = ngram.Hacer_NGram(new List <string>()); Histograma histograma = new Histograma(); Dictionary <string, int> dic_Histograma = new Dictionary <string, int>(); // Console.WriteLine("Empezó"); dic_Histograma = histograma.CalcularHistograma(Estructuras.instancia.lista_nGram_2, lista); // Console.WriteLine("Terminó"); int distancia = Adaptabilidad(dic_Histograma); poblacion[i].setDistancia(distancia); } // Console.WriteLine("Primer for. Listo!"); AsignarProbabilidades(); int contador = poblacion.Count; for (int i = 0; i < contador; i += 2) { // Console.WriteLine("\nCantidad Individuos: " + poblacion.Count); // Console.WriteLine("\nPareja 1 Elección: "); Individuo pareja_1 = null; while (pareja_1 == null) { if (poblacion.Count == 0) { // Console.WriteLine("No quedo nadie"); break; } else { pareja_1 = SeleccionarIndividuo(); } } // Console.WriteLine("\nPareja 2 Elección: "); Individuo pareja_2 = null; while (pareja_2 == null) { if (poblacion.Count == 0) { // Console.WriteLine("No quedo nadie"); break; } else { pareja_2 = SeleccionarIndividuo(); } } if ((pareja_1 != null) & (pareja_2 != null)) { /*Console.WriteLine("\n******************Inicio del Cruce******************"); * Console.WriteLine("***Pareja 1***"); * Console.WriteLine("\nPareja 1 Texto: " + pareja_1.getTexto()); * Console.WriteLine("\nPareja 1 Distancia: " + pareja_1.getDistancia()); * Console.WriteLine("\nPareja 1 Proba: " + pareja_1.getProbabilidad()); * * Console.WriteLine("***Pareja 2***"); * Console.WriteLine("\nPareja 2 Texto: " + pareja_2.getTexto()); * Console.WriteLine("\nPareja 2 Distancia: " + pareja_2.getDistancia()); * Console.WriteLine("\nPareja 2 Proba: " + pareja_2.getProbabilidad());*/ CruzarPareja(pareja_1, pareja_2); } } // Console.WriteLine("Segundo for. Listo!"); poblacion = hijosCruce; hijosCruce = new List <Individuo>(); int indice = (int)indiceRandom.Next(0, poblacion.Count); Mutaciones(poblacion[indice]); //Mutar a un random generaciones--; } // DEVOLVER LOS INDIVIDUOS MAS APTOS List <int> distanciasFinales = new List <int>(); List <Individuo> individuosPrometedores = new List <Individuo>(); for (int i = 0; i < poblacion.Count; i++) { N_Gram ngram = new N_Gram(poblacion[i].getTexto(), 2); List <string> lista = ngram.Hacer_NGram(new List <string>()); Histograma histograma = new Histograma(); Dictionary <string, int> dic_Histograma = new Dictionary <string, int>(); dic_Histograma = histograma.CalcularHistograma(Estructuras.instancia.lista_nGram_2, lista); int distancia = Adaptabilidad(dic_Histograma); poblacion[i].setDistancia(distancia); distanciasFinales.Add(distancia); } distanciasFinales.Sort(); for (int i = 0; i < 3; i++) { individuosPrometedores.Add(poblacion.Find(x => x.getDistancia() == distanciasFinales[i])); poblacion.Remove(individuosPrometedores[i]); } return(individuosPrometedores); }