name: pymoo description: Framework d'optimisation multi-objectif. NSGA-II, NSGA-III, MOEA/D, fronts de Pareto, gestion des contraintes, benchmarks (ZDT, DTLZ), pour les problèmes de conception et d'optimisation en ingénierie. license: Apache-2.0 license tags: [multi-objective-optimization, pareto-front, evolutionary-algorithms, constrained-optimization, pymoo] metadata: skill-author: K-Dense Inc. --------|----------|--------------| | GA | Général | Opérateurs flexibles et personnalisables | | DE | Optimisation continue | Bonne recherche globale | | PSO | Paysages lisses | Convergence rapide | | CMA-ES | Problèmes difficiles/bruyants | Auto-adaptation |
Problèmes Multi-Objectifs (2-3 objectifs)
| Algorithme | Optimal pour | Caractéristiques clés |
|---|---|---|
| NSGA-II | Benchmark standard | Rapide, fiable, bien testé |
| R-NSGA-II | Régions préférées | Guidage par point de référence |
| MOEA/D | Problèmes décomposables | Approche de scalarisation |
Problèmes Multi-Objectifs (4+ objectifs)
| Algorithme | Optimal pour | Caractéristiques clés |
|---|---|---|
| NSGA-III | 4-15 objectifs | Basé sur directions de référence |
| RVEA | Recherche adaptative | Évolution de vecteur de référence |
| AGE-MOEA | Paysages complexes | Géométrie adaptative |
Problèmes avec Contraintes
| Approche | Algorithme | Quand l'utiliser |
|---|---|---|
| Faisabilité d'abord | Tout algorithme | Large région faisable |
| Spécialisée | SRES, ISRES | Contraintes lourdes |
| Pénalité | GA + pénalité | Compatibilité algorithmique |
Voir : references/algorithms.md pour la référence complète des algorithmes
Problèmes de Benchmark
Accès rapide aux problèmes :
from pymoo.problems import get_problem
# Mono-objectif
problem = get_problem("rastrigin", n_var=10)
problem = get_problem("rosenbrock", n_var=10)
# Multi-objectif
problem = get_problem("zdt1") # Front convexe
problem = get_problem("zdt2") # Front non-convexe
problem = get_problem("zdt3") # Front discontinu
# Multi-objectif
problem = get_problem("dtlz2", n_obj=5, n_var=12)
problem = get_problem("dtlz7", n_obj=4)
Voir : references/problems.md pour la référence complète des problèmes de test
Personnalisation des Opérateurs Génétiques
Configuration standard des opérateurs :
from pymoo.algorithms.soo.nonconvex.ga import GA
from pymoo.operators.crossover.sbx import SBX
from pymoo.operators.mutation.pm import PM
algorithm = GA(
pop_size=100,
crossover=SBX(prob=0.9, eta=15),
mutation=PM(eta=20),
eliminate_duplicates=True
)
Sélection des opérateurs par type de variable :
Variables continues :
- Croisement : SBX (Simulated Binary Crossover)
- Mutation : PM (Polynomial Mutation)
Variables binaires :
- Croisement : TwoPointCrossover, UniformCrossover
- Mutation : BitflipMutation
Permutations (TSP, planification) :
- Croisement : OrderCrossover (OX)
- Mutation : InversionMutation
Voir : references/operators.md pour la référence complète des opérateurs
Performance et Dépannage
Problèmes courants et solutions :
Problème : L'algorithme ne converge pas
- Augmenter la taille de la population
- Augmenter le nombre de générations
- Vérifier si le problème est multimodal (essayer différents algorithmes)
- Vérifier que les contraintes sont correctement formulées
Problème : Mauvaise distribution du front de Pareto
- Pour NSGA-III : Ajuster les directions de référence
- Augmenter la taille de la population
- Vérifier l'élimination des doublons
- Vérifier l'échelle du problème
Problème : Peu de solutions faisables
- Utiliser l'approche contrainte-comme-objectif
- Appliquer des opérateurs de réparation
- Essayer SRES/ISRES pour les problèmes avec contraintes
- Vérifier la formulation des contraintes (doit être g <= 0)
Problème : Coût computationnel élevé
- Réduire la taille de la population
- Diminuer le nombre de générations
- Utiliser des opérateurs plus simples
- Activer la parallélisation (si le problème le supporte)
Bonnes pratiques :
- Normaliser les objectifs quand les échelles diffèrent significativement
- Fixer la graine aléatoire pour la reproductibilité
- Sauvegarder l'historique pour analyser la convergence :
save_history=True - Visualiser les résultats pour comprendre la qualité des solutions
- Comparer avec le vrai front de Pareto quand disponible
- Utiliser les critères d'arrêt appropriés (générations, évaluations, tolérance)
- Ajuster les paramètres des opérateurs selon les caractéristiques du problème
Ressources
Cette compétence inclut une documentation de référence complète et des exemples exécutables :
references/
Documentation détaillée pour une compréhension approfondie :
- algorithms.md : Référence complète des algorithmes avec paramètres, utilisation et directives de sélection
- problems.md : Problèmes de test benchmark (ZDT, DTLZ, WFG) avec caractéristiques
- operators.md : Opérateurs génétiques (échantillonnage, sélection, croisement, mutation) avec configuration
- visualization.md : Tous les types de visualisation avec exemples et guide de sélection
- constraints_mcdm.md : Techniques de gestion des contraintes et méthodes d'aide à la décision multicritère
Patterns de recherche pour les références :
- Détails algorithmiques :
grep -r "NSGA-II\|NSGA-III\|MOEA/D" references/ - Méthodes de contrainte :
grep -r "Feasibility First\|Penalty\|Repair" references/ - Types de visualisation :
grep -r "Scatter\|PCP\|Petal" references/
scripts/
Exemples exécutables démontrant les flux de travail courants :
- single_objective_example.py : Optimisation mono-objectif basique avec GA
- multi_objective_example.py : Optimisation multi-objectif avec NSGA-II, visualisation
- many_objective_example.py : Optimisation multi-objectif avec NSGA-III, directions de référence
- custom_problem_example.py : Définition de problèmes personnalisés (avec et sans contraintes)
- decision_making_example.py : Aide à la décision multicritère avec différentes préférences
Exécuter les exemples :
python3 scripts/single_objective_example.py
python3 scripts/multi_objective_example.py
python3 scripts/many_objective_example.py
python3 scripts/custom_problem_example.py
python3 scripts/decision_making_example.py
Notes Supplémentaires
Installation :
uv pip install pymoo
Dépendances : NumPy, SciPy, matplotlib, autograd (optionnel pour les méthodes basées sur les gradients)
Documentation : https://pymoo.org/
Version : Cette compétence est basée sur pymoo 0.6.x
Patterns courants :
- Toujours utiliser
ElementwiseProblempour les problèmes personnalisés - Contraintes formulées comme
g(x) <= 0eth(x) = 0 - Directions de référence requises pour NSGA-III
- Normaliser les objectifs avant l'aide à la décision multicritère
- Utiliser l'arrêt approprié :
('n_gen', N)ouget_termination("f_tol", tol=0.001)