Mines Informatique Commune MP PC PSI 2022Sujet, corrigé et rapport du jury
Modélisation numérique d'un matériau magnétique
- Manipulation de listes et de listes de listes
- Résolution numérique d'équations (dichotomie)
- Complexité algorithmique
- Bases de données et langage SQL
- Récursivité et utilisation des piles
Téléchargements
Présentation du sujet
Difficulté moyenneModélisation numérique d'un matériau magnétique : aimantation, base de données et modèle d'IsingAfficher ou masquer la section
Présentation du sujet
Difficulté moyenneLe sujet traite de la modélisation et de la simulation de l'aimantation de matériaux magnétiques en quatre parties. Il aborde l'étude de l'aimantation moyenne, le traitement d'une base de données de propriétés de matériaux, une modélisation microscopique par le modèle d'Ising de la transition paramagnétique-ferromagnétique, puis l'exploration récursive des domaines magnétiques (domaines de Weiss).
- 1Partie I : transition paramagnétique/ferromagnétique sans champ magnétique extérieurCalculer l'aimantation moyenne du matériau en fonction de la température par une méthode de dichotomie.
- 2Partie II : recherche dans une base de données de matériaux magnétiquesÉcrire des requêtes SQL pour interroger un modèle simplifié de base de données de propriétés de matériaux.
- 3Partie III : modèle microscopique d'un matériau magnétiqueDévelopper une modélisation microscopique à deux dimensions (modèle d'Ising) pour retrouver le comportement de l'aimantation.
- 4Partie IV : exploration des domaines de WeissÉcrire une fonction récursive explorant, à l'aide d'une pile, les domaines magnétiques d'une configuration de spins.
Difficulté moyenne. Le rapport indique que la longueur et la difficulté du sujet étaient tout à fait adaptées à ce type d'épreuve, avec des copies très faibles et d'autres excellentes, ce qui a permis de classer les candidats.
L'épreuve en chiffres
Moyenne 10,81 / 20 · écart-type 4,48 · 3 529 présents · où vous situez-vous ?Afficher ou masquer la section
L'épreuve en chiffres
- Moyenne
- 10,81/ 20
- Écart-type
- 4,48
- Présents
- 3 529
- Durée
- 2 h
Votre note sur 20 à ce sujet, en conditions de concours.
Source : document officiel du concours, épreuve du 22 avril 2022. Notes publiées par le concours (après harmonisation le cas échéant). Courbe : estimation par une loi normale.
Ce qu'a observé le jury
4 erreurs relevéesConfusion entre (b-a)/2 et (a+b)/2 · Complexité mal déterminée · Confusion entre élément et indice d'une listeAfficher ou masquer la section
Ce qu'a observé le jury
4 erreurs relevéesL'épreuve abordait un large éventail de notions du programme d'informatique commune, avec des questions élémentaires et d'autres exigeant une compréhension plus fine, ce qui a permis d'évaluer et de classer l'ensemble des candidats. La présentation des codes Python reste un point d'attention majeur du jury.
Les erreurs les plus sanctionnées
- 1Confusion entre (b-a)/2 et (a+b)/2Q2
L'algorithme de dichotomie n'est pas suffisamment maîtrisé, beaucoup de candidats confondant (b-a)/2 et (a+b)/2 pour le calcul du milieu du segment.
- 2Complexité mal déterminéeQ18
Beaucoup de candidats identifient deux boucles imbriquées et en concluent à tort que la complexité est le produit de leurs bornes, sans plus de justification.
- 3Confusion entre élément et indice d'une listeQ13
Le parcours et la manipulation d'une liste ont donné lieu à beaucoup d'erreurs, les candidats confondant les éléments d'une liste avec leur indice.
- 4return ajouté alors que la liste est modifiée en placeQ16
Le caractère modifiable des listes en Python n'est pas compris par tous : quand l'énoncé demandait de modifier une liste passée en paramètre, aucun return n'était attendu.
Ce qui a été bien réussi
- La question 1 a été plutôt réussie.
- La question 5 a été plutôt réussie dans l'ensemble.
- Les questions 21 à 23, en fin d'énoncé, ont permis de valoriser la prise de recul et la maîtrise de la récursivité et des piles chez les meilleurs candidats.
Conseils du jury
- Soigner la présentation des codes Python : noms de variables explicites, commentaires pertinents, absence de ratures excessives.
- Privilégier la syntaxe L.append(elt) plutôt que L = L + [elt] pour ajouter un élément à une liste.
- Expliquer sa démarche avant d'écrire une formule complexe plutôt que de rechercher une solution en une ligne.
- Déterminer la complexité d'un algorithme par une analyse réelle et non par simple comptage du nombre de boucles for.
Synthèse rédigée par WikiPrépa à partir du rapport officiel du jury (à télécharger en PDF). Les citations sont extraites du rapport.
Ces sujets peuvent vous intéresser
Lecture du sujet en ligne
L'énoncé complet, avec les formules et les figures, sans ouvrir le PDF.Afficher ou masquer la section
Lecture du sujet en ligne
ÉCOLE DES PONTS PARISTECH, ISAE-SUPAERO, ENSTA PARIS, TÉLÉCOM PARIS, MINES PARIS, MINES SAINT-ÉTIENNE, MINES NANCY, IMT ATLANTIQUE, ENSAE PARIS, CHIMIE PARISTECH - PSL.
Concours Mines-Télécom, Concours Centrale-Supélec (Cycle International).
CONCOURS 2022
ÉPREUVE D'INFORMATIQUE COMMUNE
Durée de l'épreuve : 2 heures
Les candidats sont priés de mentionner de façon apparente
sur la première page de la copie :
INFORMATIQUE COMMUNE
L'énoncé de cette épreuve comporte 12 pages de texte.
Modélisation numérique d'un matériau magnétique
Les candidats sont fortement incités à expliciter brièvement leurs programmes à l'aide de quelques commentaires bien placés.
Partie I : Transition paramagnétique/ferromagnétique sans champ magnétique extérieur
- Écrire les instructions nécessaires pour importer exclusivement les fonctions exponentielle (exp) et tangente hyperbolique (tanh) du module math, ainsi que les fonctions randrange et random du module random. Ces fonctions seront ainsi utilisables dans tous les programmes que vous écrirez ultérieurement.
- A partir de l'équation 2 , indiquer une équation
f(x, t) = 0 , d'inconnuex que l'on doit résoudre et écrire en Python la définition de la fonctionf correspondante (paramètresx ett , valeur renvoyéef(x, t) ). - Écrire une fonction dicho(f,
t ,a ,b , eps) qui calcule une valeur approchée à eps près du zéro d'une fonctionf(m, t) de variable x et de paramètre t fixé sur un intervalle[a, b] . On supposera pour simplifier que la fonction dont on recherche le zéro est continue et s'annule une fois et une seule sur l'intervalle[a, b] . - Établir l'expression de la complexité temporelle asymptotique de la fonction dicho en fonction de
a, b et eps.
5. En utilisant la fonction dicho, écrire une fonction construction_liste_m(t1, t2) qui construit et retourne une liste de 500 solutions de l'équation (1), pour
En traçant l'aimantation

Partie II : Recherche dans une base de données de matériaux magnétiques
- La table materiaux contient un champ id_materiau, clé primaire de la table de valeur entière, un champ nom de type chaîne de caractères pour le nom du matériau et un champ t_curie de valeur entière pour la température de Curie du matériau en kelvin.
| id_materiau | nom | t_curie |
| 4534 | cobalt | 1388 |
| 1254 | dioxyde de chrome | 386 |
| 8713 | nickel | 627 |
| 8284 | YIG | 560 |
|
|
|
|
- La table fournisseurs, contenant un champ id_fournisseur, clé primaire de type entier qui précise le code de chaque fournisseur, et un champ nom_fournisseur de type chaîne de caractères pour le nom du fournisseur.
| id_fournisseur | nom_fournisseur |
| 145 | Worldwide Materials |
| 13 | Materials Company |
|
|
|
- La table prix qui contient un champ id_prix, clef primaire de type entier, un champ id_mat dont les valeurs sont incluses dans l'ensemble des valeurs de la clé id_materiau de la table materiaux, un champ id_four dont les valeurs sont incluses dans l'ensemble des valeurs de la clé id_fournisseur de la table fournisseurs, et un champ prix_kg de type flottant qui précise le prix au kg que ce fournisseur propose pour ce matériau, en euros. Un fournisseur qui ne propose pas un matériau donné n'a pas d'entrée correspondante dans cette table.
| id_prix | id_mat | id_four | prix_kg |
| 1 | 4567 | 145 | 50.40 |
| 2 | 8671 | 13 | 1357.30 |
| 3 | 1763 | 145 | 52.75 |
|
|
|
|
|
6. Écrire une requête permettant d'obtenir le nom de tous les matériaux qui ont une température de Curie strictement inférieure à 500 kelvins.
7. Écrire une requête permettant d'obtenir les noms de tous les fournisseurs proposant du nickel et le prix proposé par chacun pour 4,5 kilogrammes de nickel.
8. Modifier ou compléter la requête précédente afin d'obtenir le nom du fournisseur de nickel le moins cher ainsi que le prix à payer chez ce fournisseur pour ces 4,5 kilogrammes de nickel. En cas d'égalité du prix optimal entre plusieurs fournisseurs, on obtiendra les noms de tous les fournisseurs possibles.
9. Écrire une requête permettant d'obtenir le nom de tous les matériaux et le prix moyen pour un kilogramme de chacun de ces matériaux (la moyenne étant calculée pour tous les fournisseurs proposant ce matériau), en se limitant aux prix moyens strictement inférieurs à 50 euros par kilogramme.
Partie III : Modèle microscopique d'un matériau magnétique
|
|
||||||||||
![]() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
h = 100
n = h**2
10. Écrire une fonction initialisation() renvoyant une liste d'initialisation des domaines contenant n spins de valeur 1 comme sur la figure 2 .
L'antiferromagnétisme est une propriété de certains milieux magnétiques. Contrairement aux matériaux ferromagnétiques, dans les matériaux antiferromagnétiques, l'interaction d'échange entre les atomes voisins conduit à un alignement antiparallèle des moments magnétiques atomiques (cf. figure 3). L'aimantation totale du matériau est alors nulle (on se limite au cas où

- Écrire une fonction initialisation_anti() renvoyant une liste s d'initialisation des domaines contenant
h spins en largeur eth en hauteur en alternant les 1 et -1 comme sur la figure 3 . - Pour afficher l'état global du matériau, il est nécessaire de convertir la liste
s utilisée en un tableau de tailleh × h représenté par une liste de listes. Écrire une fonction repliement(s) qui prend en argument la liste de spins s et qui renvoie une liste deh listes de tailleh représentant le domaine.
Attention : dans la suite, l'utilisation de la fonction repliement n'est pas autorisée : on travaille exclusivement sur une liste unidimensionnelles .
On suppose que seuls les quatre spins situés juste au dessus, en dessous, à gauche et à droite de
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Définir une fonction liste_voisins(i) qui renvoie la liste des indices des plus proches voisins du spin
s_i d'indice i dans la liste s (dans l'ordre gauche, droite, dessous, dessus). On pourra utilement utiliser les opérations % et // de Python, qui renvoient le reste et le quotient de la division euclidienne. - Définir la fonction energie(s) qui calcule l'énergie d'une configuration
s donnée (cf. équation3) .
Pour trouver une configuration stable pour les spins, il faut faire évoluer la liste vers une situation d'équilibre conformément aux principes de la physique statistique. On adopte une méthode probabiliste connue sous le nom de méthode de Monte-Carlo, dont le principe de fonctionnement est le suivant. À chaque étape :
- on choisit un spin au hasard dans l'échantillon,
- on calcule la variation d'énergie
ΔE qui résulterait d'un changement d'orientation de ce spin, - si
ΔE ⩽ 0 , ce spin change de signe, - si
ΔE > 0 , ce spin change de signe avec la probabilité donnée par la loi de Boltzmann :
15. Définir une fonction test_boltzmann(delta_e, T) qui renvoie True si le spin change de signe, et False sinon.
16. Juste après avoir sélectionné au hasard l'indice i d'un spin de la liste s à basculer éventuellement, pour évaluer l'écart d'énergie delta_e entre les deux configurations avant/après, on propose deux solutions sous forme des fonctions calcul_delta_e1 et calcul_delta_e2 :
def calcul_delta_e1(s, i):
s2 = s[:]
s2[i] = -s[i]
delta_e = energie(s2)-energie(s)
return delta_e
def calcul_delta_e2(s, i):
delta_e = 0
for j in liste_voisins(i):
delta_e = delta_e + 2*s[i]*s[j]
return delta_e
17. En utilisant la fonction test_boltzmann, définir une fonction monte_carlo(s, T, n_tests) qui applique la méthode de Monte-Carlo et qui modifie la liste
18. Écrire la fonction aimantation_moyenne(n_tests, T) qui :
- initialise une liste des spins (avec la fonction initialisation par exemple),
- la fait évoluer en effectuant n_tests tests de Boltzmann et les inversions éventuelles qui en découlent,
- calcule et renvoie l'aimantation moyenne de la configuration à la température T (définie ici comme la somme des valeurs des spins divisée par le nombre total de spins).
- Évaluer la complexité asymptotique de la fonction aimantation_moyenne(n_tests, T) en fonction de n, nombre de spins dans le système, et de n_tests.
- Cette complexité asymptotique serait-elle modifiée si on avait voulu prendre en compte toutes les interactions entre deux spins quelconques dans le système, et plus seulement entre les plus proches voisins? Justifier.

- Indiquer l'influence de l'augmentation de la température sur le comportement du matériau ferromagnétique.
Partie IV : Exploration des domaines de Weiss

- Pour chaque spin voisin du spin
s_i , elle doit vérifier si les spins sont identiques, et s'il n'a pas déjà été affecté à un domaine de Weiss précédemment. - Dès qu'un tel spin est ajouté, on inscrit son numéro de domaine dans la liste weiss, et on explore récursivement son voisinage.
- Écrire le code de la fonction récursive explorer_voisinage(s, i, weiss, num) conforme à la description ci-dessus.
- récupérer l'indice d'un spin à explorer dans la pile et le marquer dans la liste weiss,
- regarder dans son voisinage si des spins possèdent la même valeur et n'ont pas encore été affectés à un domaine, puis ajouter leurs indices dans la pile si c'est le cas.
- Écrire le code de la fonction itérative explorer_voisinage_pile(s, i, weiss, num, pile) conforme à la description ci-dessus.
24. Écrire le code de la fonction weiss=construire_domaines_weiss(s) qui construit et renvoie la liste weiss contenant le numéro des domaines de Weiss de chaque spin du domaine.

Fin de l'épreuve
Annexe : Documentation sommaire
- Module math : les fonctions exp et tanh permettent de calculer l'exponentielle et la tangente hyperbolique d'un entier ou d'un flottant.
- Module random :
- randrange(n) permet de renvoyer un entier aléatoirement choisi parmi
0, 1, 2…, n − 1 - random() permet de renvoyer un flottant aléatoire entre 0 et 1 suivant une densité de probabilité uniforme.
On admet que ces deux fonctions sont de complexité constante.
Questions fréquentes
4 questionsSur quels chapitres porte le sujet d'informatique commune des Mines 2022 ?Afficher ou masquer la section
Questions fréquentes
4 questionsSur quels chapitres porte le sujet d'informatique commune des Mines 2022 ?
Le sujet porte sur la manipulation de listes, la résolution numérique par dichotomie, la complexité algorithmique, les bases de données SQL et la récursivité, à travers la modélisation d'un matériau magnétique.
Le sujet d'informatique commune Mines 2022 est-il difficile ?
Le rapport le décrit comme de longueur et de difficulté adaptées, avec des copies très faibles et d'autres excellentes, permettant un bon classement des candidats.
Quelles erreurs le jury a-t-il le plus relevées sur ce sujet d'informatique commune Mines 2022 ?
Le jury signale une confusion fréquente dans l'algorithme de dichotomie, des complexités mal déterminées, et des confusions entre élément et indice d'une liste.
Faut-il utiliser numpy pour ce sujet d'informatique commune Mines 2022 ?
Non, le sujet demandait explicitement de manipuler des listes en évitant expressément le module numpy.
Pas de description pour le moment

