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(); }
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(); }
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(); }