private void Calcular_nGrams(string texto, Boolean esPoemaMeta) { N_Gram nGram1 = new N_Gram(texto, 1); N_Gram nGram2 = new N_Gram(texto, 2); N_Gram nGram3 = new N_Gram(texto, 3); List <string> _nGram_1 = nGram1.Hacer_NGram(Estructuras.instancia.lista_nGram_1); List <string> _nGram_2 = nGram2.Hacer_NGram(Estructuras.instancia.lista_nGram_2); List <string> _nGram_3 = nGram3.Hacer_NGram(Estructuras.instancia.lista_nGram_3); Estructuras.instancia.Agregar_nGrams(_nGram_1, _nGram_2, _nGram_3); if (esPoemaMeta) { List <string> _nGram_1_PM = nGram1.Hacer_NGram(new List <string>()); List <string> _nGram_2_PM = nGram2.Hacer_NGram(new List <string>()); List <string> _nGram_3_PM = nGram3.Hacer_NGram(new List <string>()); Estructuras.instancia.Agregar_nGrams_PoemaMeta(_nGram_1_PM, _nGram_2_PM, _nGram_3_PM); Estructuras.instancia.dic_Histo_nGram_2_PoemaMeta = new Dictionary <string, int>(); Estructuras.instancia.dic_Histo_nGram_2_PoemaMeta = Calcular_Histogramas(_nGram_2, _nGram_2_PM); //Console.WriteLine("\nPOEMA META\n:"); //Estructuras.instancia.MostrarDiccionario_string_int(Estructuras.instancia.dic_Histo_nGram_2_PoemaMeta); /*Console.WriteLine("Meta: \n"); * Estructuras.instancia.MostrarLista(_nGram_2_PM); * * Console.WriteLine("\nGram: \n"); * Estructuras.instancia.MostrarLista(_nGram_2); * * Console.WriteLine("\nHistograma: \n"); * Estructuras.instancia.MostrarDiccionario_string_int(Estructuras.instancia.dic_Histo_nGram_2_PoemaMeta);*/ } }
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); }