Пример #1
0
        // Generacional
        public static (ValoresFunciones valores, float fitness) AlgoritmoGeneticoGeneracional(
            int tamañoPoblacion, int dimension, int iteraciones, int maxEvaluaciones, FuncionFitness fitness,
            FuncionSeleccion funcionSeleccion, FuncionCruzamiento funcionCruzamiento, double probCruzamiento,
            FuncionMutacion funcionMutacion, double probMutacion)
        {
            List <ValoresFunciones> poblacion;
            List <ValoresFunciones> nuevaPoblacion;
            List <ValoresFunciones> padres, hijos;
            List <float>            fitnessSoluciones;
            double probabilidad;
            int    evaluacion = 0;


            poblacion         = generarPoblacionAleatoria(tamañoPoblacion, dimension);
            fitnessSoluciones = fitnessDePoblacion(poblacion, fitness);
            evaluacion       += tamañoPoblacion;

            for (int i = 0; i < iteraciones && evaluacion < maxEvaluaciones; i++)
            {
                nuevaPoblacion = new List <ValoresFunciones>();
                while (nuevaPoblacion.Count < tamañoPoblacion)
                {
                    // Seleccion
                    padres = funcionSeleccion(poblacion, fitnessSoluciones);

                    //  Cruzamiento
                    probabilidad = rand.NextDouble();
                    if (probabilidad > probCruzamiento)
                    {
                        continue;
                    }
                    hijos = funcionCruzamiento(padres);

                    // Mutacion
                    hijos = funcionMutacion(hijos, probMutacion);

                    nuevaPoblacion.AddRange(hijos);
                }

                poblacion         = nuevaPoblacion;
                fitnessSoluciones = fitnessDePoblacion(poblacion, fitness);
                evaluacion       += tamañoPoblacion;
            }


            //Ordena las soluciones por su funcion fitness
            var indexOrdenadaPorFitness = from f in fitnessSoluciones
                                          orderby f
                                          select fitnessSoluciones.IndexOf(f);

            int pos = indexOrdenadaPorFitness.ElementAt(0);

            return(poblacion[pos], fitnessSoluciones[pos]);
        }
Пример #2
0
        public static List <float> fitnessDePoblacion(List <ValoresFunciones> poblacion, FuncionFitness funcionFitness)
        {
            List <float> fitnessPoblacion = new List <float>();

            fitnessPoblacion.Capacity = poblacion.Count;
            float fitness;

            for (int i = 0; i < poblacion.Count; i++)
            {
                fitness = funcionFitness(poblacion[i]);
                fitnessPoblacion.Add(fitness);
            }

            return(fitnessPoblacion);
        }