Example #1
0
        static readonly double FitnessNoise = 0.01;    // E.g. 0.01


        /// <summary>
        /// Optimize the given problem and output result-statistics.
        /// </summary>
        static void Optimize(Problem problem)
        {
            if (UseMangler)
            {
                // Wrap problem-object in search-space mangler.
                problem = new Mangler(problem, Diffusion, Displacement, Spillover, FitnessNoise);
            }

            // Create a fitness trace for tracing the progress of optimization re. mean.
            int          NumMeanIntervals = 3000;
            FitnessTrace fitnessTraceMean = new FitnessTraceMean(NumIterations, NumMeanIntervals);

            // Create a fitness trace for tracing the progress of optimization re. quartiles.
            // Note that fitnessTraceMean is chained to this object by passing it to the
            // constructor, this causes both fitness traces to be used.
            int          NumQuartileIntervals  = 10;
            FitnessTrace fitnessTraceQuartiles = new FitnessTraceQuartiles(NumRuns, NumIterations, NumQuartileIntervals, fitnessTraceMean);

            // Create a feasibility trace for tracing the progress of optimization re. feasibility.
            FeasibleTrace feasibleTrace = new FeasibleTrace(NumIterations, NumMeanIntervals, fitnessTraceQuartiles);

            // Assign the problem etc. to the optimizer.
            Optimizer.Problem      = problem;
            Optimizer.FitnessTrace = feasibleTrace;

            // Wrap the optimizer in a logger of result-statistics.
            bool       StatisticsOnlyFeasible = true;
            Statistics Statistics             = new Statistics(Optimizer, StatisticsOnlyFeasible);

            // Wrap it again in a repeater.
            Repeat Repeat = new RepeatSum(Statistics, NumRuns);

            // Perform the optimization runs.
            double fitness = Repeat.Fitness(Parameters);

            // Compute result-statistics.
            Statistics.Compute();

            // Output result-statistics
            string msg = "{0} = {1} - {2} = {3} = {4} = {5} = {6} = {7} = {8} \r\n";

            Console.WriteFormatted(msg, Color.OrangeRed, Color.Green,
                                   problem.Name,
                                   Tools.FormatNumber(Statistics.FitnessMean),
                                   Tools.FormatNumber(Statistics.FitnessStdDev),
                                   Tools.FormatNumber(Statistics.FitnessQuartiles.Min),
                                   Tools.FormatNumber(Statistics.FitnessQuartiles.Q1),
                                   Tools.FormatNumber(Statistics.FitnessQuartiles.Median),
                                   Tools.FormatNumber(Statistics.FitnessQuartiles.Q3),
                                   Tools.FormatNumber(Statistics.FitnessQuartiles.Max),
                                   Tools.FormatPercent(Statistics.FeasibleFraction));

            // Output fitness and feasible traces.
            fitnessTraceMean.WriteToFile(Optimizer.Name + "-FitnessTraceMean-" + problem.Name + ".txt");
            fitnessTraceQuartiles.WriteToFile(Optimizer.Name + "-FitnessTraceQuartiles-" + problem.Name + ".txt");
            feasibleTrace.WriteToFile(Optimizer.Name + "-FeasibleTrace-" + problem.Name + ".txt");
        }
        static void Main(string[] args)
        {
            // Initialize the PRNG.
            Globals.Random = new RandomOps.MersenneTwister();

            // Create a fitness trace for tracing the progress of meta-optimization.
            int           MaxMeanIntervals = 3000;
            FitnessTrace  fitnessTrace     = new FitnessTraceMean(MetaNumIterations, MaxMeanIntervals);
            FeasibleTrace feasibleTrace    = new FeasibleTrace(MetaNumIterations, MaxMeanIntervals, fitnessTrace);

            // Assign the fitness trace to the meta-optimizer.
            MetaOptimizer.FitnessTrace = feasibleTrace;

            // Output settings.
            Console.WriteLine("Meta-Optimization of benchmark problems.", Color.Yellow);
            Console.WriteLine();
            Console.WriteLine("Meta-method: {0}", MetaOptimizer.Name, Color.Yellow);
            Console.WriteLine("Using following parameters:", Color.Yellow);
            Tools.PrintParameters(MetaOptimizer, MetaParameters);
            Console.WriteLine("Number of meta-runs: {0}", MetaNumRuns, Color.Yellow);
            Console.WriteLine("Number of meta-iterations: {0}", MetaNumIterations, Color.Yellow);
            Console.WriteLine();
            Console.WriteLine("Method to be meta-optimized: {0}", Optimizer.Name, Color.Yellow);
            Console.WriteLine("Number of benchmark problems: {0}", WeightedProblems.Length, Color.Yellow);

            foreach (var t in WeightedProblems)
            {
                Problem problem = t.Problem;
                double  weight  = t.Weight;

                Console.WriteLine("\t({0})\t{1}", weight, problem.Name, Color.Yellow);
            }

            Console.WriteLine("Dimensionality for each benchmark problem: {0}", Dim, Color.Yellow);
            Console.WriteLine("Number of runs per benchmark problem: {0}", NumRuns, Color.Yellow);
            Console.WriteLine("Number of iterations per run: {0}", NumIterations, Color.Yellow);
            if (UseMangler)
            {
                Console.WriteLine("Mangle search-space:");
                Console.WriteLine("\tSpillover:     {0}", Spillover, Color.Yellow);
                Console.WriteLine("\tDisplacement:  {0}", Displacement, Color.Yellow);
                Console.WriteLine("\tDiffusion:     {0}", Diffusion, Color.Yellow);
                Console.WriteLine("\tFitnessNoise:  {0}", FitnessNoise, Color.Yellow);
            }
            else
            {
                Console.WriteLine("Mangle search-space: No", Color.Red);
            }
            Console.WriteLine();

            Console.WriteLine("0/1 Boolean whether optimizer's control parameters are feasible.", Color.Yellow);
            Console.WriteLine("*** Indicates meta-fitness/feasibility is an improvement.", Color.Yellow);

            // Starting-time.
            ZonedDateTime t1 = LocalDateTime.FromDateTime(DateTime.Now).InUtc();

            // Perform the meta-optimization runs.
            double fitness = MetaRepeat.Fitness(MetaParameters);

            ZonedDateTime t2   = LocalDateTime.FromDateTime(DateTime.Now).InUtc();
            Duration      diff = t2.ToInstant() - t1.ToInstant();

            // Compute result-statistics.
            Statistics.Compute();

            // Retrieve best-found control parameters for the optimizer.
            double[] bestParameters = Statistics.BestResult.Parameters;

            // Output results and statistics.
            Console.WriteLine();
            Console.WriteLine("Best found parameters for {0} optimizer:", Optimizer.Name, Color.Green);
            Tools.PrintParameters(Optimizer, bestParameters);
            Console.WriteLine("Parameters written in array notation:", Color.Green);
            Console.WriteLine("\t{0}", Tools.ArrayToString(bestParameters, 4), Color.Green);
            Console.WriteLine("Best parameters have meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessMin), Color.Green);
            Console.WriteLine("Worst meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessMax), Color.Green);
            Console.WriteLine("Mean meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessMean), Color.Green);
            Console.WriteLine("StdDev for meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessStdDev), Color.Green);

            // Output best found parameters.
            Console.WriteLine();
            Console.WriteLine("Best {0} found parameters:", LogSolutions.Capacity, Color.Green);
            foreach (Solution candidateSolution in LogSolutions.Log)
            {
                if (candidateSolution.Feasible)
                {
                    Console.WriteLine("{0,-30}{1,20}{2}",
                                      Tools.ArrayToStringRaw(candidateSolution.Parameters, 4),
                                      Tools.FormatNumber(candidateSolution.Fitness), " Feasible.", Color.Green);
                }
                else
                {
                    Console.WriteLine("{0,-30}{1,20}{2}",
                                      Tools.ArrayToStringRaw(candidateSolution.Parameters, 4),
                                      Tools.FormatNumber(candidateSolution.Fitness), " Not Feasible.", Color.Red);
                }
            }

            // Output time-usage.
            Console.WriteLine();
            Console.WriteLine("Time usage: {0}", t2 - t1, Color.Yellow);

            // Output fitness trace.
            string traceFilename
                = MetaOptimizer.Name + "-" + Optimizer.Name
                  + "-" + WeightedProblems.Length + "Bnch" + "-" + DimFactor + "xDim.txt";

            fitnessTrace.WriteToFile("MetaFitnessTrace-" + traceFilename);
            feasibleTrace.WriteToFile("MetaFeasibleTrace-" + traceFilename);

            Console.WriteLine("Press any key to exit ...");
            Console.ReadKey();
        }
Example #3
0
        static void Main(string[] args)
        {
            Console.ReadKey();
            // Initialize PRNG.
            Globals.Random = new RandomOps.MersenneTwister();

            // Set max number of optimization iterations to perform.
            Problem.MaxIterations = NumIterations;

            // Output optimization settings.
            Console.WriteLine("Optimizer: {0}", Optimizer.Name, Color.Yellow);
            Console.WriteLine("Using following parameters:", Color.Yellow);
            Tools.PrintParameters(Optimizer, Parameters);
            Console.WriteLine("Number of optimization runs: {0}", NumRuns, Color.Yellow);
            Console.WriteLine("Problem: {0}", Problem.Name, Color.Yellow);
            Console.WriteLine("\tDimensionality: {0}", Dim, Color.Yellow);
            Console.WriteLine("\tNumIterations per run, max: {0}", NumIterations, Color.Yellow);
            Console.WriteLine();

            // Create a fitness trace for tracing the progress of optimization.
            int           NumMeanIntervals = 3000;
            FitnessTrace  fitnessTrace     = new FitnessTraceMean(NumIterations, NumMeanIntervals);
            FeasibleTrace feasibleTrace    = new FeasibleTrace(NumIterations, NumMeanIntervals, fitnessTrace);

            // Assign the fitness trace to the optimizer.
            Optimizer.FitnessTrace = feasibleTrace;

            // Starting-time.
            ZonedDateTime t1 = LocalDateTime.FromDateTime(DateTime.Now).InUtc();

            // Perform optimizations.
            double fitness = Repeat.Fitness(Parameters);

            ZonedDateTime t2   = LocalDateTime.FromDateTime(DateTime.Now).InUtc();
            Duration      diff = t2.ToInstant() - t1.ToInstant();

            if (Statistics.FeasibleFraction > 0)
            {
                // Compute result-statistics.
                Statistics.Compute();

                // Output best result, as well as result-statistics.
                Console.WriteLine("Best feasible solution found:", Color.Yellow);
                Tools.PrintParameters(Problem, Statistics.BestParameters);
                Console.WriteLine();
                Console.WriteLine("Result Statistics:", Color.Yellow);
                Console.WriteLine("\tFeasible: \t{0} of solutions found.", Tools.FormatPercent(Statistics.FeasibleFraction), Color.Yellow);
                Console.WriteLine("\tBest Fitness: \t{0}", Tools.FormatNumber(Statistics.FitnessMin), Color.Yellow);
                Console.WriteLine("\tWorst: \t\t{0}", Tools.FormatNumber(Statistics.FitnessMax), Color.Yellow);
                Console.WriteLine("\tMean: \t\t{0}", Tools.FormatNumber(Statistics.FitnessMean), Color.Yellow);
                Console.WriteLine("\tStd.Dev.: \t{0}", Tools.FormatNumber(Statistics.FitnessStdDev), Color.Yellow);
                Console.WriteLine();
                Console.WriteLine("Iterations used per run:", Color.Yellow);
                Console.WriteLine("\tMean: {0}", Tools.FormatNumber(Statistics.IterationsMean), Color.Yellow);
            }
            else
            {
                Console.WriteLine("No feasible solutions found.", Color.Red);
            }

            // Output time-usage.
            Console.WriteLine();
            Console.WriteLine("Time usage: {0}", t2 - t1, Color.Yellow);

            // Output fitness and feasible trace.
            string traceFilename = Problem.Name + ".txt";

            fitnessTrace.WriteToFile("FitnessTrace-" + traceFilename);
            feasibleTrace.WriteToFile("FeasibleTrace-" + traceFilename);
            Console.WriteLine("Finished, press any key");
            Console.ReadKey();
        }
Example #4
0
        static void Main(string[] args)
        {
            // Initialize the PRNG.
            // Parallel version uses a ThreadSafe PRNG.
            Globals.Random = new RandomOps.ThreadSafe.CMWC4096();

            // Set max number of threads allowed.
            Globals.ParallelOptions.MaxDegreeOfParallelism = 8;

            // Create a fitness trace for tracing the progress of meta-optimization.
            int           MaxMeanIntervals = 3000;
            FitnessTrace  fitnessTrace     = new FitnessTraceMean(MetaNumIterations, MaxMeanIntervals);
            FeasibleTrace feasibleTrace    = new FeasibleTrace(MetaNumIterations, MaxMeanIntervals, fitnessTrace);

            // Assign the fitness trace to the meta-optimizer.
            MetaOptimizer.FitnessTrace = feasibleTrace;

            // Output settings.
            Console.WriteLine("Meta-Optimization of benchmark problems. (Parallel)");
            Console.WriteLine();
            Console.WriteLine("Meta-method: {0}", MetaOptimizer.Name);
            Console.WriteLine("Using following parameters:");
            Tools.PrintParameters(MetaOptimizer, MetaParameters);
            Console.WriteLine("Number of meta-runs: {0}", MetaNumRuns);
            Console.WriteLine("Number of meta-iterations: {0}", MetaNumIterations);
            Console.WriteLine();
            Console.WriteLine("Method to be meta-optimized: {0}", Optimizer.Name);
            Console.WriteLine("Number of benchmark problems: {0}", WeightedProblems.Length);

            for (int i = 0; i < WeightedProblems.Length; i++)
            {
                Problem problem = WeightedProblems[i].Problem;
                double  weight  = WeightedProblems[i].Weight;

                Console.WriteLine("\t({0})\t{1}", weight, problem.Name);
            }

            Console.WriteLine("Dimensionality for each benchmark problem: {0}", Dim);
            Console.WriteLine("Number of runs per benchmark problem: {0}", NumRuns);
            Console.WriteLine("Number of iterations per run: {0}", NumIterations);
            Console.WriteLine("(Search-space mangling not supported for parallel meta-optimization.)");
            Console.WriteLine();

            Console.WriteLine("0/1 Boolean whether optimizer's control parameters are feasible.");
            Console.WriteLine("*** Indicates meta-fitness/feasibility is an improvement.");

            // Start-time.
            DateTime t1 = DateTime.Now;

            // Perform the meta-optimization runs.
            double fitness = MetaRepeat.Fitness(MetaParameters);

            // End-time.
            DateTime t2 = DateTime.Now;

            // Compute result-statistics.
            Statistics.Compute();

            // Retrieve best-found control parameters for the optimizer.
            double[] bestParameters = Statistics.BestResult.Parameters;

            // Output results and statistics.
            Console.WriteLine();
            Console.WriteLine("Best found parameters for {0} optimizer:", Optimizer.Name);
            Tools.PrintParameters(Optimizer, bestParameters);
            Console.WriteLine("Parameters written in array notation:");
            Console.WriteLine("\t{0}", Tools.ArrayToString(bestParameters, 4));
            Console.WriteLine("Best parameters have meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessMin));
            Console.WriteLine("Worst meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessMax));
            Console.WriteLine("Mean meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessMean));
            Console.WriteLine("StdDev for meta-fitness: {0}", Tools.FormatNumber(Statistics.FitnessStdDev));

            // Output best found parameters.
            Console.WriteLine();
            Console.WriteLine("Best {0} found parameters:", LogSolutions.Capacity);
            foreach (Solution candidateSolution in LogSolutions.Log)
            {
                Console.WriteLine("\t{0}\t{1}\t{2}",
                                  Tools.ArrayToStringRaw(candidateSolution.Parameters, 4),
                                  Tools.FormatNumber(candidateSolution.Fitness),
                                  (candidateSolution.Feasible) ? (1) : (0));
            }

            // Output time-usage.
            Console.WriteLine();
            Console.WriteLine("Time usage: {0}", t2 - t1);

            // Output fitness and feasible trace.
            string traceFilename
                = MetaOptimizer.Name + "-" + Optimizer.Name
                  + "-" + WeightedProblems.Length + "Bnch" + "-" + DimFactor + "xDim.txt";

            fitnessTrace.WriteToFile("MetaFitnessTrace-" + traceFilename);
            feasibleTrace.WriteToFile("MetaFeasibleTrace-" + traceFilename);

            //Console.WriteLine("Press any key to exit ...");
            //Console.ReadKey();
        }