[JAVA] Einrichtung und Ausführung des jMetal Description-Algorithmus

Originalseite

https://github.com/jMetal/jMetalDocumentation/blob/master/running.md

Ich habe diese Seite gerade grob übersetzt.

Algorithmuseinstellungen

** Die einzige Möglichkeit, den Algorithmus festzulegen, besteht darin, eine Klasse namens Runner ** zu schreiben. (Es scheint, dass wir in der nächsten und den folgenden Versionen die Einstellungen aus einer externen Datei lesen möchten.)

Für die in jMetal enthaltenen Algorithmen wird mindestens eine Runner-Klasse bereitgestellt. Sie befinden sich im Modul "jmetal-exec" dieser Ordner. Es ist in.

Die folgenden fünf NSGA-II-Läuferklassen werden als Beispiele angegeben. Diese sollen für verschiedene Zwecke verwendet werden.

Die Details der NSGAIIRunner-Klasse sind unten aufgeführt. Wie in Javadoc gezeigt, ist das erste Argument der Klassenname des zu lösenden Problems. Das zweite Argument ist ein optionaler Parameter, der den Pfad der Datei angibt, die die optimale Parate-Front-Approximation enthält. Bei gegebener Parate-Front werden alle verfügbaren Qualitätsindikatoren berechnet.

public class NSGAIIRunner extends AbstractAlgorithmRunner {
  /**
   * @param args Command line arguments.
   * @throws JMetalException
   * @throws FileNotFoundException
   * Invoking command: java org.uma.jmetal.runner.multiobjetive.NSGAIIRunner problemName [referenceFront]
   */
  public static void main(String[] args) throws JMetalException, FileNotFoundException {

Die Hauptmethode deklariert zunächst die Art des zu lösenden Problems und den zu verwendenden Operator. (In diesem Beispiel wird das Problem der Behandlung von "DoubleSolution" als Einzelperson erläutert.) referenceParetoFront gibt den optimalen angegebenen Pareto Front-Dateipfad an.

    Problem<DoubleSolution> problem;
    Algorithm<List<DoubleSolution>> algorithm;
    CrossoverOperator<DoubleSolution> crossover;
    MutationOperator<DoubleSolution> mutation;
    SelectionOperator<List<DoubleSolution>, DoubleSolution> selection;
    String referenceParetoFront = "" ;

Als nächstes werden die dem Programm gegebenen Argumente analysiert. Wenn kein Argument angegeben wird, ist das Benchmark-Problem standardmäßig gelöst. (Lösen Sie in diesem Beispiel ZDT1.)

    String problemName ;
    if (args.length == 1) {
      problemName = args[0];
    } else if (args.length == 2) {
      problemName = args[0] ;
      referenceParetoFront = args[1] ;
    } else {
      problemName = "org.uma.jmetal.problem.multiobjective.zdt.ZDT1";
      referenceParetoFront = "jmetal-problem/src/test/resources/pareto_fronts/ZDT1.pf" ;
    }

Laden Sie als nächstes problem aus dem Klassennamen.

    problem = ProblemUtils.<DoubleSolution> loadProblem(problemName);

Stellen Sie dann den Operator und den Algorithmus ein.

    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 NSGAIIBuilder<DoubleSolution>(problem, crossover, mutation)
        .setSelectionOperator(selection)
        .setMaxEvaluations(25000)
        .setPopulationSize(100)
        .build() ;

Schließlich wird der Algorithmus ausgeführt und die erhaltene Lösung in zwei Dateien geschrieben. Schreiben Sie den Wert der Variablen in die eine und den Wert der Zielfunktion in die andere. Wenn die Paratfront als Argument angegeben wird, drucken Sie auch die Berechnungsergebnisse aller verfügbaren Qualitätsindikatoren aus.

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

Recommended Posts

Einrichtung und Ausführung des jMetal Description-Algorithmus
Informationen zur Einstellungsphase und Ausführungsphase von Gradle