Vous êtes sur la page 1sur 7

Correction

II- Traitement des données expérimentales

II.1 Exploitation des données de mesure

II.1.1 Sélection des mesures

 Q1. l'étude se focalise uniquement sur les mesures de l'une des stations, la M8B. Ecrire une requête
SQL qui renvoie les données de comptages (id_compatages, date, voie, q_exp, v_exp) mesurée à la
station de comptage de nom M8B.
SELECT id_comptage, date, voie, q_exp,v_exp
FROM STATIONS S , COMPTAGES C
WHERE S.id_station = C.id_station AND nom='M8B;

ou
SELECT id_comptage, date, voie, q_exp,v_exp
FROM COMPTAGES
WHERE id_station=(SELECT id_station FROM STATIONS WHERE nom='M8B');

Q2. Ecrire une requête SQL qui renvoie, pour chaque date des données de COMPTAGES_M8B, le débit
correspondant à la somme des débits de chaque voie.
SELECT date, SUM(q_exp)
FROM COMPTAGES_M8B
GROUP BY date;

INFORMATIQUE 1/7 CCP2017-PSI


II.1.2 Diagramme fondamental

 Q3. Ecrire une fonction trace(q_exp, v_exp) qui prend en arguments q_exp et v_exp et qui
permet d'afficher le nuage de points du diagramme fondamental. On ne considère que les
bibliothèques qui sont importées et on pourra utiliser la fonction "plot" donnée en annexe 2.
import numpy as np
import matplotlib.pyplot as plt
def trace(q_exp,v_exp):
c_exp = q_exp/v_exp #calcul de la concentration
plt.plot(q_exp,c_exp) #tracé des points
plt.xlabel("Concentration (véhicule/Km)") #titre de l'axe des x
plt.ylabel("Débit (véhicule/h)") #titre de l'axe des y
plt.show() #afficher le graphique

II.2 Estimation de l'état de congestion

 Q4. La fonction congestion(v_exp), qui prend en argument v_exp et renvoie la valeur


médiane du tableau de valeurs v_exp est définie cidessous. La recherche de la médiane est basée sur
un algorithme de tri. Choisir une des 4 propositions données pour compléter les deux lignes
manquantes (indiquées par "ligne à compléter"). Donner le nom, puis la complexité de l'algorithme de
tri employé, dans le meilleur et le pire des cas. Analyser la pertinence de ce choix.
def congestion(v_exp):
nbmesures=len(v_exp)
for i in range(nbmesures):
v=v_exp[i]
j=i
while j>0 and v <v_exp[j-1]:
v_exp[j]= v_exp[j-1] #ligne complétée
j=j-1 #ligne complétée
v_exp[j]=v
return(v_exp[nbmesures//2])

- Le nom de ce tri est le tri par insertion.


- La complexité de ce tri dans le pire des cas est quadratique: O(N²)
- La complexité de ce tri dans le meilleur des cas est linéaire: O(N)
- d'autre tri sont plus efficaces de complexité O(Nlog(N)) tel que le tri par fusion.

 Q5. A partir de la base de données de la station M8B, on obtient le vecteur v_exp. On exécute la
fonction congestion(v_exp, la valeur retournée par la fonction étant 30, quelle conclusion peut-
on tirer dece résultat?
La conclusion qu'on peut tirer de ce résultat est que la station M8B est en situation congestionnée.

INFORMATIQUE 2/7 CCP2017-PSI


III- Elaboration d’une première simulation du trafic routier par la mécanique des fluides

III.1 Discrétisation

 Q6. Soit C le tableau de valeurs contenant les concentrations en tous les points x et à tous les instants
t discrétisés, comme représenté sur la Figure 3. L'approximation numérique de la concentration au
temps t i et à la position x j sera notée C i , j avec i désignant l'indice de temps et j désignant
l'indice de l'espace. Quelles sont les dimensions de C ?
 Notons Nx le nombre de discrétisations en espace.
dx=La/Nx donc Nx=La/dx
 Notons Nt le nombre de discrétisations en temps.
dt=T/Nt donc Nt=T/dt
 Donc les dimensions du tableau C sont Nt lignes et Nx colonnes.

III.2 Un modèle de diagramme fondamental

 Q7. Ecrire 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.
def debit(v_max,c_max,C_ligne):
#calcul de V aux différentes positions au même instant
V=v_max*(1-C_ligne/c_max)
Q= C_ligne*V # calcul du débit
return(Q)

 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épendelle du temps t i auquel on se place (soit du choix
de la ligne de C)?
 Les arguments d'entrée de la fonction diagramme sont: v_max, c_max et C_ligne
 Les unités des différents termes:
v_max: mètre par seconde
c_max: véhicule par mètre.
Les composantes de C_ligne sont les concentrations pour l'instant t i en véhicule par mètre.
 L'allure du diagramme: (courbe de Gauss)
 L'allure du diagramme ne dépend pas du temps t i

INFORMATIQUE 3/7 CCP2017-PSI


#Fonction non demandée
import matplotlib.pyplot as plt
import numpy as np

def diagramme(v_max,c_max,C_ligne):
Q=debit(v_max,c_max,C_ligne)
plt.plot(C_ligne , Q)
plt.grid()
plt.show()
#tracé
v_max=120/3600
c_max=1/3
C_ligne=np.arange(0,c_max+0.01,0.01)
diagramme(v_max,c_max,C_ligne)

 Q9. Concevoir une fonction C_depart qui permet d'initialiser la première ligne du tableau C
(correspondant à t=0). L'écriture du code correspondant n'est pas demandé; en revanche, on précisera
toutes les valeurs de j pour lesquelles C 0 , j sera égale à c1 et toutes les valeurs pour lesquelles
C 0 , j sera égale à c2 . L'entête ou spécification de la fonction devra être précisé(e) (et comporter les
arguments d'entrée et leur type), ainsi que le résultat renvoyé par la fonction.

 l'entête de la fonction est def C_depart(dx, d1, d2, c1, c2, C), dont les arguments:

dx: un réel, d1: un entier, d2: un entier, c1: un réel, c2: un réel et C: tableau de réels à deux dimensions.
 La fonction modifie le tableau C, et retourne None de type Nonetype.

si j ∗ dx <= d1 Alors C 0 , j=c 1


sinon si j ∗ dx <= d2 Alors C 0 , j=c 2
sinon C 0 , j=c 1

III.3.2 Résolution

Q10. A 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 C i+1 , j en fonction de C i , j , Q j+1, Q j, dx et dt est donnée
par l'une des propositions cidessous. Le numéro de la réponse correcte sera clairement indiqué sur la
copie.
Le numéro de la réponse est 2.

∂q ∂c
Nous avons : (t , x ) − ( t , x ) =0 (1)
∂x ∂t
et :
∂q q ( t , x+ dx ) −q( t , x)
(t , x ) =
∂x ∂x

∂c c ( t +dt , x )−c ( t , x )
( t , x )=
∂t ∂t

donc: Q j+ 1−Q j C i+1 , j−C i , j


+ =0
∂x ∂t

d'où: Q j+1−Q j
C i+1 , j=C i , j − .∂t
∂x

INFORMATIQUE 4/7 CCP2017-PSI


Q11. L'initialisation a été effectuée avec la fonction C_depart(dx,d1,d2,c1,c2,C). Ecrire une
fonction resolution(C,dt,dx,c_max,v_max) qui prend en argument 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_ma,c_max,C_ligne) définie à la question Q7.
#L'initialisation a été effectuée avec la fonction C_depart(dx,d1,d2,c1,c2,C)
def resolution(C,dt,dx,c_max,v_max):
for i in range(1, len(C)):
Q=debit(v_max,c_max,C[i-1])
for j in range(len(C[0])):
C[i,j]=C[i-1,j]-(dt/dx)*(Q[(j+1)%len(Q)]-Q[j])
return(C)

III.4 Etude des solutions trouvées et modification du schéma


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 t i ) est fait par la fonction debit, Q j étant déterminé à partir
de la valeur de C i , 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 à
calculerC i+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.

arrière :
avant :

Q13. En déduire un argument permettant de choisir le schéma d'Euler adapté à la situation de départ.

L'argument manquant est la concentration médiane, ainsi si les concentrations de la situation de départ
sont inférieures à la médiane on opte pour un schéma d'Euler "arrière" en espace sinon, dans le cas
contraire opter pour un schéma d'Euler "avant".

 Q14. Proposer les modifications de la fonction resolution (définie à la question Q11) nécessaires pour
utiliser le schéma de LaxFriedriechs.

def resolution(C,dt,dx,c_max,v_max):
for i in range(1, len(C)):
Q=debit(v_max,c_max,C[i-1])
C[i][0]=C[0][0]
for j in range(1,len(C[0])):
C[i,j]=(C[i-1,j+1]+C[i-1,j-1])/2-(dt/dx)*(Q[(j+1)%len(Q)]-Q[j-1])
return(C)

INFORMATIQUE 5/7 CCP2017-PSI


III.5 Amélioration du programme: retour sur le choix du diagramme fondamental
 Q15. Expliquer en quelques phrases ce qu'il faut modifier dans la fonction définie à la question Q11
pour résoudre l'équation (1) en prenant en compte ce nouveau diagramme fondamental basé sur
l'expérimentation.

Il est nécessaire de modifier les paramètres de la fonction resolution; v_max et c_max ne seront
plus utiles avec la prise en compte des données expérimentales, ainsi on enlève v_max et c_max et on
met à la place q_exp et c_exp, on appellera à regression(q_exp,c_exp) pour avoir les 4
constantes, puis les utiliser pour trouver le vecteur Q à l'instant t i en fonction de C i en appliquant la
regression d'ordre 3.

def resolution(C,dt,dx,c_exp,q_exp):
a0,a1,a2,a3=regression(q_exp,c_exp)
for i in range(1, len(C)):
Q=a3*C[i-1]**3+a2*C[i-1]**2+a1*C[i-1]+a0
for j in range(len(C[0])):
C[i,j]=C[i-1,j]-(dt/dx)*(Q[(j+1)%len(Q)]- Q[j])
return(C)

IV. Deuxième simulation du trafic routier : Simulation de Nagel et Schreckenberg(NaSch)


IV.1 Initialisation

 Q16. Justifier le choix de la valeur du pas d'espace. En déduire ce que vaut la vitesse v_max imposée de
130km/h en cellules par pas de temps. On arrondira au nombre entier supérieur.
La valeur du pas d'espace peut être justifiée par le fait qu'une cellule contiendra une voiture de longueur
moyenne 5m (ref mesure parking) et la distance intervéhiculaire estimée à 2,5m.
La vitesse v_max 130 km/h en cellule par pas de temps est:
v_max=(130000 / 7.5)=17333 cellule/h
v_max=(v_max * 1.2)/3600=6 cellules/pas_t

IV.2 Mise en œuvre de l'algorithme


 Q 17 En utilisant l'annexe 1, écrire une fonction maj(Route, Vitesse, p, v_max, 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.

import random as rd
def maj(Route,Vitesses,p,v_max,i):
#initialisation de vitesses_suivante avec les vitesses de l'instant i
Vitesses_suivante=[Vitesses[i][j] for j in range(len(Vitesses[i]))]
#etape 1
for j in range(len(Vitesses[i])):
if Vitesses_suivante[j]<v_max : Vitesses_suivante[j]+=1

#etape 2
for j in range(len(Vitesses[i])):
if Vitesses_suivante[j]>distance(Route,i,j):
Vitesses_suivante[j]-=1
#etape 3
for j in range(len(Vitesses[i])):
if Vitesses_suivante[j]!=0 and if rd.rand()<p:
Vitesses_suivante[j]-=1
return(Vitesses_suivante)

INFORMATIQUE 6/7 CCP2017-PSI


IV.3 Simulation et analyse des résultats
 Q18. Ecrire 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.

def deplacement(Vitesses,Route,Vitesses_suivantes,i):
for j in range(len(Route[i])):
indice=(Route[i][j]+Vitesses_suivantes[j])%len(Route[i])
Route[i+1][indice]=1
Vitesses[i+1][indice]=Vitesses_suivantes[j]
return(Vitesses,Route)

 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 peuton agir pour que le résultat de la simulation se
rapproche des résultats expérimentaux?

Les figures présentées sont le résultat d'une simulation car plusieurs zones d'embouteillages existent,
normalement dans le cas d'un embouteillage en un point x i la circulation est ralentie et se propage aux
points inférieurs à x j au fil du temps. Là, plusieurs zones d'embouteillages existent et ceci est dû au
comportement aléatoire du conducteur qui peut s'arrêter et bloquer la circulation. Le paramètre sur lequel
on peut agir pour avoir des résultats proches des résultats expérimentaux est le comportement aléatoire
du conducteur, c.-à-d. la probabilité p.

INFORMATIQUE 7/7 CCP2017-PSI

Vous aimerez peut-être aussi