Optimisation

Moteurs d'optimisation, paramètres et contrôles de résultats disponibles dans SPARC.

Principe de l'Optimisation Bayésienne

L'optimiseur explore un espace de paramètres physiques et évalue chaque essai avec le même chemin de simulation que les configurations unitaires.

Stratégie d'exploration
Trials 1–20   →  Exploration initiale aléatoire
Trials 21+    →  Exploitation Bayésienne
                 (propose les zones les plus prometteuses)
Les valeurs optimales ne sont pas une validation scientifique. Elles doivent être relues avec les diagnostics de validité, les bornes physiques et les résultats de référence disponibles.

Moteurs d'Optimisation Disponibles

Moteur Algorithme Usage recommandé
Optuna TPE Tree-structured Parzen Estimator Défaut · tout usage
Optuna GP Gaussian Process Sampler < 10 paramètres
BoTorch GP qLogExpectedImprovement Études coûteuses avec peu de paramètres
CMA-ES Evolution Strategy Espaces larges continus
Random Échantillonnage uniforme Baseline

Via l'Interface Web

  1. Aller sur http://localhost:5000/optimize
  2. Choisir le type de simulation et le moteur
  3. Définir les paramètres avec leurs bornes
  4. Cliquer Lancer l'optimisation
  5. Suivre la progression en temps réel
  6. Analyser : convergence, importance, heatmap, Top 10

Via le CLI Interactif

Terminal
python -m cli_interactif
# Touche 'o' → Nouvelle optimisation → Suivre l'assistant

Assistant CLI en 6 étapes

  1. Type de simulation de base
  2. Moteur (Optuna TPE / GP / BoTorch)
  3. Objectifs (sélection multiple)
  4. Nombre d'essais
  5. Plages de paramètres (assistant interactif)
  6. Nom de l'optimisation

Via l'API REST

Créer un job d'optimisation

cURL
curl -X POST http://localhost:5000/api/optimize/create \
  -H "Content-Type: application/json" \
  -d '{
    "name": "opt_si",
    "sim_type": "homojunction",
    "engine": "optuna",
    "sampler": "tpe",
    "n_trials": 200,
    "objectives": ["efficiency"],
    "param_ranges": [
      {"name": "doping.n_region", "type": "log_float", "low": 1e15, "high": 1e18},
      {"name": "doping.p_region", "type": "log_float", "low": 1e14, "high": 1e17},
      {"name": "geometry.thickness_n", "type": "log_float", "low": 1e-5, "high": 5e-4},
      {"name": "geometry.thickness_p", "type": "log_float", "low": 5e-5, "high": 2e-3}
    ]
  }'
# → {"success": true, "opt_id": "abc123de"}

Lancer l'optimisation

cURL
curl -X POST http://localhost:5000/api/optimize/abc123de/run

Suivre la progression (SSE)

cURL
curl http://localhost:5000/api/optimize/abc123de/progress

Récupérer les résultats

cURL
curl http://localhost:5000/api/optimize/abc123de/results

Télécharger le rapport PDF

cURL
curl http://localhost:5000/api/optimize/abc123de/pdf -o rapport.pdf

Format param_ranges

Exemple de paramètre
{
  "name":  "doping.n_region",
  "type":  "log_float",
  "low":   1e15,
  "high":  1e18,
  "label": "Dopage N (cm-3)"
}
type Espace d'exploration
float Continu linéaire
log_float Continu log-scale (dopage, τ, μ)
int Entier linéaire
log_int Entier log-scale
categorical Valeurs discrètes ("choices": [...])
Notation pointée : La notation pointée mappe sur la structure de la config Sesame :
doping.n_regionconfig["doping"]["n_region"]

Analyse de Sensibilité Sobol

L'analyse de sensibilité Sobol permet de déterminer quels paramètres ont le plus d'impact sur les objectifs.

cURL
curl -X POST http://localhost:5000/api/optimize/abc123de/sensitivity \
  -H "Content-Type: application/json" \
  -d '{"n_samples": 64}'

Retourne les indices :

  • S1 : effet de premier ordre (effet direct)
  • ST : effet total (incluant les interactions)
  • S2 : effets d'interaction entre paires de paramètres

Surrogate Model

Le surrogate est un modèle ML (Random Forest par défaut) entraîné sur les résultats d'optimisation. Il permet des prédictions instantanées sans relancer Sesame.

Prédiction

cURL
curl -X POST http://localhost:5000/api/optimize/abc123de/predict \
  -H "Content-Type: application/json" \
  -d '{
    "doping.n_region": 2.5e16,
    "doping.p_region": 1e15,
    "geometry.thickness_n": 1e-4,
    "geometry.thickness_p": 3e-4
  }'
# → {"predicted_value": 18.7, "uncertainty": 0.4, "confidence_95": [17.9, 19.5]}
Performance : Prédiction en ~1 ms au lieu de ~5 s (Sesame)

Analyse du Surrogate (CLI)

Le menu Analyse du surrogate dans le CLI (o → Analyse du surrogate) offre :

Option Description
Scan 1D Variation d'un paramètre · courbe ASCII en temps réel
Inverse prediction Trouve les paramètres atteignant une cible η donnée
Sauvegarder Exporte le modèle entraîné (.pkl, fallback ~/.sparc/surrogates/)
Charger Recharge un surrogate précédemment entraîné
Note : Le modèle surrogate nécessite au minimum 2 trials pour l'entraînement.
Les modèles disponibles sont : rf (Random Forest), gbm (Gradient Boosting), gp (Gaussian Process).

Résultats d'Optimisation

À la fin d'une optimisation, vous obtenez :

  • Meilleurs paramètres avec valeur d'efficacité
  • Courbe de convergence — évolution du meilleur η
  • Importance des paramètres — bar chart
  • Heatmap de corrélation — paramètre × objectif
  • Top 10 essais — tableau trié
  • Rapport PDF téléchargeable
  • Surrogate model entraîné pour prédiction rapide
Historique d'optimisation
Fig 1. Courbe de convergence typique (Recherche TPE / BoTorch)

Optimisation Multi-Objectif

SPARC supporte l'optimisation multi-objectif pour maximiser simultanément plusieurs métriques, conduisant à la recherche d'un front de Pareto optimal :

  • Efficacité (η)
  • Tension de circuit ouvert (Voc)
  • Courant de court-circuit (Jsc)
  • Facteur de remplissage (FF)
Front de Pareto
Fig 2. Visualisation du front de Pareto (compromis Efficacité vs Coût)
Exemple multi-objectif
"objectives": ["efficiency", "voc", "ff"]

Bonnes Pratiques

  • Nombre de trials : 200-500 pour une exploration complète, 1000+ pour haute précision
  • Choix du moteur : Optuna TPE pour la plupart des cas, BoTorch pour haute précision
  • Bornes de paramètres : Utilisez log_float pour les paramètres avec plusieurs ordres de grandeur
  • Validation : Vérifiez toujours les meilleurs paramètres avec une simulation indépendante
  • Surrogate : Utilisez le surrogate pour explorer rapidement l'espace avant de valider avec Sesame