#!/usr/bin/env python # coding: utf-8 # In[49]: import IPython.core.display as di # This line will hide code by default when the notebook is exported as HTML di.display_html('', raw=True) # This line will add a button to toggle visibility of code blocks, for use with the HTML export version di.display_html('''''', raw=True) # In[5]: # -*- coding: utf-8 -*- get_ipython().run_line_magic('matplotlib', 'inline') import matplotlib.pyplot as plt import matplotlib.mlab as pylab import numpy as np import pandas as pd from sklearn import linear_model # # Génération des données # Pour cet exemple, on génère aléatoirement 20 états de circulation caractérisés par la densité et la vitesse moyenne. Les données sont présentées sous forme de tableau ci-dessous. # In[22]: kj = 150. vmax = 100. greenshieldV = lambda k: vmax*(1-k/kj) densities = np.random.random_sample(20)*kj speeds = [greenshieldV(k)*(1+0.15*np.random.randn()) for k in densities] volumes = [k*v for k,v in zip(densities, speeds)] print(pd.DataFrame({'densite (veh/km)': densities, 'vitesse {km/h}': speeds, 'debit (veh/h)': volumes})) # # Régression linéaire # On estime le modèle linéaire de Greenshields pour la relation de la vitesse moyenne en fonction de la densité par régression linéaire (estimateur des moindres carrés). # In[45]: regr = linear_model.LinearRegression() regr.fit(np.array(densities).reshape(-1,1), np.array(speeds)) a = regr.coef_[0] b = regr.intercept_ linearModel = lambda k: a*k+b print('Modèle: v = {} k + {}'.format(a, b)) print('Vitesse libre: {}'.format(b)) print('Densité de congestion: {}'.format(-b/a)) # # Relations bi-variées # Pour chacune des trois relations bivariées de la vitesse moyenne en fonction de la densité, le débit en fonction de la densité et la vitesse moyenne en fonction du débit, on représente les données et les prédictions du modèle de Greenshields. # In[48]: # v=f(k) plt.figure() plt.plot(densities, speeds, 'ok', markersize = 4) plt.plot([0, -b/a], [linearModel(0), linearModel(-b/a)], label = u'modèle de Greenshields') plt.xlabel(u'Densité (véh/km)') plt.ylabel('Vitesse moyenne (km/h)') #plt.xlim(0,-b/a+10) plt.ylim(0,vmax+10) plt.grid() plt.legend() # q=f(k) plt.figure() plt.plot(densities, volumes, 'ok', markersize = 4) plt.plot(np.arange(-b/a+1), [linearModel(k)*k for k in np.arange(-b/a+1)], label = u'modèle de Greenshields') plt.xlabel(u'Densité (véh/km)') plt.ylabel(u'Débit (véh/h)') #plt.xlim(0,-b/a+10) plt.ylim(ymin=0)#,max(volumes)+500) plt.grid() plt.legend() # q=f(k) plt.figure() plt.plot(volumes, speeds, 'ok', markersize = 4) plt.plot([linearModel(k)*k for k in np.arange(-b/a+1)], [linearModel(k) for k in np.arange(-b/a+1)], label = u'modèle de Greenshields') plt.ylabel(u'Vitesse moyenne (km/h)') plt.xlabel(u'Débit (véh/h)') plt.xlim(xmin=0) plt.ylim(ymin=0) plt.grid() plt.legend()