public static void main(String[] args) throws Exception { CrossoverOperator<BinarySolution> crossoverOperator; MutationOperator<BinarySolution> mutationOperator; SelectionOperator<List<BinarySolution>, BinarySolution> parentsSelection; SelectionOperator<List<BinarySolution>, List<BinarySolution>> newGenerationSelection; Algorithm<List<BinarySolution>> algorithm; BinaryProblem problem; String problemName; if (args.length == 1) { problemName = args[0]; } else { problemName = "org.uma.jmetal.problem.multiobjective.zdt.ZDT5"; } problem = (BinaryProblem) ProblemUtils.<BinarySolution>loadProblem(problemName); crossoverOperator = new HUXCrossover(1.0); parentsSelection = new RandomSelection<BinarySolution>(); newGenerationSelection = new RankingAndCrowdingSelection<BinarySolution>(100); mutationOperator = new BitFlipMutation(0.35); algorithm = new MOCHCBuilder(problem) .setInitialConvergenceCount(0.25) .setConvergenceValue(3) .setPreservedPopulation(0.05) .setPopulationSize(100) .setMaxEvaluations(25000) .setCrossover(crossoverOperator) .setNewGenerationSelection(newGenerationSelection) .setCataclysmicMutation(mutationOperator) .setParentSelection(parentsSelection) .setEvaluator(new SequentialSolutionListEvaluator<BinarySolution>()) .build(); AlgorithmRunner algorithmRunner = new AlgorithmRunner.Executor(algorithm).execute(); List<BinarySolution> population = ((MOCHC) algorithm).getResult(); long computingTime = algorithmRunner.getComputingTime(); new SolutionSetOutput.Printer(population) .setSeparator("\t") .setVarFileOutputContext(new DefaultFileOutputContext("VAR.tsv")) .setFunFileOutputContext(new DefaultFileOutputContext("FUN.tsv")) .print(); JMetalLogger.logger.info("Total execution time: " + computingTime + "ms"); JMetalLogger.logger.info("Objectives values have been written to file FUN.tsv"); JMetalLogger.logger.info("Variables values have been written to file VAR.tsv"); }
public static void singleRun(String pro, String referencePareto) { Problem<DoubleSolution> problem; Algorithm<List<DoubleSolution>> algorithm; CrossoverOperator<DoubleSolution> crossover; MutationOperator<DoubleSolution> mutation; SelectionOperator<List<DoubleSolution>, DoubleSolution> selection; String referenceParetoFront = ""; String problemName; if (!pro.isEmpty() && !referencePareto.isEmpty() && pro.trim() != null && referencePareto.trim() != null) { problemName = pro; referenceParetoFront = referencePareto; } else { problemName = "problem.multiobjective.zdt.ZDT1"; referenceParetoFront = "problem/src/test/resources/pareto_fronts/ZDT1.pf"; } problem = ProblemUtils.<DoubleSolution>loadProblem(problemName); int iterations; String mobi; if (problem.getNumberOfObjectives() == 2) { iterations = 300; mobi = "mombi2-weights/weight/weight_02D_152.sld"; } else { iterations = 500; mobi = "mombi2-weights/weight/weight_03D_12.sld"; } double crossoverProbability = 0.9; double crossoverDistributionIndex = 20.0; crossover = new SBXCrossover(crossoverProbability, crossoverDistributionIndex); double mutationProbability = 1.0 / problem.getNumberOfVariables(); double mutationDistributionIndex = 20.0; mutation = new PolynomialMutation(mutationProbability, mutationDistributionIndex); selection = new BinaryTournamentSelection<DoubleSolution>( new RankingAndCrowdingDistanceComparator<DoubleSolution>()); algorithm = new MOMBI2<>( problem, iterations, crossover, mutation, selection, new SequentialSolutionListEvaluator<DoubleSolution>(), mobi); AlgorithmRunner algorithmRunner = new AlgorithmRunner.Executor(algorithm).execute(); List<DoubleSolution> population = algorithm.getResult(); long computingTime = algorithmRunner.getComputingTime(); JMetalLogger.logger.info("Total execution time: " + computingTime + "ms"); printFinalSolutionSet(population); if (!referenceParetoFront.equals("")) { printQualityIndicators(population, referenceParetoFront); } }