PSI Informatique
PSI Informatique
PSI Informatique
INFORMATIQUE
Vendredi 5 mai : 8 h - 11 h
____________________
___________________________________________________________________________________
REMARQUES PRELIMINAIRES
L’épreuve doit être traitée en langage Python. Les syntaxes sont rappelées en annexe 2.
Les différents algorithmes doivent être rendus dans leur forme définitive sur la copie à rendre (les
brouillons ne seront pas acceptés).
Il est demandé au candidat de bien vouloir rédiger ses réponses en précisant bien le numéro de la
question traitée et, si possible, dans l’ordre des questions. La réponse ne doit pas se cantonner à la
rédaction de l’algorithme sans explication ; les programmes doivent être expliqués et commentés.
1/15
Étude de la capacité et de la congestion de l’autoroute A7
2/15
II.1 Exploitation des données de mesure
II.1.1 Sélection des mesures
L’ensemble des données produites par le réseau est archivé dans une base de données. Les va-
riables d’intérêt moyennées par tranche de temps de 6 min pour chaque point de mesure sont le
débit q exp, représentatif du nombre de véhicules par unité de temps et la vitesse moyenne v exp des
véhicules en ce point. On peut également accéder à la concentration, c exp, par calcul étant donné que
c exp = q exp/v exp.
Une version simplifiée de cette base de données est réduite à deux tables.
La table STATIONS répertorie les stations de mesures ; elle
contient les attributs : STATIONS COMPTAGES
3/15
8000
II.1.2 Diagramme fondamental
On veut tracer le diagramme fondamental du tronçon
6000
Débit (véhicule / h)
d’autoroute étudié (figure 2). Suite au traitement de la
base de données, on dispose à présent du tableau à une
4000
dimension (aussi appelé vecteur) des débits q exp (en
véhicules par heure) et du vecteur des vitesses v exp
2000
(en kilomètres par heure). Ces deux vecteurs possèdent
nbmesures composantes avec nbmesures le nombre de points
0
de mesure à tracer. Pour chaque composante i, la relation 0 50 100 150 200
4/15
III Élaboration d’une première simulation du trafic routier par
la mécanique des fluides
Il est rappelé ici que dans toute la suite de l’étude, l’autoroute est assimilée à une seule voie. Le modèle
continu revient à négliger le caractère discret de la matière. Pour le modèle routier, cela revient donc
à regarder l’évolution du trafic sur des distances grandes devant la taille des véhicules, notée L0. On
appelle c(t,x), en véhicules par mètre, la concentration de véhicules par unité de longueur de route à
1
l’instant t et à la position x. Sur une longeur L0, il y a, au plus, un seul véhicule, soit c ≤ c max = .
L0
On appelle q(t,x), en véhicules par seconde, le débit de véhicules, c’est-à-dire le nombre de véhicules
par unité de temps traversant la section de la route située à la position x. La vitesse v(t,x), en mètres
par seconde, ne représente pas la vitesse de chacun des véhicules mais la vitesse moyenne du trafic à
la position x. On considère que les véhicules se déplacent selon l’axe x dans le sens des x croissants.
On rappelle la relation q(t,x) = c(t,x) × v(t,x). Désormais, q, v et c représentent les grandeurs si-
mulées et non plus des données expérimentales. On travaille dans la suite avec les unités du système
international.
En considérant une portion d’autoroute dx pendant une durée dt et en supposant qu’il n’y a ni perte,
ni création de véhicule, il est possible de montrer que q(t,x) et c(t,x) verifient l’équation aux dérivées
partielles suivante :
∂q(t,x) ∂c(t,x)
+ = 0. (1)
∂x ∂t
Pour comprendre comment évoluent la concentration, la vitesse moyenne ou le débit de véhicules
au cours du temps le long de l’autoroute, il convient donc de résoudre cette équation aux dérivées
partielles à partir de la situation initiale.
Discrétisation en espace (indice j)
Sens des positions croissantes
Discrétisation en temps (indice i)
III.1 Discrétisation
Sens des temps croissants
5/15
III.2 Un modèle de diagramme fondamental
L’équation (1) possède deux inconnues. Il faut donc ajouter une deuxième équation pour pouvoir la
résoudre. On propose tout d’abord de relier la vitesse et la concentration par le modèle de Greenshield
établi à partir des analyses suivantes :
– lorsque la concentration en véhicules tend vers 0, les conducteurs peuvent rouler à la vitesse
maximale autorisée, v max en mètres par seconde ;
– lorsque les véhicules sont pare-choc contre pare-choc, la concentration est égale à c max en
véhicules par mètre : ils n’avancent plus.
Une relation linéaire entre vitesse et concentration est choisie dans le modèle de Greenshield, qui est
ainsi défini par la relation suivante :
On souhaite concevoir une fonction diagramme permettant de réaliser le tracé du diagramme fonda-
mental pour un instant donné ti (soit pour une ligne de C). Cette fonction fait appel à une fonction
debit permettant de calculer les valeurs de débit à un instant ti en utilisant la relation de Greenshield
(2). Ces valeurs sont stockées dans un vecteur Q. Le tracé du diagramme fondamental est réalisé et le
tableau Q est retourné.
Q7. Écrire une fonction debit(v max , c max , C ligne) qui prend en arguments la vitesse maximale
(v max), la concentration maximale (c max) et un tableau contenant les concentrations à un
instant donné (soit les éléments d’une ligne du tableau C) nommé ici C ligne et qui renvoie un
tableau de valeurs contenant les débits (en véhicules par seconde) aux différentes positions à
ce même instant.
Q8. Spécifier les arguments d’entrée (et leur type) de la fonction diagramme. L’écriture du code
de la fonction n’est pas demandée. Préciser les unités des différents termes. Tracer l’allure du
diagramme fondamental obtenu. L’allure du diagramme dépend-elle du temps ti auquel on se
place (soit du choix de la ligne de C)?
6/15
III.3.2 Résolution
Le tableau C contient des zéros, exceptée la première ligne qui a été remplie de valeurs grâce à la mise
en œuvre de la fonction C depart. On souhaite à présent écrire la fonction
resolution(C , dt , dx , c max , v max) permettant de résoudre l’équation et de remplir complètement
le tableau C.
Connaissant pour tout indice j les valeurs de Ci, j , on cherche à déterminer Ci+1, j .
Dans le schéma d’Euler avant , la dérivée d’une fonction f par rapport à la variable x, au point x j ,
df f j+1 − f j
(x j ), est approximée (en utilisant ce point et le point situé devant lui) par .
dx dx
Q est un vecteur contenant les valeurs de débits Q j aux différentes positions x j et à l’instant ti (l’ap-
proximation du débit au temps ti et à la position x j sera donc notée Q j .). À chaque instant ti , Q devra
être recalculé.
Q10. À partir de l’équation (1) et en utilisant des schémas d’Euler avant pour l’écriture des
dérivées, montrer que la relation de récurrence donnant Ci+1, j en fonction de Ci, j , Q j+1 , Q j , dx
et dt est donnée par l’une des propositions ci-dessous. Le numéro de la réponse correcte sera
clairement indiqué sur la copie.
Q j − Q j+1
1. Ci+1, j = Ci, j − .dt
dx
Q j+1 − Q j
2. Ci+1, j = Ci, j − .dt
dx
Q j+1 − Q j
3. Ci+1, j = Ci, j − .dx
dt
Q j − Q j−1
4. Ci+1, j = Ci, j − .dt
dx
Pour que le nombre de voitures soit constant sur la longueur de la route, il faut se fixer des conditions
aux limites périodiques. Ainsi, quand un véhicule arrive en bout d’autoroute, il est replacé au début
de celle-ci. On considère donc que le véhicule situé en x = La, se déplaçant vers la droite, a pour
voisin de droite le véhicule situé en x = 0.
Q11. L’initialisation a été effectuée avec la fonction C depart(dx , d1 , d2 , c1 , c2 , C). Écrire une
fonction resolution(C , dt , dx , c max , v max) qui prend en arguments le tableau C, les pas
dt et dx, la concentration maximale c max et la valeur de la vitesse maximale v max et qui
renvoie le tableau C rempli au cours de la résolution. On pourra faire appel à la fonction
debit(v max , c max , C ligne) définie à la question Q7.
7/15
On applique la fonction resolution à ces deux situations de départ et on représente la concentration
en fonction de la position à différents instants (figure 5). La situation initiale est en traits interrompus
(- -), les situations intermédiaires en traits continus (-) et la situation finale en pointillés (:).
Figure 5 – Résultats pour le cas 1 et pour le cas 2 avec Euler avant pour l’espace et avant pour
le temps
On remarque qu’avec la situation de départ du cas 1, la solution diverge. Avec la situation de départ
du cas 2, le créneau initial semble se déplacer vers la gauche.
Une modification est alors apportée à la fonction resolution. Dans la discrétisation en espace (c’est-à-
dire lors de l’écriture des dérivées par rapport à la variable d’espace), le schéma d’Euler avant en
espace est remplacé par un schéma d’Euler arrière en espace. Dans ce schéma, la dérivée d’une
df
fonction f par rapport à la variable x au point x j , (x j ) est approximée (en utilisant ce point et le
dx
f j − f j−1
point situé derrière lui) par . On obtient alors les résultats présentés figure 6.
dx
Figure 6 – Résultats pour le cas 1 et pour le cas 2 avec Euler arrière pour l’espace et avant
pour le temps
Cette fois-ci, avec la situation de départ du cas 1, le créneau initial se déplace vers la droite et avec la
situation de départ du cas 2, la solution diverge.
Q12. On se place à l’itération i + 1 ; les calculs des itérations précédentes ont déjà été réalisés.
Le calcul des termes de Q (vecteur des débits à l’instant ti ) est fait par la fonction debit, Q j
étant déterminé à partir de la valeur de Ci, j . Sur la grille de discrétisation donnée figure 3 (qui
sera reproduite sur la copie), tracer des flèches partant des points déjà calculés aux itérations
précédentes et allant vers le point à calculer Ci+1, j (au pas d’espace j et à l’itération i + 1) dans
le cas du schéma d’Euler avant pour la discrétisation en espace. Procéder de même dans le
cas du schéma d’Euler arrière pour la discrétisation en espace.
8/15
Q13. En déduire un argument permettant de choisir le schéma d’Euler adapté à la situation de départ.
On cherche maintenant un schéma fonctionnel pour les deux situations. On propose celui de Lax-
Friedriechs qui :
– utilise un schéma centré pour l’approximation des dérivées par rapport à la variable d’espace.
df
Dans ce schéma, la dérivée d’une fonction f par rapport à la variable x au point x j , (x j ) est
dx
f j+1 − f j−1
approximée (à partir du point précédent et du point suivant) par ;
2dx
– approxime les dérivées par rapport à la variable de temps en remplaçant la valeur Ci, j par la
moyenne de la valeur prise au point précédent Ci, j−1 et de la valeur prise au point suivant Ci, j+1 .
Q14. Proposer les modifications de la fonction resolution (définie à la question Q11) nécessaires
pour utiliser le schéma de Lax-Friedriechs.
La mise en œuvre de la
fonction resolution permet,
ensuite, d’effectuer le tracé
des solutions obtenues dont
le résultat est donné figure
7. Les instructions permet-
tant de réaliser le tracé ne
sont pas demandées. Figure 7 – Les deux situations de départ résolues avec le schéma de
Lax-Friedriechs
9/15
IV Deuxième simulation du trafic routier :
simulation de Nagel et Schreckenberg (NaSch)
L’objectif est de simuler la formation d’embouteillages dits embouteillages fantômes . Ils sont le
résultat d’une perturbation qui apparaı̂t localement sur la voie et s’amplifie peu à peu jusqu’à former
un embouteillage.
IV.1 Initialisation
Afin de modéliser le comportement de chacun des véhicules, l’espace, le temps ainsi que la vitesse
des véhicules sont discrétisés. La dynamique de chaque élément est modélisée de façon très simple,
l’objectif étant d’obtenir un bon comportement à l’échelle macroscopique. On étudie, comme dans les
parties précédentes, une autoroute de longueur La = 8 500 (en mètres) pour laquelle on ne considère
qu’un seul sens et qu’une seule voie. La vitesse est limitée à 130 km/h et on considère une durée
totale d’étude T emps.
Soit Xn la position du véhicule n, vn ∈ [[0,1,...,v max]] sa vitesse entière et dn la distance inter-
véhiculaire (par rapport au véhicule précédent). On choisit de découper la route en nb cellules cellules
de tailles identiques valant pas x = 7,5 (en mètres). La durée d’étude est découpée en nb temps pas
de temps valant pas t = 1,2 (en secondes) qui peut s’interpréter comme le temps de réaction du
conducteur. Une probabilité donnée par le flottant p est utilisée dans l’algorithme.
Q16. Justifier le choix de la valeur du pas d’espace. En déduire ce que vaut la vitesse v max imposée
de 130 km/h en cellules par pas de temps. On arrondira au nombre entier supérieur.
Comme précédemment, la portion d’autoroute considérée est sans entrée ni sortie. Les conditions li-
mites seront périodiques, c’est-à-dire qu’un véhicule sortant de l’autoroute se retrouve instantanément
à l’entrée de celle-ci (avec la même vitesse).
On considère que les données du problème pas x, pas t, T emps, La, v max, p sont, à présent, ren-
seignées dans le programme. On cherche, pour une densité donnée, à déterminer les vitesses à chaque
position au cours du temps, ainsi que l’occupation ou non de chacune des cellules. On met en place
une structure de stockage constituée :
– d’un tableau Route de dimension nb temps × nb cellules qui contient des nombres binaires. Si,
au pas de temps 10, la cellule 23 est occupée par un véhicule, alors Route[10,23] = 1, sinon
Route[10,23] = 0 ;
– d’un tableau Vitesses de dimension nb temps × nb cellules qui contient des entiers. Si, au pas
de temps 10, la cellule 23 est occupée par un véhicule et que sa vitesse est de 3 cellules par pas
de temps, alors Vitesses[10,23] = 3. Si la cellule n’est pas occupée, alors Vitesses[10,23] = 0 ;
– d’un tableau Vitesses suivantes de dimension 1 × nb cellules qui contient des entiers. Il per-
mettra de stocker les vitesses au temps i + 1 avant de déplacer les véhicules.
On peut désormais définir la situation initiale. On considère une route où les écarts entre tous les
véhicules sont identiques. On crée ainsi une route avec une répartition homogène des véhicules. La
route a été initialisée en plaçant des 1 dans les cellules possédant un véhicule dans la première ligne
de Route pour une concentration fixée c0 en véhicules par kilomètre. Toutes les autres cellules de
Route sont initialisées avec la valeur 0. Les cellules de Vitesses sont également initialisées avec des
zéros. Cette étape d’initialisation est considérée comme déjà réalisée dans la suite.
10/15
IV.2 Mise en œuvre de l’algorithme
Le modèle NaSch, dont le pseudo-code est donné en annexe 1, est le pionnier des modèles cellulaires
permettant de simuler un trafic routier. L’algorithme est constitué de quatre étapes qui sont toutes
réalisées l’une après l’autre à chaque pas de temps.
Les étapes 1, 2 et 3 correspondent au calcul des futures vitesses. L’étape 4 permet d’inscrire chaque
vitesse au lieu où se trouve le véhicule au pas suivant. Le comportement correspondant est illustré
figure 8. Dans cet algorithme, on effectue la mise à jour des positions de tous les véhicules de façon
simultanée.
Au niveau des étapes 2 et 4, des comparaisons et calculs sont effectués entre dn et vn ou entre Xn et vn .
En effet, les vitesses sont exprimées en cellules par pas de temps. Sur un pas de temps, vn correspond
donc à une distance parcourue en nombre de cellules.
On cherche à écrire la fonction ma j qui permet d’appliquer les étapes 1, 2 et 3 de l’algorithme de
NaSch pour toutes les valeurs de Vitesses[i, :]. On utilisera la fonction distance(Route , i , j) qui
prend en arguments le tableau Route, l’indice de temps i et l’indice de position j du véhicule n et qui
renvoie la distance dn entre les véhicules n + 1 et n, à l’instant i. Seules les cellules comprenant un
véhicule doivent être traitées ; les autres auront une vitesse nulle.
Sens de parcours
Configuration à l’instant t
v=2 v=1 v=1 v=0
Etape 1 : Accélération
v=3 v=2 v=2 v=1
Etape 2 : Décélération
v=1 v=2 v=0 v=1 Mise à jour
des vitesses
Q17. En utilisant l’annexe 1, écrire une fonction ma j(Route , Vitesses , p , vmax , i) qui prend en
arguments les tableaux Route et Vitesses, le paramètre aléatoire p, la vitesse maximale
v max (en cellules par pas de temps) et l’indice de temps i et qui renvoie le tableau
Vitesses suivantes.
11/15
Q18. Écrire une fonction deplacement(Vitesses , Route , Vitesses suivantes , i) qui permet de
déterminer les valeurs de Vitesses[i + 1, :] et de Route[i + 1, :]. La fonction deplacement
renvoie les tableaux Route et Vitesses mis à jour avec la ligne i + 1 complétée. Les vitesses
calculées doivent être placées dans les cellules où se trouvent les voitures correspondantes une
fois déplacées. Penser à intégrer la prise en compte des conditions aux limites.
Figure 9 – Affichage de Route (indice i de temps en ordonnée, indice j des positions en abscisse)
12/15
Un zoom est réalisé figure 10 sur les premières valeurs en temps et en espace pour mieux visualiser
la formation d’embouteillages.
Figure 10 – Zoom sur l’affichage de Route (indice i des temps en ordonnée, indice j des positions en
abscisse)
Q19. Expliquer en quelques phrases en quoi les figures présentées montrent que la formation d’un
embouteillage a été simulée. Sur quels paramètres peut-on agir pour que le résultat de la simu-
lation se rapproche des résultats expérimentaux?
13/15
Annexes
– Étape 1 - Accélération
Le véhicule n accélère d’une unité s’il n’a pas encore atteint la vitesse maximum.
Xn (t + 1) → Xn (t) + vn (t + 1)
14/15
Annexe 2 - Rappels des syntaxes en Python
Remarque : sous Python, l’import du module numpy permet de réaliser des opérations pratiques sur
les tableaux : from numpy import *. Les indices de ces tableaux commencent à 0.
Python
L=[1,2,3] (liste)
tableau à une dimension
v=array([1,2,3]) (vecteur)
accéder à un élément v[0] renvoie 1
ajouter un élément L.append(5) uniquement sur les listes
tableau à deux dimensions (matrice) M=array(([1,2,3],[3,4,5]))
accéder à un élément M[1,2] ou M[1][2] donne 5
extraire une portion de tableau
M[:,0:2]
(2 premières colonnes)
tableau de 0 ( 2 lignes, 3 colonnes) zeros((2,3))
dimension d’un tableau T de taille (i, j) T.shape donne [i,j]
séquence équirépartie quelconque de 0 à 10.1
arange(0,10.1,0.1)
(exclus) par pas de 0.1
mot="Python"
définir une chaı̂ne de caractères
if (i>3):
print (i)
condition If else:
print("hello")
def fonction(param):
définir une fonction qui possède un argument et res1=param
renvoie 2 résultats res2=param*param
return res1,res2
FIN
15/15
I M P R I M E R I E N A T I O N A L E – 17 1190 – D’après documents fournis