pymoo

Par mkurman · zorai

npx skills add https://github.com/mkurman/zorai --skill pymoo

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 :

  1. Normaliser les objectifs quand les échelles diffèrent significativement
  2. Fixer la graine aléatoire pour la reproductibilité
  3. Sauvegarder l'historique pour analyser la convergence : save_history=True
  4. Visualiser les résultats pour comprendre la qualité des solutions
  5. Comparer avec le vrai front de Pareto quand disponible
  6. Utiliser les critères d'arrêt appropriés (générations, évaluations, tolérance)
  7. 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 ElementwiseProblem pour les problèmes personnalisés
  • Contraintes formulées comme g(x) <= 0 et h(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) ou get_termination("f_tol", tol=0.001)

Skills similaires