2013-08-24 3 views
0

J'ai étudié l'algorithme de tri non dominant (NSGA-II).
Je veux utiliser cet algorithme d'optimisation multi-objectif.
quelqu'un pourrait-il m'aider en traitant toute implémentation libre de NSGA-II dans Java ou Matlab.Implémentation de NSGA-II

Merci à l'avance

+0

Je suis intéressé par cela aussi. J'ai jeté un coup d'œil à jMetal, mais la qualité du code semble manquer (à un ingénieur logiciel Java) par rapport à la solide [Watchmaker] (http://watchmaker.uncommons.org/) que je suis tombé peu de temps après. Watchmaker soutient une approche très générique pour construire des algorithmes évolutifs en branchant des composants ensemble, donc je serais intéressé de savoir si NSGA-II a été ou peut être mis en œuvre en son sein? Je suppose que je vais me découvrir assez tôt. – orlade

Répondre

2

jMetal est le framework Java de MOEA , dont NSGA-II est inclus. Le site Web est le here.

2

MOEA Framework est un framework Java libre et open source pour l'optimisation multi-objectif. Il a la plus grande collection de MOEA de n'importe quelle bibliothèque, y compris NSGA-I, NSGA-II et NSGA-III.

j'ai personnellement utilisé pour mettre en œuvre et résoudre un problème multi objectif (MOP) pour mon mémoire de maîtrise et trouvé bien supérieure à PyGMO (pour python) et jMetal (en Java).

Le code suivant montre comment utiliser l'API Framework MOEA pour exécuter NSGA-II pour résoudre le problème multiobjectif ZDT1:

import java.util.List; 
import org.moeaframework.Executor; 
import org.moeaframework.core.NondominatedPopulation; 
import org.moeaframework.core.Solution; 

public class NSGAIIExample { 

    public static void main(String[] args) { 
     // configure and run this experiment 
     NondominatedPopulation result = new Executor() 
       .withProblem("ZDT1") 
       .withAlgorithm("NSGAII") 
       .withMaxEvaluations(1000) 
       .distributeOnAllCores() 
       .run(); 

     List<NondominatedPopulation> multiRuns = new Executor() 
       .withProblem("ZDT1") 
       .withAlgorithm("NSGAII") 
       .withMaxEvaluations(1000) 
       .distributeOnAllCores() 
       .runSeeds(3); 

     System.out.format("Obj1 Obj2%n"); 
     for (Solution solution : result) { 
      System.out.format("%.5f\t%.5f%n", solution.getObjective(0), 
        solution.getObjective(1)); 
     } 
    } 
}