À propos du projet

# ML informé par la physique pour le durcissement de Hall–Petch dans les MPEA FCC Ce dépôt constitue le matériel compagnon du manuscrit d'*Acta Materialia* intitulé « Revisiting Hall–Petch strengthening in FCC multi-principal element alloys: what grain size, composition, and processing can and cannot explain » par M. Mulukutla, S. P. Padhy, et al. Il contient le jeu de données complet, le pipeline d'analyse intégral, chaque tableau de résultats et figure présentés dans l'article, les sources LaTeX, un rapport complet régénéré à partir des résultats en direct, et des tests de régression qui verrouillent les valeurs canoniques du manuscrit. ## La question Les modèles de propriétés par apprentissage automatique peuvent induire en erreur la conception d'alliages lorsque l'interpolation est prise pour du transfert, ou lorsqu'un descripteur à motivation physique est lu comme un mécanisme sans montrer qu'il apporte de l'information au-delà des entrées mesurées. Ce dépôt traite ce problème de bout en bout sur la limite d'élasticité (YS) et la dureté Vickers (HV) de 94 conditions d'alliages FCC dans le système Al–Co–Cr–Cu–Fe–Mn–Ni–V. ## Cinq familles de modèles Les analyses sont organisées selon les cinq familles du manuscrit. Un numéro de famille plus élevé signifie plus de flexibilité, non plus de fidélité physique. - **Famille 1** : Hall–Petch classique (lois de taille de grain classiques et alternatives) - **Famille 2** : Descripteurs physiques (VLC, Labusch, Toda-Caraballo ; Wen ; PCA-OLS) - **Famille 3** : Composition / mise en forme (la hiérarchie du modèle M, incl. M15) - **Famille 4** : ML non linéaire (estimateurs linéaires et non linéaires appariés) - **Famille 5** : Régression symbolique (PySR, SISSO, formes fermées fixes) Le protocole de validation inclut la validation croisée 5-fold, LOO, LOBO, la littérature et les contrôles de singularité. ## Résultats principaux Toutes les valeurs sont des Q² hors échantillon regroupés, recalculés au moment du test à partir de `data/derived/data_with_vlc.csv`. | Cible | Modèle | 5-fold | LOO | LOBO | |---|---|---|---|---| | YS | Famille 1 Hall–Petch classique | 0.405 | 0.406 | 0.373 | | YS | Famille 2 PCA-OLS (contenu par fold) | 0.462 | 0.480 | 0.362 | | YS | Famille 3 M3 (σ₀ dépendant de la composition) | 0.666 | 0.652 | 0.625 | | YS | **Famille 3 M15 (+ interaction SD_grain)** | **0.731** | **0.694** | **0.694** | | YS | Famille 4 Lasso S2 (réglages fixes) | 0.683 | 0.674 | 0.621 | | YS | Famille 4 LightGBM S2 (réglages fixes) | 0.632 | 0.574 | 0.615 | | YS | Famille 4 Bayesian ridge S2 (ARMOTE-CV imbriqué) | 0.685 | 0.666 | 0.613 | | HV | Famille 1 Hall–Petch classique | 0.086 | 0.136 | −0.077 | | HV | Famille 4 LightGBM S1 | 0.195 | 0.323 | 0.112 | | HV | Famille 5 forme fixe (post-sélectionnée) | 0.725 | 0.727 | 0.636 | Trois constats font l'essentiel du travail : - **La largeur de la distribution de taille de grain n'aide que sous une forme spécifique.** Ajouter SD_grain à M3 comme terme additif indépendant porte le LOO à 0.668 mais abaisse le LOBO à 0.595. Le laisser modifier le terme de Hall–Petch à la place (M15) donne 0.694 pour les deux, avec ΔBIC = −20.1 contre M3. Le contrôle additif est ce qui rend cette distinction visible. - **La non-linéarité n'apporte rien à entrées appariées.** Lasso et LightGBM atteignent 0.621 et 0.615 en validation avec lots tenus à l'écart, avec des intervalles bootstrap qui se recouvrent. - **Rien ne se transfère à la littérature.** Chaque forme fermée évaluée a un R² négatif sur les enregistrements de littérature à mesure directe, de sorte que cet ensemble est rapporté comme test de résistance plutôt que comme référence externe. ## Organisation ``` data/raw/ Grain_Size_Summary_v3.xlsx — la seule véritable entrée data/derived/ descripteurs calculés, régénérés par `make data` scripts/ _config.py chemins partagés ; rend chaque dossier de famille importable _figstyle.py une palette et une échelle typographique pour chaque figure 00_data_preparation/ descripteurs, quantités VLC, échelle de caractéristiques 01_family1_grain_size/ lois d'échelle, pentes intra-réplicat 02_family2_physics_descriptors/ référence SSS, audit de redondance, PCA-OLS 03_family3_composition_processing/ hiérarchie du modèle M, modèles SD_grain 04_family4_nonlinear_ml/ panel réglé, comparaison à entrées appariées 05_family5_symbolic_regression/ grille PySR, variantes SISSO 06_validation/ CV groupée, test de littérature, audit de singularité 07_hardness_tabor/ rapport de Tabor et analyse de rang HV–YS figures/ chaque figure de publication results/ sorties CSV ; chacune est produite par un script nommé analysis_plots/ figures exploratoires et diagnostiques paper/ main.tex, supplementary.tex, references.bib, figures/ report/ generate_report.py + Comprehensive_Analysis_Report.docx notebook/ générateur + .ipynb généré docs/ reproducing.md, validation_protocol.md tests/ tests de régression verrouillant les valeurs canoniques ``` ## Démarrage rapide ```bash pip install -r requirements.txt make test # ~1 s — recalcule et vérifie chaque valeur principale make figures # régénère toutes les figures de publication à partir des résultats en cache make report # reconstruit le rapport Word à partir des résultats en direct make paper # construit main.pdf et supplementary.pdf make help # toutes les cibles ``` Ordre complet des étapes et durées : `docs/reproducing.md`. ## Reproductibilité `make test` recalcule la hiérarchie du modèle M, les références de la Famille 1, le rapport de Tabor et l'audit du jeu de données **à partir des données dérivées brutes** et les confronte aux valeurs imprimées dans le manuscrit. Il vérifie aussi que chaque figure et tableau est référencé dans le texte et que chaque fichier de figure inclus existe. Si une analyse change, les tests échouent avant que le manuscrit ne puisse dériver. Le **panel ARMOTE-CV imbriqué** est vérifié plutôt que réexécuté. Son générateur stocke une étude Optuna, un jeu de paramètres sélectionné, et une paire de scalers de caractéristiques et de cible par fold. Sur les six folds LOBO, les cinq hyperparamètres réglés du Bayesian ridge prennent six valeurs distinctes, et chaque scaler est ajusté sur sa seule partition d'entraînement. Recharger ces objets et prédire chaque lot tenu à l'écart reproduit exactement les six scores de fold et donne un Q² LOBO regroupé de 0.613 (RMSE 50.5 MPa). L'imbrication est donc démontrée, non affirmée. Ces artefacts sont livrés avec le dépôt, sous `scripts/04_family4_nonlinear_ml/armote_cv/` — voir le README à cet endroit pour ce qui a été conservé et ce qui a été laissé en amont. Deux analyses sont **archivales** et ne sont pas régénérées ici, dans le manuscrit, ni par `make` : | Résultat archival | Raison | |---|---| | Poids d'empilement Bayesian PSIS-LOO | Les tirages postérieurs PyMC n'ont pas été conservés | | Performance PySR de la boucle externe | les équations ont été sélectionnées sur des fronts à données complètes | Le manuscrit rapporte ces éléments comme archivals, et les quantités fréquentistes correspondantes qui *peuvent* être recalculées (coefficients OLS de M15, critères d'information et scores de CV groupée) sont régénérées par `make sdgrain`. ## Figures Chaque figure importe `scripts/_figstyle.py`, de sorte que tout le document utilise une palette Okabe–Ito et une échelle typographique uniques. La couleur n'est jamais le seul canal : les lots portent des formes de marqueurs distinctes, les familles de modèles sont séparées par la position, et les quantités signées impriment leur valeur. Les figures sont tracées à leur largeur d'impression finale, de sorte qu'une taille de point dans le script est la même taille de point sur la page. La palette a été vérifiée sous deutéranopie, protanopie et tritanopie simulées. ## Citation Voir `CITATION.cff`. Les métadonnées archivals pour Zenodo sont dans `.zenodo.json`. ## Licence MIT — voir `LICENSE`. Le jeu de données expérimental brut et la compilation de littérature sont inclus ; les PDF de littérature cités ne sont pas redistribués. ## Remerciements Financé par l'Army Research Laboratory dans le cadre de l'accord de coopération W911NF-22-2-0106.