Programmation, Fortran, programmation modulaire, programmation générique, langage informatique, simulation de trafic routier, calcul scientifique, calcul numérique
Le projet propose de simuler numériquement l'évolution du trafic sur une route, et de mettre en évidence différents régimes de circulation, notamment la formation de bouchons.
Il y a plusieurs méthodes pour modéliser la circulation routière. La méthode proposée dans ce projet consiste à discrétiser la route en cases (comme pour le jeu des petits chevaux) et à placer sur ces cases un certain nombre de véhicules. [...]
[...] Nombre de véhicules Probabilité de freinage Comportement observé Test 1 (param1.dat) 5 0.5 Trafic fluide Test 2 (param2.dat) 13 0.5 Apparition de bouchons Test 3 (param3.dat) 25 0.5 Bouchons réguliers à partir de leur formation Test 4 (param4.dat) 25 0.05 Bouchons réguliers à partir de leur formation A partir d'une certaine densité de trafic on a apparition de bouchons qui persistent si on sature un peu plus le trafic, et ce même pour une faible probabilité de freinage. [...]
[...] Programmation - Projet de simulation de trafic routier en langage Fortran Instructions de compilations : g95 *.f90 g95 proj *.f90 Sources : Name : types.f90 Author : Version : 1.0 Copyright : Description : Module contenant les types dérivés MODULE types IMPLICIT NONE Définition du type dérivé "vehicule" TYPE vehicule INTEGER pos numéro de la case sur laquelle se trouve le véhicule INTEGER vit vitesse END TYPE vehicule Définition du type dérivé "route" TYPE route INTEGER n_max longueur de la route INTEGER v_max vitesse maximale autorisée sur la route INTEGER n_v nombre de véhicules en circulation sur la route TYPE(vehicule), DIMENSION(:), ALLOCATABLE tab_v tableau dynamique de véhicules END TYPE route END MODULE types Name : procedures.f90 Author : Version : 1.0 Copyright : Description : Module contenant les procédures (fonctions et sub-routines) MODULE procedures USE types IMPLICIT NONE CONTAINS FONCTIONS SUBROUTINES Sous-programme permettant d'afficher l'état d'une route SUBROUTINE affichage(r, l_clear) TYPE(route), INTENT(IN) r LOGICAL, INTENT(IN) l_clear CHARACTER(1), DIMENSION(r%n_max) tableau_vehicule tableau contenant des lettres pour chaque véhicule CHARACTER(LEN = r%n_max) aff_tableau tableau à afficher initialisation tableau de véhicule INTEGER pos_v DO i = r%n_max-1 tableau_vehicule(i) = ' ' END DO remplissage du tableau DO j = r%n_v pos_v = r%tab_v(j)%pos tableau_vehicule(pos_v) = ACHAR(j+64) END DO si l_clear vaut True on efface l'écran IF(l_clear) THEN CALL SYSTEM('clear') END IF affichage du tableau à l'écran aff_tableau = DO i = LEN(aff_tableau) aff_tableau(i:i) = tableau_vehicule(i-1) END DO PRINT aff_tableau ralentissement du programme CALL SYSTEM('sleep 0.1') END SUBROUTINE affichage Sous-programme permettant de mettre à jour les positions des véhicules par la règle de la phase 4 (progression) SUBROUTINE progression(r) TYPE(route), INTENT(INOUT) r INTEGER i INTEGER pos, new_pos actuelle et nouvelle position mise à jour des positions des véhicules DO i = r%n_v pos = r%tab_v(i)%pos new_pos = MODULO(pos + r%tab_v(i)%vit, r%n_max) r%tab_v(i)%pos = new_pos END DO END SUBROUTINE progression Sous-programme permettant de mettre à jour les vitesses des véhicules par la règle de la phase 1 (accélération) SUBROUTINE acceleration(r) TYPE(route), INTENT(INOUT) r INTEGER i INTEGER vit, new_vit actuelle et nouvelle vitesse mise à jour des positions des véhicules DO i = r%n_v vit = r%tab_v(i)%vit IF(vit 0 .AND. [...]
[...] random_num ⤠THEN new_vit = vit - 1 ELSE sinon on conserve la même vitesse new_vit = vit END IF r%tab_v(i)%vit = new_vit END DO END SUBROUTINE freinage END MODULE procedures Name : proj.f90 Author : Version : 1.0 Copyright : Description : Simulation de trafic routier PROGRAM proj USE procedures permet d'utiliser le module "procedures" USE types permet d'utiliser le module "types" IMPLICIT NONE Déclaration des variables du programme principal REAL f = 0.3 probabilité de freinage aléatoire INTEGER it_max = 30 nombre de pas de temps INTEGER ok1 = 1 variable pour l'allocation de tableaux dynamiques INTEGER i indice de boucle DO TYPE (route) r création d'une route initialisation des paramètres de la route r r%n_max = 60 r%n_v = 1 r%v_max = 3 ALLOCATE(r%tab_v(1:r%n_v), STAT = ok1); IF (ok1 0 ) STOP allocation du tableau de véhicules initialisation de la position des véhicules DO i = r%n_v r%tab_v(i)%pos = INT(i*r%n_max/r%n_v) - 1 r%tab_v(i)%vit = r%v_max END DO affichage initial de la route CALL affichage(r,.TRUE.) DO i = it_max CALL acceleration(r) CALL freinage(r,f) CALL progression(r) CALL affichage(r,.TRUE.) END DO déallocation du tableau de véhicules IF(ALLOCATED(r%tab_v)) THEN DEALLOCATE(r%tab_v) END IF END PROGRAM proj Formation d'un bouchon : Différents scénarios ont été joués et résumés ci-dessous. [...]
[...] Chacun des scénarios à été joué sur une route de 100 cases, avec une vitesse maximale des véhicules de 5 et 100 itérations ont été jouées. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture