예제 #1
0
        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);
        }
예제 #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);
        }