Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            // Create and initialize PRNG.
            Globals.Random = new RandomOps.MersenneTwister();

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

            // 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);

            // Output optimization settings.
            Console.WriteLine("Problem: {0}", Problem.Name);
            Console.WriteLine("Optimizer: {0}", Optimizer.Name);
            Console.WriteLine("Using following parameters:");
            Tools.PrintParameters(Optimizer, Optimizer.DefaultParameters);
            Console.WriteLine("Number of runs: {0}", NumRuns);
            Console.WriteLine("Dimensionality: {0}", Dim);
            Console.WriteLine("Dim-factor: {0}", DimFactor);
            Console.WriteLine();

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

            // Perform optimizations.
            double fitness = repeat.Fitness();

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

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

            // Output best results, as well as result-statistics.
            Console.WriteLine("Best parameters found:");
            Tools.PrintParameters(Problem, Statistics.BestParameters);
            Console.WriteLine("With fitness: {0}", Tools.FormatNumber(Statistics.FitnessMin));
            Console.WriteLine("Time usage: {0}", t2 - t1);
            Console.WriteLine("Mean number of iterations: {0}", Statistics.IterationsMean);
            Console.WriteLine();
            Console.WriteLine("x\ty\tComputedY");
            Console.WriteLine("--------------------");

            // Output fitted curve.
            for (int i = 0; i < X.Length; i++)
            {
                double x         = X[i];
                double y         = Y[i];
                double computedY = Problem.ComputeY(Statistics.BestParameters, x);

                Console.WriteLine("{0}\t{1}\t{2}",
                                  Tools.FormatNumber(x),
                                  Tools.FormatNumber(y),
                                  Tools.FormatNumber(computedY));
            }
        }
Ejemplo n.º 2
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");
        }