Exemplo n.º 1
0
        public static async Task Main()
        {
            //U de Mann Whitney utilizando configuración de ejemplo y configuración ajustada.
            var best_configuration = await U_Mann_Whitney.TestConfigurations(new NSGA_III_Configuration(new Vector(new float[] { 92, 100 }), "DTLZ1"), new NSGA_III_Configuration(new Vector(new float[] { 96, 100 }), "DTLZ1"), 50, 450);

            Console.WriteLine(best_configuration != null ? $"La configuración {best_configuration} demostró ser superior estadísticamente." : "No existe suficiente evidencia estadística para afirmar la superioridad de una configuración por sobre la otra.");
            return;

            Console.WriteLine($"Hora de inicio: {DateTime.Now:hh:mm:ss}\n");

            #region Black Hole
            //Punto sobre el cual se centrará la red de hipercubos
            var middle_hyperpoint = new Vector(new float[] { 50, 50 });
            //Longitud de cada dimension para cada hipercubo
            float hypercube_length = 33.3f;
            //Factor por el cual se puede amplificar la longitud de cada dimension de hipercubo
            var factor = 1;
            //Profundidad: Capas de envoltura alrededor del punto central
            var depth = 2;
            //Profundidad interior: Capas de puntos contenidos en el hipercubo
            var inner_depth = 1;
            //Cantidad de generaciones (iteraciones) que realiza la metaheurística de bajo nivel (NSGA-III) en cada evaluación
            var evaluation_duration = 200;
            //Cantidad de épocas (iteraciones) que realiza el algoritmo Black Hole
            var number_of_epochs = 10;
            #endregion

            #region Q-Learning
            //Cantidad de iteraciones por ronda. Cada iteración consiste en seleccionar una acción/configuración (ε-Greedy), evaluarla y recompensarla/castigarla según su resultado.
            var iterations_by_round = 100;
            //Incremento por ronda de la cantidad de generaciones (iteraciones) con las que se evalúa cada acción.
            var duration_step_between_rounds = 250;
            //Cantidad de evaluaciones por semilla aleatoria en cada iteración, las que se promedian y evalúan según su desviación estandar
            var number_of_performances_to_average = 2;
            //Cantidad de generaciones (iteraciones) utilizadas para verificar los resultados obtenidos por el Q-Learning
            var verification_duration = 1000;
            #endregion

            var ProblemName = "DTLZ1";

            var best_configuration_NSGA_II = await Tuner.Run(new NSGA_II_Configuration(middle_hyperpoint, ProblemName), hypercube_length, factor, depth, inner_depth, evaluation_duration, number_of_epochs, iterations_by_round, duration_step_between_rounds, number_of_performances_to_average, verification_duration);

            Console.WriteLine($"\nLa mejor configuración encontrada para el problema {ProblemName} utilizando NSGA-II es: {best_configuration_NSGA_II}\n");

            var best_configuration_NSGA_III = await Tuner.Run(new NSGA_III_Configuration(middle_hyperpoint, ProblemName), hypercube_length, factor, depth, inner_depth, evaluation_duration, number_of_epochs, iterations_by_round, duration_step_between_rounds, number_of_performances_to_average, verification_duration);

            Console.WriteLine($"\nLa mejor configuración encontrada para el problema {ProblemName} utilizando NSGA-III es: {best_configuration_NSGA_III}\n");

            Console.WriteLine($"Hora de termino: {DateTime.Now:hh:mm:ss}");

            return;
        }