Académique Documents
Professionnel Documents
Culture Documents
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;
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
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.
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.
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
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.
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
d'où: Q j+1−Q j
C i+1 , j=C i , j − .∂t
∂x
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)
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)
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
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)
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.