/// <summary> ///Usage: three choices /// - AbYSS /// - AbYSS problemName /// - AbYSS problemName paretoFrontFile /// </summary> /// <param name="args">Command line arguments.</param> public static void Main(string[] args) { Problem problem; // The problem to solve Algorithm algorithm; // The algorithm to use Operator crossover; // Crossover operator Operator mutation; // Mutation operator Operator improvement; // Operator for improvement Dictionary <string, object> parameters; // Operator parameters QualityIndicator indicators; // Object to get quality indicators // Logger object and file to store log messages var logger = Logger.Log; var appenders = logger.Logger.Repository.GetAppenders(); var fileAppender = appenders[0] as log4net.Appender.FileAppender; fileAppender.File = "AbYSS.log"; fileAppender.ActivateOptions(); indicators = null; if (args.Length == 1) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); } else if (args.Length == 2) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); indicators = new QualityIndicator(problem, args[1]); } else { // Default problem problem = new Kursawe("Real", 3); //problem = new Kursawe("BinaryReal", 3); //problem = new Water("Real"); //problem = new ZDT4("ArrayReal", 10); //problem = new ConstrEx("Real"); //problem = new DTLZ1("Real"); //problem = new OKA2("Real") ; } // STEP 2. Select the algorithm (AbYSS) algorithm = new JMetalCSharp.Metaheuristics.AbYSS.AbYSS(problem); // STEP 3. Set the input parameters required by the metaheuristic algorithm.SetInputParameter("populationSize", 20); algorithm.SetInputParameter("refSet1Size", 10); algorithm.SetInputParameter("refSet2Size", 10); algorithm.SetInputParameter("archiveSize", 100); algorithm.SetInputParameter("maxEvaluations", 25000); // STEP 4. Specify and configure the crossover operator, used in the // solution combination method of the scatter search parameters = new Dictionary <string, object>(); parameters.Add("probability", 0.9); parameters.Add("distributionIndex", 20.0); crossover = CrossoverFactory.GetCrossoverOperator("SBXCrossover", parameters); // STEP 5. Specify and configure the improvement method. We use by default // a polynomial mutation in this method. parameters = new Dictionary <string, object>(); parameters.Add("probability", 1.0 / problem.NumberOfVariables); parameters.Add("distributionIndex", 20.0); mutation = MutationFactory.GetMutationOperator("PolynomialMutation", parameters); parameters = new Dictionary <string, object>(); parameters.Add("improvementRounds", 1); parameters.Add("problem", problem); parameters.Add("mutation", mutation); improvement = new MutationLocalSearch(parameters); // STEP 6. Add the operators to the algorithm algorithm.AddOperator("crossover", crossover); algorithm.AddOperator("improvement", improvement); long initTime = Environment.TickCount; // STEP 7. Run the algorithm SolutionSet population = algorithm.Execute(); long estimatedTime = Environment.TickCount - initTime; // STEP 8. Print the results logger.Info("Total execution time: " + estimatedTime + "ms"); logger.Info("Variables values have been writen to file VAR"); population.PrintVariablesToFile("VAR"); logger.Info("Objectives values have been writen to file FUN"); population.PrintObjectivesToFile("FUN"); Console.WriteLine("Total execution time: " + estimatedTime + "ms"); Console.ReadLine(); if (indicators != null) { logger.Info("Quality indicators"); logger.Info("Hypervolume: " + indicators.GetHypervolume(population)); logger.Info("GD : " + indicators.GetGD(population)); logger.Info("IGD : " + indicators.GetIGD(population)); logger.Info("Spread : " + indicators.GetSpread(population)); logger.Info("Epsilon : " + indicators.GetEpsilon(population)); } }
/// <summary> /// Usage: three options /// - SPEA2 /// - SPEA2 problemName /// - SPEA2 problemName ParetoFrontFile /// </summary> /// <param name="args">Command line arguments. The first (optional) argument specifies the problem to solve.</param> public static void Main(string[] args) { Problem problem; // The problem to solve Algorithm algorithm; // The algorithm to use Operator crossover; // Crossover operator Operator mutation; // Mutation operator Operator selection; // Selection operator QualityIndicator indicators; // Object to get quality indicators Dictionary <string, object> parameters; // Operator parameters // Logger object and file to store log messages var logger = Logger.Log; var appenders = logger.Logger.Repository.GetAppenders(); var fileAppender = appenders[0] as log4net.Appender.FileAppender; fileAppender.File = "SPEA2.log"; fileAppender.ActivateOptions(); indicators = null; if (args.Length == 1) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); } else if (args.Length == 2) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); indicators = new QualityIndicator(problem, args[1]); } else { // Default problem problem = new Kursawe("Real", 3); //problem = new Water("Real"); //problem = new ZDT1("ArrayReal", 1000); //problem = new ZDT4("BinaryReal"); //problem = new WFG1("Real"); //problem = new DTLZ1("Real"); //problem = new OKA2("Real") ; } algorithm = new JMetalCSharp.Metaheuristics.SPEA2.SPEA2(problem); // Algorithm parameters algorithm.SetInputParameter("populationSize", 100); algorithm.SetInputParameter("archiveSize", 100); algorithm.SetInputParameter("maxEvaluations", 25000); // Mutation and Crossover for Real codification parameters = new Dictionary <string, object>(); parameters.Add("probability", 0.9); parameters.Add("distributionIndex", 20.0); crossover = CrossoverFactory.GetCrossoverOperator("SBXCrossover", parameters); parameters = new Dictionary <string, object>(); parameters.Add("probability", 1.0 / problem.NumberOfVariables); parameters.Add("distributionIndex", 20.0); mutation = MutationFactory.GetMutationOperator("PolynomialMutation", parameters); // Selection operator parameters = null; selection = SelectionFactory.GetSelectionOperator("BinaryTournament", parameters); // Add the operators to the algorithm algorithm.AddOperator("crossover", crossover); algorithm.AddOperator("mutation", mutation); algorithm.AddOperator("selection", selection); // Execute the algorithm long initTime = Environment.TickCount; SolutionSet population = algorithm.Execute(); long estimatedTime = Environment.TickCount - initTime; // Result messages logger.Info("Total execution time: " + estimatedTime + "ms"); logger.Info("Objectives values have been writen to file FUN"); population.PrintObjectivesToFile("FUN"); logger.Info("Variables values have been writen to file VAR"); population.PrintVariablesToFile("VAR"); if (indicators != null) { logger.Info("Quality indicators"); logger.Info("Hypervolume: " + indicators.GetHypervolume(population)); logger.Info("GD : " + indicators.GetGD(population)); logger.Info("IGD : " + indicators.GetIGD(population)); logger.Info("Spread : " + indicators.GetSpread(population)); logger.Info("Epsilon : " + indicators.GetEpsilon(population)); } Console.WriteLine("Total execution time: " + estimatedTime + "ms"); Console.ReadLine(); }
/// <summary> ///Usage: three choices /// - GDE3 /// - GDE3 problemName /// - GDE3 problemName paretoFrontFile /// </summary> /// <param name="args">Command line arguments.</param> public static void Main(string[] args) { Problem problem; // The problem to solve Algorithm algorithm; // The algorithm to use Operator selection; Operator crossover; Dictionary <string, object> parameters; // Operator parameters QualityIndicator indicators; // Object to get quality indicators // Logger object and file to store log messages var logger = Logger.Log; var appenders = logger.Logger.Repository.GetAppenders(); var fileAppender = appenders[0] as log4net.Appender.FileAppender; fileAppender.File = "GDE3.log"; fileAppender.ActivateOptions(); indicators = null; if (args.Length == 1) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); } else if (args.Length == 2) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); indicators = new QualityIndicator(problem, args[1]); } else { // Default problem problem = new Kursawe("Real", 3); //problem = new Water("Real"); //problem = new ZDT1("ArrayReal", 100); //problem = new ConstrEx("Real"); //problem = new DTLZ1("Real"); //problem = new OKA2("Real") ; } algorithm = new JMetalCSharp.Metaheuristics.GDE3.GDE3(problem); // Algorithm parameters algorithm.SetInputParameter("populationSize", 100); algorithm.SetInputParameter("maxIterations", 250); // Crossover operator parameters = new Dictionary <string, object>(); parameters.Add("CR", 0.5); parameters.Add("F", 0.5); crossover = CrossoverFactory.GetCrossoverOperator("DifferentialEvolutionCrossover", parameters); // Add the operators to the algorithm parameters = null; selection = SelectionFactory.GetSelectionOperator("DifferentialEvolutionSelection", parameters); algorithm.AddOperator("crossover", crossover); algorithm.AddOperator("selection", selection); // Execute the Algorithm long initTime = Environment.TickCount; SolutionSet population = algorithm.Execute(); long estimatedTime = Environment.TickCount - initTime; // Result messages logger.Info("Total execution time: " + estimatedTime + "ms"); logger.Info("Objectives values have been writen to file FUN"); population.PrintObjectivesToFile("FUN"); logger.Info("Variables values have been writen to file VAR"); population.PrintVariablesToFile("VAR"); if (indicators != null) { logger.Info("Quality indicators"); logger.Info("Hypervolume: " + indicators.GetHypervolume(population)); logger.Info("GD : " + indicators.GetGD(population)); logger.Info("IGD : " + indicators.GetIGD(population)); logger.Info("Spread : " + indicators.GetSpread(population)); logger.Info("Epsilon : " + indicators.GetEpsilon(population)); } Console.WriteLine("Total execution time gde: moead" + estimatedTime + "ms"); Console.ReadLine(); }
/// <summary> /// Usage: three options /// - NSGAIIAdaptive /// - NSGAIIAdaptive problemName /// - NSGAIIAdaptive problemName paretoFrontFile /// </summary> /// <param name="args">Command line arguments.</param> public static void Main(string[] args) { Problem problem; // The problem to solve Algorithm algorithm; // The algorithm to use Operator selection; // Selection operator Dictionary <string, object> parameters; // Operator parameters QualityIndicator indicators; // Object to get quality indicators // Logger object and file to store log messages var logger = Logger.Log; var appenders = logger.Logger.Repository.GetAppenders(); var fileAppender = appenders[0] as log4net.Appender.FileAppender; fileAppender.File = "NSGAIIAdaptive.log"; fileAppender.ActivateOptions(); indicators = null; if (args.Length == 1) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); } else if (args.Length == 2) { object[] param = { "Real" }; problem = ProblemFactory.GetProblem(args[0], param); indicators = new QualityIndicator(problem, args[1]); } else { // Default problem problem = new Kursawe("Real", 3); //problem = new Kursawe("BinaryReal", 3); //problem = new Water("Real"); //problem = new ZDT1("ArrayReal", 100); //problem = new ConstrEx("Real"); //problem = new DTLZ1("Real"); //problem = new OKA2("Real") ; } problem = new LZ09_F3("Real"); algorithm = new JMetalCSharp.Metaheuristics.NSGAII.NSGAIIAdaptive(problem); //algorithm = new ssNSGAIIAdaptive(problem); // Algorithm parameters algorithm.SetInputParameter("populationSize", 100); algorithm.SetInputParameter("maxEvaluations", 150000); // Selection Operator parameters = null; selection = SelectionFactory.GetSelectionOperator("BinaryTournament2", parameters); // Add the operators to the algorithm algorithm.AddOperator("selection", selection); // Add the indicator object to the algorithm algorithm.SetInputParameter("indicators", indicators); Offspring[] getOffspring = new Offspring[3]; double CR, F; CR = 1.0; F = 0.5; getOffspring[0] = new DifferentialEvolutionOffspring(CR, F); getOffspring[1] = new SBXCrossoverOffspring(1.0, 20); //getOffspring[1] = new BLXAlphaCrossoverOffspring(1.0, 0.5); getOffspring[2] = new PolynomialMutationOffspring(1.0 / problem.NumberOfVariables, 20); //getOffspring[2] = new NonUniformMutationOffspring(1.0/problem.getNumberOfVariables(), 0.5, 150000); algorithm.SetInputParameter("offspringsCreators", getOffspring); // Execute the Algorithm long initTime = Environment.TickCount; SolutionSet population = algorithm.Execute(); long estimatedTime = Environment.TickCount - initTime; // Result messages logger.Info("Total execution time: " + estimatedTime + "ms"); logger.Info("Variables values have been writen to file VAR"); population.PrintVariablesToFile("VAR"); logger.Info("Objectives values have been writen to file FUN"); population.PrintObjectivesToFile("FUN"); Console.WriteLine("Time: " + estimatedTime); Console.ReadLine(); if (indicators != null) { logger.Info("Quality indicators"); logger.Info("Hypervolume: " + indicators.GetHypervolume(population)); logger.Info("GD : " + indicators.GetGD(population)); logger.Info("IGD : " + indicators.GetIGD(population)); logger.Info("Spread : " + indicators.GetSpread(population)); logger.Info("Epsilon : " + indicators.GetEpsilon(population)); } }
/// <summary> /// Usage: three options /// - PMOEAD /// - PMOEAD problemName /// - PMOEAD problemName ParetoFrontFile /// - PMOEAD problemName numberOfThreads dataDirectory /// </summary> /// <param name="args">Command line arguments. The first (optional) argument specifies the problem to solve.</param> public static void Main(string[] args) { Problem problem; // The problem to solve Algorithm algorithm; // The algorithm to use Operator crossover; // Crossover operator Operator mutation; // Mutation operator QualityIndicator indicators; // Object to get quality indicators Dictionary <string, object> parameters; // Operator parameters int numberOfThreads = 4; string dataDirectory = ""; // Logger object and file to store log messages var logger = Logger.Log; var appenders = logger.Logger.Repository.GetAppenders(); var fileAppender = appenders[0] as log4net.Appender.FileAppender; fileAppender.File = "PMOEAD.log"; fileAppender.ActivateOptions(); indicators = null; if (args.Length == 1) { // args[0] = problem name object[] paramsList = { "Real" }; problem = ProblemFactory.GetProblem(args[0], paramsList); } else if (args.Length == 2) { // args[0] = problem name, [1] = pareto front file object[] paramsList = { "Real" }; problem = ProblemFactory.GetProblem(args[0], paramsList); indicators = new QualityIndicator(problem, args[1]); } else if (args.Length == 3) { // args[0] = problem name, [1] = threads, [2] = data directory object[] paramsList = { "Real" }; problem = ProblemFactory.GetProblem(args[0], paramsList); numberOfThreads = int.Parse(args[1]); dataDirectory = args[2]; } else { // Problem + number of threads + data directory problem = new Kursawe("Real", 3); //problem = new Kursawe("BinaryReal", 3); //problem = new Water("Real"); //problem = new ZDT1("ArrayReal", 100); //problem = new ConstrEx("Real"); //problem = new DTLZ1("Real"); //problem = new OKA2("Real") ; } algorithm = new JMetalCSharp.Metaheuristics.MOEAD.PMOEAD(problem); // Algorithm parameters algorithm.SetInputParameter("populationSize", 300); algorithm.SetInputParameter("maxEvaluations", 150000); algorithm.SetInputParameter("numberOfThreads", numberOfThreads); // Directory with the files containing the weight vectors used in // Q. Zhang, W. Liu, and H Li, The Performance of a New Version of MOEA/D // on CEC09 Unconstrained MOP Test Instances Working Report CES-491, School // of CS & EE, University of Essex, 02/2009. // http://dces.essex.ac.uk/staff/qzhang/MOEAcompetition/CEC09final/code/ZhangMOEADcode/moead0305.rar algorithm.SetInputParameter("dataDirectory", "Data/Parameters/Weight"); algorithm.SetInputParameter("T", 20); algorithm.SetInputParameter("delta", 0.9); algorithm.SetInputParameter("nr", 2); // Crossover operator parameters = new Dictionary <string, object>(); parameters.Add("CR", 1.0); parameters.Add("F", 0.5); crossover = CrossoverFactory.GetCrossoverOperator("DifferentialEvolutionCrossover", parameters); // Mutation operator parameters = new Dictionary <string, object>(); parameters.Add("probability", 1.0 / problem.NumberOfVariables); parameters.Add("distributionIndex", 20.0); mutation = MutationFactory.GetMutationOperator("PolynomialMutation", parameters); algorithm.AddOperator("crossover", crossover); algorithm.AddOperator("mutation", mutation); // Execute the Algorithm long initTime = Environment.TickCount; SolutionSet population = algorithm.Execute(); long estimatedTime = Environment.TickCount - initTime; // Result messages logger.Info("Total execution time: " + estimatedTime + " ms"); logger.Info("Objectives values have been writen to file FUN"); population.PrintObjectivesToFile("FUN"); logger.Info("Variables values have been writen to file VAR"); population.PrintVariablesToFile("VAR"); Console.ReadLine(); if (indicators != null) { logger.Info("Quality indicators"); logger.Info("Hypervolume: " + indicators.GetHypervolume(population)); logger.Info("GD : " + indicators.GetGD(population)); logger.Info("IGD : " + indicators.GetIGD(population)); logger.Info("Spread : " + indicators.GetSpread(population)); } }