Contents
   
                                                                                         
                                                                                         
   1    Introduction
   2    Description des outils
   2.1    Les graphes et Metanet
   2.2    Structure des graphes
   2.3    Création d'un graphe avec Metanet
      
      - Ouvrir, sous Scilab, l'application Metanet par la commande
                                                                                         
                                                                                         
      
      metanet();
 
       
- Ouvrir un nouveau graphe (files/new), le nommer avec une extension .graph et le choisir
      orienté ;
      
- Créer deux nœuds en utilisant le bouton droit de la souris, et un arc orienté en
      cliquant, avec le bouton droit de la souris sur le premier nœud puis le second.
      Modifier les caractéristiques par la rubrique Modify et les afficher par la rubrique
      Graph.
   2.4    Création d'un graphe directement sous scilab
      
      - On utilise la fonction make_graph dont les arguments sont décrits dans l'aide
                                                                                         
                                                                                         
      
      g=make_graph('essai',1,2,[1],[2])
 
       
- On crée ensuite le fichier essai.graph avec la fonction save_graph
                                                                                         
                                                                                         
      
      save_graph(g,'essai')
 
       
- On visualise maintenant le graphe
                                                                                         
                                                                                         
      
      metanet('essai')
 
       
- Sans créer de fichier, on peut directement visualiser le graphe
                                                                                         
                                                                                         
      
      show_graph(g)
 
   3    Modélisation d'une ville sous forme de graphe
   3.1    Création du graphe
      
      - Créer par Metanet le graphe correspondant au réseau de la ville. 
 
 Un tel fichier peut aussi être obtenu par les commandes suivantes sous Scilab
      :
                                                                                         
                                                                                         
 
      g5=[1,5,1,4,5,2,5,4,4,2,5,3,3,1,3,2];
       
 g6=[5,1,4,1,2,5,4,5,2,4,3,5,1,3,2,3];
 g=make_graph('ville',1,5,g5,g6);
 g(9)=[130,630,360,360,370];
 g(10)=[250,250,55,460,245];
 g(24)=[15000,15000,4000,0,15000,15000,6000,
 6000,4000,0,6000,6000,4000,0,0,4000];
 save_graph(g,'ville')
 
   3.2    Génération du trafic
      
      - Créer le vecteur E donnant les émissions pour toutes les zones.
                                                                                         
                                                                                         
      
      p=[30000,35000,15000,10000,5000];
       
 a=[10000,12000,6000,6000,2000];
 alpha1=[0.4,0.4,0.4,0.4,0.5];
 alpha2=[1,1,1,1,1];
 E=alpha1.*p+alpha2.*a;
 
       
- Créer le vecteur A donnant les attractions pour toutes les zones.
                                                                                         
                                                                                         
      
      e=[4000,4000,2000,2000,24000];
       
 beta=[2.1,2.1,2.1,2.1,2.1];
 A=beta.*e;
 
   3.3    Distribution du trafic
      
      - Créer la matrice 5 ∗ 5, donnant les Tij
                                                                                         
                                                                                         
      
      d=[0,15,10,7,8;15,0,8,6,7;10,8,0,9,5;7,6,9,0,4;8,7,5,4,0];
       
 k=0.00004;
 z=E'*A;
 gam=0.25;
 T=k*z.*exp(-d*gam)
 
   3.4    Affectation du trafic
      
      - Charger le graphe ville.graph sous Scilab.
                                                                                         
                                                                                         
      
      g=load_graph('ville');
 
       
- Affecter le trafic T12 et déterminer les flux générés sur les arcs. En déduire les
      capacitées maximales restantes à réintroduire dans le graphe. Initialiser les arguments de
      la fonction min_lcost_cflow() :
                                                                                         
                                                                                         
      
      c=0;
       
 v=0;
 flag=0;
 f=zeros(1,16);
 Garder les valeurs des capacités maximales initiales sous capa0 :
                                                                                         
                                                                                         
 
      capa0=zeros(1,16);
       
 capa0=g(24);
 Utiliser la fonction, les flux sont donnés par f :
                                                                                         
                                                                                         
 
      [c,f,v,flag]=min_lcost_cflow(1,2,T(1,2),g);
 Réintégrer les capacités maximales :
                                                                                         
                                                                                         
 
      g(24)=capa0-f;
 Visualiser les résultats :
                                                                                         
                                                                                         
 
      show_graph(g);
 
       
- En déduire, par une itération permettant d'affecter tous les Tij, les flux totaux sur les
      tronçons. Les visualiser sous Metanet. Les flux finaux sont visualisés par exemple sur le
      vecteur 22 du graphe correspondant au coût de l'arc.
                                                                                         
                                                                                         
      
      g=load_graph('ville');
       
 c=0;
 v=0;
 flag=0;
 f=zeros(1,16);
 capa0=zeros(1,16);
 capa0=g(24);
 capa=zeros(1,16);
 capa=capa0;
 for i=1:5,
 for j=1:5,
 [c,f,v,flag]=min_lcost_cflow(i,j,T(i,j),g);
 capa=capa-f;
 g(24)=capa;
 end;
 end;
 g(22)=capa0-g(24);
 g(24)=capa0;
 show_graph(g);
 
      
      - Programmer la fonction Em(V ), donnant les émissions moyennes par véhicule et
      kilomètre pour les vitesses V . 
      Cette fonction est à enregistrer dans un fichier, nommé pour l'exemple fonction_emission.
      On remarque que V peut être un vecteur.
                                                                                         
                                                                                         
 
      function [X]=Em(V)
       
 pc=[0.35,0.35,0.2,0.1];
 coef_a=[0.6089,0.4767,0.9037,0.9037;-0.0118,-0.0107,-0.0168,-0.0168;
 0.0001,0.0001,0.0001, 0.0001];
 X=0;
 z=size(V);
 X=sum((pc'*ones(1,z(1)))'.*([ones(z(1),1),V,V^2]*coef_a),'c');
 X
 Charger la fonction sous scilab
                                                                                         
                                                                                         
 
      getf fonction_emission;
 
       
- Tracer Em(V ) pour V de 0 km∕h à 130 km∕h.
                                                                                         
                                                                                         
      
      V=[0:130];
       
 Em=Em(V');
 plot2d(V,Em')
 
   3.5    Émissions sur chaque tronçon
      
      - Calculer les vitesses sur les tronçons.
                                                                                         
                                                                                         
      
      f=g(22);
       
 c=g(24);
 c(4)=1;c(10)=1;c(14)=1;c(15)=1;
 V0=[130,130,50,0,130,130,80,80,50,0,80,80,50,0,0,50];
 V1=[0.8,0.8,0.5,0,0.8,0.8,0.6,0.6,0.5,0,0.6,0.6,0.5,0,0,0.5];
 V=V0.*((1.1*ones(1,16)-f./c)./(1.1*ones(1,16)-V1.*(f./c)))
 
       
- Les longueurs des tronçons sont donnés dans l'énoncé. Calculer les émissions
      de chaque arc, pour les flux calculés précédemment et les visualiser sur le
      graphe. On décide que le poids de l'arc sous metanet représente les émissions.
                                                                                         
                                                                                         
      
      d=[8,8,7,7,7,7,4,4,6,6,5,5,10,10,8,8]
       
 Em=Em(V');
 Em(4)=0;Em(10)=0;Em(14)=0;Em(15)=0;
 g(27)=d.*Em'.*f;
 show_graph(g);
 
       
- Modifier l'épaisseur des arcs proportionnellement aux émissions.
                                                                                         
                                                                                         
      
      g(18)=0.001*g(27);
       
 show_graph(g);
 
   4    Résumé du code informatique
   4.1    Les fonctions
                                                                                         
                                                                                         
   
function [X]=Em(V)
 
pc=[0.35,0.35,0.2,0.1];
 
coef_a=[0.6089,0.4767,0.9037,0.9037;-0.0118,-0.0107,-0.0168,-0.0168;
 
0.0001,0.0001,0.0001, 0.0001];
 
X=0;
 
z=size(V);
 
X=sum((pc'*ones(1,z(1)))'.*([ones(z(1),1),V,V^2]*coef_a),'c');
 
X
   4.2    Les commandes
                                                                                         
                                                                                         
   
g5=[1,5,1,4,5,2,5,4,4,2,5,3,3,1,3,2];
 
g6=[5,1,4,1,2,5,4,5,2,4,3,5,1,3,2,3];
 
g=make_graph('ville',1,5,g5,g6);
 
g(9)=[130,630,360,360,370];
 
g(10)=[250,250,55,460,245];
 
g(24)=[15000,15000,4000,0,15000,15000,6000,6000,4000,0,
 
6000,6000,4000,0,0,4000];
 
save_graph(g,'ville')
 
p=[30000,35000,15000,10000,5000];
 
a=[10000,12000,6000,6000,2000];
 
alpha1=[0.4,0.4,0.4,0.4,0.5];
 
alpha2=[1,1,1,1,1];
 
E=alpha1.*p+alpha2.*a;
 
e=[4000,4000,2000,2000,24000];
 
beta=[2.1,2.1,2.1,2.1,2.1];
 
A=beta.*e;
 
d=[0,15,10,7,8;15,0,8,6,7;10,8,0,9,5;7,6,9,0,4;8,7,5,4,0];
 
k=0.00004;
 
z=E'*A;
 
gam=0.25;
 
T=k*z.*exp(-d*gam)
 
g=load_graph('ville');
 
c=0;
 
v=0;
 
flag=0;
 
f=zeros(1,16);
 
capa0=zeros(1,16);
 
capa0=g(24);
 
 
capa=zeros(1,16);
 
capa=capa0;
 
 
for i=1:5,
 
for j=1:5,
 
[c,f,v,flag]=min_lcost_cflow(i,j,T(i,j),g);
 
capa=capa-f;
 
g(24)=capa;
 
end;
 
end;
                                                                                         
                                                                                         
 
 
g(22)=capa0-g(24);
 
g(24)=capa0;
 
show_graph(g);
 
Em=Em(V');
 
plot2d(V,Em')
 
f=g(22);
 
c=g(24);
 
c(4)=1;c(10)=1;c(14)=1;c(15)=1;
 
V0=[130,130,50,0,130,130,80,80,50,0,80,80,50,0,0,50];
 
V1=[0.8,0.8,0.5,0,0.8,0.8,0.6,0.6,0.5,0,0.6,0.6,0.5,0,0,0.5];
 
V=V0.*((1.1*ones(1,16)-f./c)./(1.1*ones(1,16)-V1.*(f./c)))
 
d=[8,8,7,7,7,7,4,4,6,6,5,5,10,10,8,8]
 
Em=Em(V');
 
Em(4)=0;Em(10)=0;Em(14)=0;Em(15)=0;
 
g(27)=d.*Em'.*f;
 
show_graph(g);
 
g(18)=0.001*g(27);
 
show_graph(g);