jMetal 多目标优化实例:NSGA-II 算法求解 ZDT1 问题
以下是一个基于 jMetal 的完整例子,用于求解多目标优化问题:
import org.uma.jmetal.algorithm.multiobjective.nsgaII.NSGAIIBuilder;
import org.uma.jmetal.operator.crossover.CrossoverOperator;
import org.uma.jmetal.operator.crossover.impl.SBXCrossover;
import org.uma.jmetal.operator.mutation.MutationOperator;
import org.uma.jmetal.operator.mutation.impl.PolynomialMutation;
import org.uma.jmetal.problem.Problem;
import org.uma.jmetal.problem.multiobjective.zdt.ZDT1;
import org.uma.jmetal.solution.DoubleSolution;
import org.uma.jmetal.util.JMetalException;
import org.uma.jmetal.util.AlgorithmRunner;
import org.uma.jmetal.util.evaluator.impl.SequentialSolutionListEvaluator;
public class NSGAIIExample {
public static void main(String[] args) throws JMetalException {
Problem<DoubleSolution> problem;
problem = new ZDT1();
CrossoverOperator<DoubleSolution> crossover;
crossover = new SBXCrossover(0.9, 20.0);
MutationOperator<DoubleSolution> mutation;
mutation = new PolynomialMutation(1.0/problem.getNumberOfVariables(), 20.0);
int populationSize = 100;
NSGAIIBuilder<DoubleSolution> builder;
builder = new NSGAIIBuilder<>(problem, crossover, mutation, populationSize)
.setSelectionOperator(new BinaryTournamentSelection<>())
.setMaxEvaluations(25000)
.setSolutionListEvaluator(new SequentialSolutionListEvaluator<>());
AlgorithmRunner algorithmRunner = new AlgorithmRunner.Executor(builder.build())
.execute();
List<DoubleSolution> solutions = algorithmRunner.getAlgorithm().getResult();
long computingTime = algorithmRunner.getComputingTime();
JMetalLogger.logger.info('Total execution time: ' + computingTime + 'ms');
printSolutions(solutions);
}
private static void printSolutions(List<DoubleSolution> solutions) {
for (int i = 0; i < solutions.size(); i++) {
JMetalLogger.logger.info('Solution ' + i + ': ' + solutions.get(i).getObjective(0) + ', ' + solutions.get(i).getObjective(1));
}
}
}
上述代码中,我们使用了 NSGA-II 算法来解决 ZDT1 多目标优化问题。其中,我们使用了 SBX 交叉和多项式变异作为遗传算子,选择了二元锦标赛选择算子,设置了种群大小为 100,在 25000 次迭代后停止算法运行,并使用了顺序解列表估计器来评估解的质量。
最后,我们输出了所有求解得到的 Pareto 前沿解。
原文地址: https://www.cveoy.top/t/topic/lHio 著作权归作者所有。请勿转载和采集!