LangueFR
Français
English
Retour au sommaire du cours

ML pour la simulation et l'ingénierie

C'est le module où la formation d'ingénieur devient un avantage plutôt qu'un détour. La situation est toujours la même : on dispose d'un code de calcul fiable mais coûteux — CFD, éléments finis, neutronique, transport Monte-Carlo — et l'on a besoin de milliers d'évaluations pour propager des incertitudes, optimiser une conception ou piloter un système en temps réel. Le machine learning n'y remplace pas la physique : il en construit une approximation utilisable, et il faut savoir exactement dans quelles limites elle reste valide.

1. Monte-Carlo et réduction de variance

Estimer \(I = \mathbb{E}[f(X)]\) par tirage aléatoire donne \(\hat I_N = \frac1N\sum f(x_i)\), d'erreur type \(\sigma/\sqrt{N}\). La propriété remarquable — et la raison pour laquelle la méthode domine en grande dimension — est que cette vitesse ne dépend pas de la dimension, contrairement à toute quadrature déterministe : une grille de 10 points par axe fait \(10^{d}\) évaluations, soit un million en dimension 6 et un milliard en dimension 9. Le revers de Monte-Carlo : gagner un chiffre significatif coûte cent fois plus de simulations. D'où l'importance des techniques de réduction de variance, qui s'attaquent au numérateur plutôt qu'au dénominateur.

réduire la variance, plutôt qu'augmenter N
Variables antithétiques   tirer u ET 1-u : la corrélation négative entre les deux
                          annule une partie de la fluctuation. Gain modeste, coût nul.
Variable de contrôle      utiliser une grandeur g corrélée à f dont l'espérance est
                          CONNUE : Î = mean(f) - c·(mean(g) - E[g]). Souvent le
                          meilleur rapport gain/effort — un modèle simplifié ou un
                          métamodèle fait un excellent contrôle.
Échantillonnage           tirer selon une loi q qui concentre les tirages là où f
préférentiel              compte, puis corriger par le poids p/q. INDISPENSABLE pour
                          les événements rares.
Stratification / LHS      découper l'espace et garantir une couverture régulière.
Multi-niveaux (MLMC)      combiner beaucoup de simulations grossières et peu de
                          simulations fines : réduit le coût de plusieurs ordres.

Le cas des événements rares

Estimer une probabilité de défaillance de \(10^{-6}\) par Monte-Carlo direct demande de l'ordre de \(10^{8}\) simulations pour une précision de 10 % — hors de portée avec un code coûteux. La raison est simple : pour observer l'événement une centaine de fois, il faut cent millions de tirages. Les méthodes dédiées (échantillonnage préférentiel, subset simulation, FORM/SORM en fiabilité des structures) ramènent cela à quelques milliers d'appels en déplaçant délibérément la loi de tirage vers la zone de défaillance, puis en corrigeant le biais introduit. Elles se combinent avec un métamodèle raffiné près de la surface d'état limite — c'est exactement l'articulation avec l'optimisation bayésienne du module 19 : on enrichit le plan là où la décision se joue.

2. Quasi-Monte-Carlo et plans d'expériences

Les suites à faible discordance (Sobol, Halton) remplacent l'aléa par des points délibérément bien répartis : là où un tirage aléatoire laisse des trous et des amas, une suite de Sobol remplit l'espace régulièrement. La convergence passe de \(O(N^{-1/2})\) à \(O((\log N)^d/N)\) — bien meilleure en dimension modérée, l'avantage s'érodant quand \(d\) devient grand.

Python — scipy.stats.qmc
from scipy.stats import qmc

# hypercube latin optimisé : projection uniforme sur CHAQUE axe pris séparément
plan = qmc.LatinHypercube(d=6, optimization="random-cd", seed=0).random(n=120)

# suite de Sobol : extensible par puissances de 2, excellente uniformité
sobol = qmc.Sobol(d=6, scramble=True, seed=0).random_base2(m=7)     # 128 points

# mise à l'échelle vers les bornes PHYSIQUES des paramètres
X = qmc.scale(plan, l_bounds=[0.1, 300, 1e5, 0.2, 1.0, 0.0],
                    u_bounds=[0.9, 600, 5e5, 0.8, 3.0, 1.0])
print(qmc.discrepancy(plan))              # plus c'est bas, mieux l'espace est couvert

Règle empirique pour un premier plan destiné à construire un métamodèle : environ dix points par dimension d'entrée, puis enrichissement adaptatif (module 19) plutôt qu'un grand plan figé. Et toujours prévoir un jeu de validation tiré indépendamment : valider un métamodèle sur les points qui ont servi à le construire n'a aucun sens, surtout s'il interpole exactement.

3. Propagation d'incertitude et chaos polynomial

Les entrées d'un calcul sont incertaines : propriétés matériaux, conditions aux limites, tolérances géométriques. La propagation consiste à en déduire la loi de la sortie — et pas seulement sa moyenne, car une décision de sûreté porte sur un quantile extrême, pas sur un comportement typique.

Le chaos polynomial (PCE) développe la sortie sur une base de polynômes orthogonaux des variables aléatoires d'entrée :

\[ Y = f(\xi) \approx \sum_{j=0}^{P} \alpha_j \Psi_j(\xi), \qquad \mathbb{E}[Y] = \alpha_0, \quad \operatorname{Var}(Y) = \sum_{j\geq 1}\alpha_j^2 \]

La base est choisie selon la loi des entrées : Hermite pour des gaussiennes, Legendre pour des uniformes — c'est cette correspondance qui rend les polynômes orthogonaux pour le produit scalaire défini par la loi, et donc qui donne les formules de moments ci-dessus.

L'intérêt est double : moyenne et variance se lisent directement sur les coefficients, sans simulation supplémentaire, et les indices de sensibilité s'en déduisent analytiquement (section suivante). Les coefficients s'obtiennent par projection ou par régression parcimonieuse (LARS), ce qui en fait un cas particulier remarquable de la régression régularisée du module 14. Limites : la taille de la base explose avec la dimension et le degré, et la méthode suppose une réponse régulière — un comportement discontinu (bifurcation, changement de régime) la met en échec, exactement comme un GP à noyau lisse.

4. Analyse de sensibilité globale

Question centrale en ingénierie : quelle part de la variabilité de la sortie chaque entrée explique-t-elle ? Les dérivées partielles ne répondent pas — elles ne valent qu'au point où elles sont calculées, et pour une plage de variation infinitésimale. L'analyse de sensibilité globale décompose la variance totale sur tout le domaine de variation :

\[ S_i = \frac{\operatorname{Var}\big(\mathbb{E}[Y\mid X_i]\big)}{\operatorname{Var}(Y)}, \qquad S_{T_i} = 1 - \frac{\operatorname{Var}\big(\mathbb{E}[Y\mid X_{\sim i}]\big)}{\operatorname{Var}(Y)} \]

\(S_i\) est l'indice du premier ordre : la part de variance qu'on supprimerait en fixant \(X_i\) à sa vraie valeur. \(S_{T_i}\) est l'indice total : effet propre plus toutes les interactions où \(X_i\) intervient.

comment lire les deux ensemble
S_Ti ≈ S_i          la variable agit SEULE, sans interaction → effet additif
S_Ti ≫ S_i          la variable n'agit qu'EN INTERACTION avec d'autres.
                    Attention : la fixer ferait perdre plus que S_i ne le suggère.
S_Ti ≈ 0            la variable n'influence rien → on peut la FIXER, ce qui réduit
                    la dimension du problème (utile pour le module 19)
Σ S_i < 1           la part manquante est due aux INTERACTIONS

exemple :  conductivité  S=0,45  S_T=0,52   → effet principal, peu d'interaction
           débit         S=0,10  S_T=0,44   → agit surtout EN INTERACTION
           épaisseur     S=0,02  S_T=0,03   → négligeable : à fixer
Python — SALib
from SALib.sample import sobol as sobol_sample
from SALib.analyze import sobol as sobol_analyze

probleme = {"num_vars": 4,
            "names": ["conductivite", "debit", "epaisseur", "coef_echange"],
            "bounds": [[10, 25], [0.5, 2.0], [1e-3, 5e-3], [200, 900]]}

X = sobol_sample.sample(probleme, 1024)        # N(2d+2) = 10 240 évaluations
Y = np.array([surrogate(x) for x in X])        # sur le MÉTAMODÈLE, pas le code direct

Si = sobol_analyze.analyze(probleme, Y)
print(Si["S1"], Si["ST"])

Le coût — \(N(2d+2)\) évaluations — est la raison pour laquelle on calcule presque toujours les indices de Sobol sur un métamodèle plutôt que sur le code direct. Pour un simple criblage préalable en grande dimension, la méthode de Morris identifie les variables négligeables pour quelques dizaines d'évaluations seulement, et sert à réduire le problème avant l'analyse fine.

5. Métamodèles : construire et valider

Un métamodèle remplace le code de calcul par une fonction bon marché ajustée sur un plan d'expériences. Les familles, et le critère de choix :

choisir un surrogate
Krigeage / GP       interpole exactement, fournit une VARIANCE de prédiction.
(module 19)         Le défaut pour n < quelques milliers de points. Indispensable
                    si l'on veut enrichir le plan de façon adaptative.
RBF                 interpolation par fonctions radiales : simple, robuste, très bon
                    en dimension modérée. Sans incertitude native — c'est exactement
                    ce que j'ai implémenté dans mdisd (voir le projet).
Chaos polynomial    moments et indices de Sobol analytiques. Excellent si la réponse
                    est régulière et la dimension modérée.
Gradient boosting   robuste aux discontinuités et au bruit numérique, mais N'EXTRAPOLE
                    PAS (module 14) : dangereux hors du domaine du plan.
Réseau de neurones  utile quand le plan est très grand (10⁴+) ou la sortie de grande
                    dimension (un champ complet plutôt qu'un scalaire).
Un métamodèle se valide sur des points qu'il n'a jamais vus. Le critère usuel est le \(Q^2\) — le \(R^2\) calculé sur un jeu de validation indépendant, ou par validation croisée leave-one-out, quasi gratuite pour un krigeage grâce à une formule fermée. Un \(Q^2\) de 0,99 sur les points d'apprentissage ne veut rien dire : un interpolateur passe par tous ses points par construction. Trois vérifications supplémentaires valent d'être systématiques : l'erreur maximale (et non seulement moyenne) sur le jeu de validation, la qualité de l'approximation dans la zone qui décide — près d'un seuil de sûreté, une erreur moyenne faible ne dit rien —, et la cohérence physique : monotonie attendue, signe, ordres de grandeur, comportement aux limites du domaine.

6. Réduction de modèle : POD, DMD

Les métamodèles précédents prédisent un scalaire. Quand la sortie est un champ — température en tout point, vitesse sur tout le maillage, soit des millions de valeurs —, on passe par la réduction de modèle. L'observation fondatrice : les solutions d'un système physique paramétré, malgré leur taille apparente, vivent presque toujours dans un sous-espace de très faible dimension.

La POD (décomposition orthogonale aux valeurs propres) consiste à assembler une matrice de snapshots — chaque colonne est un champ solution pour un jeu de paramètres — et à en calculer la SVD (module 8). Les premiers vecteurs singuliers forment une base de modes, et la décroissance des valeurs singulières indique combien en garder. C'est, mot pour mot, une PCA appliquée à des champs physiques : les modes obtenus ont souvent une interprétation directe — structures cohérentes d'un écoulement, modes propres de vibration.

Python — POD sur des snapshots
import numpy as np

S = np.column_stack(snapshots)                 # (n_degrés_de_liberté, n_simulations)
moyenne = S.mean(axis=1, keepdims=True)
U, s, Vt = np.linalg.svd(S - moyenne, full_matrices=False)

energie = np.cumsum(s**2) / np.sum(s**2)
r = int(np.searchsorted(energie, 0.9999) + 1)  # souvent r ≈ 10-30 pour 99,99 %
print(f"{S.shape[0]} degrés de liberté réduits à {r} modes")
Phi = U[:, :r]                                 # la base réduite

# coefficients réduits : LA CIBLE d'un surrogate (GP, RBF) sur les paramètres
A = Phi.T @ (S - moyenne)                      # (r, n_simulations)
champ_predit = moyenne + Phi @ coeffs_predits  # reconstruction d'un champ COMPLET

Deux stratégies en découlent. Le ROM non intrusif — celui du code ci-dessus — apprend simplement les coefficients modaux en fonction des paramètres : facile, applicable à un code fermé dont on n'a que les sorties, mais sans garantie physique. Le ROM intrusif (projection de Galerkin des équations sur la base réduite) conserve la structure des équations et offre de meilleures garanties, mais exige d'accéder aux opérateurs du solveur, et la non-linéarité impose des techniques d'hyper-réduction (DEIM). La DMD, elle, extrait des modes associés à des fréquences et des taux de croissance, ce qui en fait l'outil naturel pour analyser une dynamique et prédire à court terme.

La limite commune est claire : ces méthodes supposent une faible dimension effective. Un écoulement fortement turbulent, un problème avec chocs ou fronts mobiles, une bifurcation — et le spectre ne décroît plus. C'est d'ailleurs l'information utile : la décroissance des valeurs singulières mesure la réductibilité du problème, et se calcule avant tout investissement dans un ROM.

7. SciML : opérateurs neuronaux et hybrides

Le module 16 présente les PINN, qui apprennent une solution sous contrainte d'EDP. Les opérateurs neuronaux visent plus haut : apprendre l'application qui envoie une fonction d'entrée (champ de conditions initiales, de coefficients, de géométrie) sur la fonction solution — donc une famille entière de problèmes, résolue en une seule fois.

  • DeepONet — deux réseaux, l'un encodant la fonction d'entrée échantillonnée (branch), l'autre les coordonnées d'évaluation (trunk), combinés par produit scalaire. Fondé sur un théorème d'approximation d'opérateurs.
  • FNO (Fourier Neural Operator) — effectue la convolution dans l'espace de Fourier en ne gardant que les basses fréquences : le coût passe en \(O(n\log n)\), et le modèle devient indépendant de la discrétisation, donc entraînable sur maillage grossier et évaluable sur maillage fin. Très efficace sur les problèmes à géométrie régulière et périodique.
  • GNN sur maillage (module 18) — la bonne réponse quand la géométrie est complexe et non structurée.

Une fois entraînés, ces modèles évaluent une solution en millisecondes contre des heures de calcul — d'où leur intérêt pour l'optimisation de forme, le contrôle en temps réel ou l'exploration paramétrique. Le prix à payer : la précision plafonne bien au-dessus de celle d'un solveur, la généralisation hors du régime d'entraînement est mauvaise, et l'entraînement demande un gros corpus de simulations. L'investissement ne se justifie donc que par un grand nombre d'évaluations futures.

Hybrider plutôt que remplacer

Les approches qui fonctionnent le mieux en pratique ne substituent pas le ML à la physique : elles le placent là où la physique est mal connue. Apprendre une loi de fermeture (turbulence, loi de comportement matériau) tout en conservant les équations de conservation. Apprendre la correction entre un modèle grossier rapide et la réalité expérimentale — c'est le multi-fidélité du module 19, et cela demande beaucoup moins de données qu'apprendre la sortie complète. Imposer des contraintes dures — positivité, conservation de la masse, symétries, équivariance — directement dans l'architecture, ce qui améliore autant la fiabilité que l'efficacité en données (module 15). Un modèle qui viole la conservation de l'énergie n'est pas utilisable, quelle que soit son erreur quadratique moyenne.

8. Assimilation de données et problèmes inverses

L'assimilation combine un modèle physique et des mesures pour estimer l'état ou les paramètres d'un système. C'est le cadre de la météorologie opérationnelle, du recalage de modèles et de la surveillance en ligne. Le formalisme variationnel (4D-Var) s'écrit comme la minimisation d'une fonctionnelle :

\[ J(x_0) = \underbrace{\tfrac12 (x_0-x^b)^\top B^{-1}(x_0-x^b)}_{\text{écart à l'ébauche}} + \underbrace{\tfrac12\sum_{k}(\mathcal{H}(x_k)-z_k)^\top R^{-1}(\mathcal{H}(x_k)-z_k)}_{\text{écart aux observations}} \]

On reconnaît un MAP (module 10) : \(B\) encode la confiance dans l'ébauche a priori, \(R\) la précision des capteurs, et minimiser \(J\) revient à maximiser une densité a posteriori gaussienne. La minimisation demande le gradient par rapport à l'état initial, obtenu par le modèle adjoint — c'est exactement de la différentiation automatique en mode inverse, la même mécanique que la rétropropagation (module 16). D'où l'intérêt actuel des simulateurs différentiables : quand le solveur lui-même est écrit dans un cadre autodifférentiable (JAX, PyTorch), calibrer un paramètre physique devient une optimisation par gradient ordinaire, et l'on récupère gratuitement des décennies d'outillage.

L'alternative séquentielle est le filtre de Kalman d'ensemble (EnKF), qui propage un ensemble d'états au lieu d'une covariance explicite — indispensable dès que la dimension dépasse quelques milliers (module 17).

Identifiabilité : la question à poser avant de calibrer. Un problème inverse est presque toujours mal posé : plusieurs jeux de paramètres reproduisent exactement les mêmes mesures. Deux paramètres peuvent être compensatoires — seule leur combinaison (un produit, un rapport) est identifiable — et un optimiseur retournera alors une valeur précise et arbitraire, qui changera complètement avec une autre initialisation. Les remèdes : régulariser (Tikhonov, c'est-à-dire un a priori), réduire le nombre de paramètres calibrés à ceux que l'analyse de sensibilité désigne comme influents (section 4), et surtout estimer l'incertitude a posteriori plutôt qu'un point unique. Un paramètre calibré sans intervalle de crédibilité n'est pas un résultat.

9. Jumeau numérique et crédibilité

Un jumeau numérique n'est pas une simulation 3D animée : c'est un modèle d'un système physique particulier, synchronisé avec ses mesures, et utilisé pour décider. L'architecture typique assemble tout ce module : un modèle réduit ou un surrogate pour tenir la contrainte temps réel, un mécanisme d'assimilation pour se recaler sur les capteurs, une quantification d'incertitude pour assortir chaque prédiction d'une marge (module 10), et un module de décision (maintenance, pilotage — module 24). Les difficultés réelles sont moins scientifiques qu'opérationnelles : qualité et dérive des capteurs, latence, versionnement du modèle et de ses recalages (module 26), et la question de savoir quand le jumeau doit déclarer qu'il ne sait plus.

Un modèle appris dans un contexte où la sûreté compte

Les référentiels de vérification et validation (V&V) demandent trois choses distinctes : la vérification (résout-on correctement les équations ?), la validation (les équations décrivent-elles la réalité ?) et la quantification des incertitudes. Un modèle appris s'y insère mal par nature : il n'a pas d'équations à vérifier, et son comportement hors domaine est imprévisible. Les pratiques qui le rendent défendable : déclarer explicitement un domaine de validité et refuser de prédire au-delà (la variance épistémique d'un GP ou un détecteur de nouveauté servent de garde-fou, module 10) ; assortir chaque sortie d'un intervalle avec garantie de couverture ; conserver un modèle physique de référence comme arbitre sur les cas critiques ; et tracer chaque prédiction jusqu'aux données et à la version du modèle (module 26). Autrement dit : le ML accélère l'exploration, il ne signe pas le dossier de sûreté.

Ce qu'il faut retenir du module

  • Monte-Carlo converge en \(1/\sqrt{N}\) indépendamment de la dimension ; pour aller plus vite, réduire la variance plutôt qu'augmenter \(N\).
  • LHS ou Sobol pour un plan initial, puis enrichissement adaptatif guidé par l'incertitude (module 19).
  • Les indices de Sobol totaux disent quelles variables on peut fixer ; les calculer sur un métamodèle.
  • Un surrogate se valide hors échantillon, avec l'erreur maximale et la cohérence physique, pas seulement un \(Q^2\) moyen.
  • La décroissance des valeurs singulières des snapshots mesure la réductibilité d'un problème avant tout investissement.
  • Les opérateurs neuronaux échangent de la précision contre plusieurs ordres de grandeur de vitesse ; hybrider vaut mieux que remplacer.
  • Un problème inverse est mal posé par défaut : vérifier l'identifiabilité et fournir une incertitude, jamais un point seul.

Monte-CarloSobolSurrogatePOD/ROMFNOAssimilation