Connectez-vous pour consulter le corrigé.
MODÉLISATION MATHÉMATIQUE ET INFORMATIQUE
Durée : 3 heures
Sujet du concours Agro-Véto 2024 (concours A BCPST).
L’usage d’une calculatrice est autorisé pour cette épreuve.
Si, au cours de l’épreuve, un candidat repère ce qui lui semble être une erreur d’énoncé, il le signale sur sa copie et poursuit sa composition en expliquant les raisons des initiatives qu’il a été amené à prendre.
Dans ce sujet, on propose d’étudier différents modèles d’évolution de population, et d’étudier les conditions de son extinction. Il est composé de deux problèmes indépendants.
Le Problème A propose d’étudier des modèles déterministes qui mettent en valeur une condition d’extinction.
Le Problème B propose d’étudier le modèle probabiliste de Galton-Watson. Il est composé de deux parties ; la deuxième est dédiée à l’étude algorithmique du modèle.
Les candidats peuvent admettre le résultat d’une question ou d’une sous-question pour passer aux questions suivantes, à condition de le mentionner explicitement.
Une annexe dans laquelle certaines commandes Python sont rappelées est jointe à la fin du sujet. Pour les questions d’informatique, on considérera que les importations de modules nécessaires ont été préalablement faites.
Dans ce problème, les questions sont largement indépendantes ; les sous-questions sont liées.
On s’intéresse d’abord à des modèles déterministes discrets d’évolution d’une population. Dans chacun des modèles, une suite \((v_n)\) modélise le nombre d’individus dans la population à la génération \(n\). On dit qu’il y a extinction si \(\displaystyle\lim_{n\to+\infty}v_n=0\).
Pour commencer, on propose le modèle suivant : chaque individu a un nombre de descendants \(q>0\), de telle sorte que \[\forall n\in\mathbb{N},\ v_{n+1}=qv_n\] Résoudre le modèle et donner une condition d’extinction.
On propose un nouveau modèle. On définit une suite \((v_n)\) par : \[v_0\in\mathbb{R}_+ \text{ et } \forall n\in\mathbb{N},\ v_{n+1}=v_n+\frac{1}{2}v_n\left(\frac{S-v_n}{S}\right)\] où \(S\in\left]0,+\infty\right[\) est une constante du problème.
Déterminer une fonction \(f\) sur \(\mathbb{R}_+\) telle que \[\forall n\in\mathbb{N},\ v_{n+1}=f(v_n)\] Dresser le tableau de variations de \(f\) sur \(\mathbb{R}_+\).
Compléter le code suivant pour qu’il trace les \(20\) premiers termes de la suite.
S = 30
v0 = 5
L=[v0]
v=v0
for k in ## LIGNE A COMPLETER ##
## LIGNE A COMPLETER ##
## LIGNE A COMPLETER ##
plt.plot(L)
plt.xlabel("n")
plt.ylabel("v_n")
plt.show()Pour le tracé, on a utilisé le module
matplotlib.pyplot sous l’alias plt. Comment
importer le module ?
On trace sur la même figure l’évolution de \(v_n\) pour différentes valeurs de \(v_0\). Cela donne les courbes suivantes (pour \(S=30\)).
Conjecturer sur le comportement de la suite.
On suppose maintenant que \(v_0\in\left]0,S\right]\). Montrer que \((v_n)\) est croissante et majorée par \(S\). En déduire qu’elle converge et donner sa limite.
On souhaite affiner le modèle en modifiant la fonction \(f\). Désormais, \[v_{n+1}=v_n+\frac{1}{2}v_n\left(\frac{S-v_n}{S}\right)\left(\frac{v_n-A}{S}\right)\] où \(A\in\left]0,S\right[\) est fixé.
Identifier \(f\). Étudier le signe de \(f(x)-x\) sur \([0,S]\). En déduire l’allure de la courbe représentative de \(f\) sur \([0,S]\). On fera attention à la position relative par rapport à la droite d’équation \(y=x\) et on utilisera sans démonstration que \(f\) est une bijection strictement croissante de \([0,S]\) sur lui-même.
Un code analogue au précédent donne le tracé suivant pour les premiers termes de la suite \((v_n)\) pour \(S=30\) et \(A=9\). On se restreint à \(v_0\in[0,S]\).
Dans cette question \(v_0\in\left]0,A\right[\). Montrer que pour tout entier \(n\in\mathbb{N}\), \(v_n\in\left]0,A\right[\), puis que \((v_n)\) est décroissante. En déduire que \((v_n)\) converge et déterminer sa limite.
Réaliser une étude analogue lorsque \(v_0\in\left]A,S\right[\). Que se passe-t-il si \(v_0=A\) ?
Donner une interprétation (en terme de dynamique des populations) des quantités \(A\) et \(S\).
La version continue du modèle précédent est l’équation différentielle : \[y'(t)=F(y(t))\] avec \[F(y)=\frac{y}{2}\left(\frac{S-y}{S}\right)\left(\frac{y-A}{S}\right) \text{ et une condition initiale } y(0)\geqslant0\]
On appelle point d’équilibre de l’équation différentielle toute valeur \(x_0\) telle que si \(y(t)=x_0\) alors \(y'(t)=0\). Déterminer ces points d’équilibre.
On dit qu’un point d’équilibre \(x_0\) est instable si \(F'(x_0)>0\) et stable si \(F'(x_0)<0\). Déterminer les points stables et instables parmi les points d’équilibre.
Si \(y(0)\) est assez proche de \(x_0\), \(y\) se comporte localement comme la solution de l’équation différentielle linéaire \[y'(t)=F'(x_0)(y(t)-x_0)\] Résoudre l’équation différentielle.
Justifier les dénominations d’équilibre stable et instable. Faire le lien avec les interprétations faites dans la question Q 3.
Un modèle de croissance probabiliste pour une espèce est le modèle de Galton-Watson. On considère une population dont on va décrire l’évolution génération par génération. On appelle \(Z_n\) la variable aléatoire qui compte le nombre d’individus à la génération \(n\) et on considère que :
Les générations ne se superposent pas,
Chaque individu a un nombre aléatoire de descendants : le nombre de descendants d’un individu est une variable aléatoire. Les variables aléatoires pour chacun sont indépendantes et de même loi.
On s’intéresse aux conditions sous lesquelles on a extinction ou survie de l’espèce. On dit que la lignée est éteinte à la génération \(n\) si \(Z_n=0\) et on souhaite étudier la suite de terme général \(\mathbb{P}(Z_n=0)\).
Formellement, le modèle est donné par : \[Z_0=1 \text{ et } \forall n\in\mathbb{N},\ Z_{n+1}=\sum_{i=1}^{Z_n}X_{n,i}\] où les variables aléatoires \((X_{n,i})_{(n,i)\in\mathbb{N}\times\mathbb{N}^\ast}\) sont à valeurs dans \(\mathbb{N}\) et sont indépendantes et de même loi. \(X_{n,i}\) est le nombre de descendants de l’individu numéro \(i\) de la génération \(n\). On notera \(Y\) une autre variable aléatoire qui suit la même loi que les variables \(X_{n,i}\).
Par exemple, si \(Z_n=12\) alors \(Z_{n+1}=X_{n,1}+\cdots+X_{n,12}\). \(Z_{n+1}\) est la somme du nombre de descendants de chacun des \(12\) individus de la génération \(n\).
On remarquera que comme \(Z_0=1\), \(Z_1=X_{0,1}\) qui est le nombre de descendants de l’unique individu de la génération \(0\). Ainsi \(Z_1\) et \(Y\) suivent la même loi.
Que se passe-t-il si toutes les variables \(X_{n,i}\) sont constantes égales à \(q\in\mathbb{N}\) ?
Dans cette question, on suppose que le nombre de descendants de chaque individu suit une loi de Bernoulli de paramètre \(p\in\left]0,1\right[\).
Montrer que pour tout \(n\in\mathbb{N}^\ast\), \(Z_n=0\) ou \(Z_n=1\) et que : \[\mathbb{P}(Z_n=1)=p^n\] En déduire la valeur de \(\displaystyle\lim_{n\to+\infty}\mathbb{P}(Z_n=0)\).
On définit la suite \((u_n)\) par \(u_n=\mathbb{P}(Z_n=0)\). Justifier que \((u_n)\) est croissante puis qu’elle converge.
Dans la suite du sujet, on appelle la limite de \((u_n)\) la probabilité d’extinction de la lignée.
Étude complète dans un cas simple. Dans cette question uniquement, la loi de reproduction est la suivante : chaque individu a une probabilité \(p\in\left]0,1\right]\) de donner deux descendants, par exemple en se divisant, et \(1-p\) de disparaître sans descendant.
Donner l’ensemble des valeurs prises par \(Z_1\) ainsi que sa loi de probabilité. Calculer l’espérance \(\mathbb{E}(Z_1)\) et la variance \(\mathbb{V}(Z_1)\).
Montrer que pour tout \(n\in\mathbb{N}\), \[\mathbb{P}(Z_{n+1}=0)=(1-p)\mathbb{P}_{[Z_1=0]}(Z_{n+1}=0)+p\mathbb{P}_{[Z_1=2]}(Z_{n+1}=0)\]
Justifier, avec une phrase, que \(\mathbb{P}_{[Z_1=2]}(Z_{n+1}=0)=u_n^2\) puis montrer que pour tout \(n\in\mathbb{N}\), \[u_{n+1}=(1-p)+pu_n^2\]
En déduire que les deux limites possibles de \((u_n)\) sont \(1\) et \(\frac{1-p}{p}\).
Montrer que si \(p\leqslant\frac{1}{2}\), la probabilité d’extinction vaut \(1\).
Si \(p>\frac{1}{2}\), montrer que pour tout \(n\in\mathbb{N}\), \[u_n\leqslant\frac{1-p}{p}<1\] En déduire la valeur de la probabilité d’extinction.
Tracer la probabilité d’extinction en fonction de \(\mathbb{E}(Z_1)\). Commenter le tracé obtenu.
Dans cette question uniquement, on suppose que la loi de reproduction est donnée par : \[\forall k\in\mathbb{N},\ \mathbb{P}(Y=k)=p^k(1-p)\] pour une certaine valeur \(p\in\left]0,1\right[\) fixée.
On admet que pour tout \(k\in\mathbb{N}\), \(\mathbb{P}_{[Z_1=k]}(Z_{n+1}=0)=u_n^k\). En utilisant un système complet d’événements associé à \(Z_1\), montrer que : \[\forall n\in\mathbb{N},\ u_{n+1}=\frac{1-p}{1-pu_n}\]
On admet que \((u_n)\) converge vers la plus petite des solutions de l’équation dont l’inconnue est \(\ell\) : \[\ell=\frac{1-p}{1-p\ell}\] Déterminer la probabilité d’extinction en fonction de \(p\).
Reconnaître la loi de \(Y+1\). En déduire que les propositions suivantes sont équivalentes :
1. la probabilité d’extinction vaut \(1\).
2. \(\mathbb{E}(Y)\leqslant1\).
Commenter.
Dans cette partie, on s’intéresse à l’implémentation informatique du processus de Galton-Watson. Notre objectif est de faire des conjectures sur le comportement de la population dans le cas où la loi de reproduction est plus complexe : on considèrera dans cette partie que les variables aléatoires suivent la loi de Poisson de paramètre \(\lambda>0\).
On rappelle que la commande rd.poisson(x) simule une
variable aléatoire qui suit une loi de Poisson de paramètre
x.
La fonction suivante simule l’évolution d’une population et stocke le nombre d’individus à chaque génération dans une liste.
def galton_watson(lambda_,n):
population = np.zeros(n+1)
population[0] = 1
Z = 1
for i in range(1,n+1):
descendants = 0
for j in range(Z):
descendants += rd.poisson(lambda_)
population[i] = descendants
Z = descendants
if descendants == 0:
return population
return population
À quoi correspondent les deux arguments de la fonction
galton_watson ?
À quoi servent les lignes suivantes ?
if descendants == 0:
return population
population = np.zeros(n+1)
descendants = 0
for j in range(Z):
descendants += rd.poisson(lambda_)Pourquoi peut-on remplacer les lignes \(6\) à \(8\) par :
descendants = rd.poisson(Z*lambda_)
On souhaite réaliser :
des simulations pour différentes valeurs de \(\lambda\),
pour chacun des choix, plusieurs simulations.
Compléter le programme suivant pour qu’il réalise \(10\) simulations pour \(\lambda=0{,}7\) et \(20\) générations et les trace sur un même graphique.
lambda_ = 0.7
for k in ## LIGNE A COMPLETER ##
plt.plot(## LIGNE A COMPLETER ## )
plt.show()Les simulations donnent les résultats suivants pour \(\lambda\) variant entre \(0{,}7\) et \(1{,}7\) avec un pas de \(0{,}2\). Quelles conjectures peut-on faire quant à la probabilité d’extinction de l’espèce ?
Les valeurs de la population sont déterminées pour des nombres entiers de générations. Des lignes ont cependant été tracées entre les valeurs de la population pour les générations successives, afin de faciliter la visualisation de l’évolution d’une population au cours des générations.
Dans cette question, on s’intéresse à la probabilité d’extinction.
Comment modifier la fonction galton_watson pour
qu’elle renvoie 1 si la lignée est éteinte et
0 si la lignée n’est pas éteinte ?
Pour la suite on appelle la fonction ainsi modifiée :
galton_watson_2.
Écrire une fonction extinction, qui prend entrée un
paramètre lambda_ et qui, à partir de \(5000\) simulations de Galton-Watson,
renvoie une approximation de la probabilité d’extinction. (On s’arrêtera
à \(60\) générations).
La simulation pour différentes valeurs de \(\lambda\) donne le graphique suivant. (On a pris \(\lambda\) entre \(0{,}8\) et \(1{,}2\) avec un pas de \(0{,}05\).)
On note \(p_\lambda\) la probabilité d’extinction.
Quelles conjectures peut-on faire sur \(p_\lambda\) ?
Après \(n\) simulations, on note \(S_n\) le nombre d’entre elles qui ont mené à une extinction. Après avoir justifié que \(S_n\) suit une loi binomiale \(\mathscr{B}(n,p_\lambda)\), montrer à l’aide de l’inégalité de Bienaymé-Tchebychev que, pour tout \(\varepsilon>0\), \[\mathbb{P}\!\left(\left|\frac{S_n}{n}-p_\lambda\right|\geqslant\varepsilon\right)\leqslant\frac{p_\lambda(1-p_\lambda)}{n\varepsilon^2}\] Montrer ensuite que : \[\mathbb{P}\!\left(\left|\frac{S_n}{n}-p_\lambda\right|\geqslant\varepsilon\right)\leqslant\frac{1}{4n\varepsilon^2}\]
Soit \(n\in\mathbb{N}^\ast\). Trouver \(\varepsilon>0\) (dépendant de \(n\)) tel que \[\mathbb{P}\!\left(\frac{S_n}{n}-\varepsilon\leqslant p_\lambda\leqslant\frac{S_n}{n}+\varepsilon\right)\geqslant0{,}95\]
Pour \(n=5000\), déterminer graphiquement l’encadrement de \(p_\lambda\) obtenu lorsque \(\lambda=1{,}05\) ; \(\lambda=1{,}1\) ; \(\lambda=1{,}15\).
Dans le module matplotlib.pyplot importé sous
l’alias plt :
plt.plot(X,Y) prend en entrée deux vecteurs ou deux
listes de même taille, et réalise le tracé des points d’abscisses prises
dans X et d’ordonnées prises dans Y. Si on donne un seul argument à
plt.plot, cela trace juste la suite des termes de X.
On utilise plt.show() pour afficher le tracé.
Dans le module numpy importé sous l’alias
np :
np.zeros(n) crée une matrice unidimensionnelle de \(n\) coefficients tous nuls.
Dans le module numpy.random importé sous l’alias
rd :
rd.poisson(x) simule une variable aléatoire suivant une
loi de Poisson de paramètre x.
FIN DU SUJET
Le corrigé pas à pas, les aides et les explications sont disponibles dans la plateforme.
Dynamique de populations : suites récurrentes et effet Allee, puis processus de Galton-Watson et simulation en Python.