Example #1
0
        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);*/
            }
        }
Example #2
0
        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);
        }