#!/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()