{"id":14977217,"url":"https://github.com/pastekaztekastor/crowd-simulation","last_synced_at":"2026-03-03T21:32:01.670Z","repository":{"id":173651338,"uuid":"648096429","full_name":"pastekaztekastor/Crowd-Simulation","owner":"pastekaztekastor","description":"Le projet consiste en une simulation de foule sur une grille, avec des versions parallélisées sur carte graphique. L'objectif est de modéliser le mouvement des individus dans un environnement en utilisant des paramètres tels que la dimension de la grille, le nombre d'individus et exporte de résultat de chaque frame dans unfichier bin pour analyse.","archived":false,"fork":false,"pushed_at":"2023-09-01T12:23:33.000Z","size":21838,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-12T17:09:15.109Z","etag":null,"topics":["c","cmake","cpp","crowdsimulation","cuda-programming","graphicscard","grid-layout","ipynb","make","nvidia-gpu","parallelization"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pastekaztekastor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-01T07:45:34.000Z","updated_at":"2023-07-18T09:29:45.000Z","dependencies_parsed_at":"2024-09-11T12:32:38.050Z","dependency_job_id":"92b3e3c1-dd6b-4fcf-960f-8010dd2cc105","html_url":"https://github.com/pastekaztekastor/Crowd-Simulation","commit_stats":null,"previous_names":["pastekaztekastor/stagexlim","pastekaztekastor/crowd-simulation"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastekaztekastor%2FCrowd-Simulation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastekaztekastor%2FCrowd-Simulation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastekaztekastor%2FCrowd-Simulation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastekaztekastor%2FCrowd-Simulation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pastekaztekastor","download_url":"https://codeload.github.com/pastekaztekastor/Crowd-Simulation/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241459825,"owners_count":19966511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cmake","cpp","crowdsimulation","cuda-programming","graphicscard","grid-layout","ipynb","make","nvidia-gpu","parallelization"],"created_at":"2024-09-24T13:55:18.274Z","updated_at":"2026-03-03T21:32:01.635Z","avatar_url":"https://github.com/pastekaztekastor.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cvideo src=\"video/anim_M1-X40-Y20-P200.mp4\" controls title=\"Démo\"\u003e\u003c/video\u003e\n\n# Simulation de foule avec CUDA\n\nCe *README* servira davantage de feuille de route/journal de bord qu'un README classique. Les quelques documents pouvant être utiles seront tout de même répertoriés ici.\n\n## Table des matières\n\n- [Simulation de foule avec CUDA](#simulation-de-foule-avec-cuda)\n  - [Table des matières](#table-des-matières)\n  - [Fichier Utiles](#fichier-utiles)\n  - [Introduction du sujet](#introduction-du-sujet)\n  - [Structure du programme](#structure-du-programme)\n    - [Rendu](#rendu)\n  - [Installation](#installation)\n    - [Installation de CUDA](#installation-de-cuda)\n    - [Installation de HDF5](#installation-de-hdf5)\n    - [OpenCV](#opencv)\n  - [Utilisation](#utilisation)\n  - [Liste des tâches à effectuer](#liste-des-tâches-à-effectuer)\n    - [Organisation](#organisation)\n    - [Prolèmes rencontré](#prolèmes-rencontré)\n\n## Fichier Utiles\n\n- [Pointage](markdown/pointage.md)\n- [Journal de bord](markdown/journal_de_bord.md)\n\n## Introduction du sujet\n\nLors de la réunion de début de stage (01-06-2023), le projet de stage et de simulation a été présenté de la manière suivante :\n\nL'objectif est de simuler une foule en 2D en utilisant des modèles physiques existants. Cependant, il est nécessaire de paralléliser autant que possible la simulation en utilisant CUDA dans un premier temps.\n\n- Étude de modèles de foule -\u003e Théorie mathématique\n  - Congestion du trafic routier\n  - Simulations principalement réalisées avec ***MatLab***, ce qui limite l'optimisation des calculs et n'autorise aucune parallélisation.\n  - La taille de la population influence la qualité des résultats. Plus elle est importante, plus les résultats sont intéressants.\n- Simulation uniquement en 2D\n- Plusieurs façons de procéder avec de nombreux modèles mathématiques\n\n\u003e Il existe des simulations basées sur des particules pour cela, mais nous n'utiliserons pas ces modèles.\n\n- Nous optons pour un fonctionnement basé sur une grille (avec des \"roomels\" - éléments de la pièce - d'une dimension de 1, mais cela n'a pas d'importance).\n  - Chaque roomel ne peut contenir qu'une seule personne et elles ne peuvent pas se comprimer.\n  - Dans un premier temps, nous avons une distribution aléatoire d'individus dans la pièce.\n  - Les individus ont pour objectif de sortir de la pièce et **ils se déplacent tous à la même vitesse**.\n\nLors du déplacement, il peut y avoir des situations problématiques, si une personne est déjà présente sur la case, ou si on rencontre un mure. Il faut donc prévoire ces cas.\n\n- Ne rien faire.\n- Prendre une case voisine au hasard.\n- Prendre la case voisine la plus proche.\n\n\u003e Même si, dans la vraie vie, nous avons tendance à privilégier les personnes les plus proches de la sortie.\n\nPour le mélange, nous pouvons mélanger un tableau d'indices pointant vers les individus.\n\n## Structure du programme\n\nLe programme se divise en trois étapes principales : l'initialisation, la simulation et le retour. Au sein de la simulation, plusieurs sous-étapes sont réalisées à chaque frame, telles que le mélange des individus et l'application du modèle. Le programme comporte également des paramètres de simulation, des constantes de simulation et des variables de support. Le choix du modèle dépend de plusieurs paramètres, tels que le domaine (continu ou discret), l'utilisation d'un arbre de coûts et le comportement vis-à-vis des obstacles. Différents modèles sont disponibles, tels que l'actuel, le \"sage ignorant\", le RNG, l'impatient ignorant, le meilleur coût, le meilleur coût avec déplacement forcé et le conne de vision. Le coût peut être calculé en effectuant une inondation à partir de la sortie, et un balayage en deux passes permet d'obtenir un coût optimal. Les individus choisiront donc une case voisine ayant un coût inférieur ou égal.\n\n---\n\n```mermaid\n---\ntitle : Structure du programme\n---\nflowchart TB;\n  subgraph principal \n    direction LR\n    a[Initialisation] --\u003e b[Simulation] --\u003e c[Retour]\n    b --\u003esB\n    c --\u003esC\n    a --\u003esA\n  end\n  subgraph sA [Paramètres]\n    sa1[Variables de Simulation]\n    sa3[Constante de Simulation]\n    sa2[Variables de support]\n    sa4[Choix du model]\n\n  end\n  subgraph sB [Pour chaque frame]\n    direction TB\n    sb1[Shuffle des individue] --\u003esb2\n    sb2[Applicaiton du model] --\u003e |Pour chaque individu| sb2\n\n  end\n  subgraph sC [Retour]\n    sc1[Temps de caclul]\n    sc2[Congestion]\n    sc3[Annimation]\n  end \n```\n\n---\n\n```mermaid\n---\ntitle : Models\n---\nflowchart TB;\n  a([Domaine]) \n  b1([Coûts])\n  b2([Coûts])\n  c12([Comportement])\n  c22([Comportement])\n  c21([Comportement])\n\n  m11[Actuel]\n  m12[\"Sage\n  Ignorant\"]\n  m21[Rng]\n  m22[\"Imptiant\n  Ignorant\"]\n  m3[Meilleur coût]\n  m4[\"Meilleur coût\n     \u0026 Déplacement\"]\n  m5[Forcée]\n  m6[Conne de vision]\n\n  a  --\u003e|Continue| b1\n  a  --\u003e|Discret| b2\n  b1 --\u003e|Sans| c12\n  b2 --\u003e|Sans| c22\n  b2 --\u003e|Avec| c21\n\n  c12 --\u003e|Attendre| m11  \n  c22 --\u003e|Attendre| m12  \n\n  c12 --\u003e|Random| m21  \n  c22 --\u003e|Random| m22  \n  \n  c21 --\u003e|Meilleur coût| m3  \n  \n  c21 --\u003e|Meilleur coût + Déplacement| m4  \n  \n  c22 --\u003e|Forcée| m5  \n  \n  c22 --\u003e|Conne de vision| m6  \n\n```\n\n---\n\n![Exemple de chemin avec coût](markdown/content/Exemple%20Cout/exempleCout.drawio.png)\n\n### Rendu\n\nLe rendu final n'est pas une priorité. Nous pourrions générer des fichiers binaires qui seront lus par un programme **Processing** pour produire des images ou des vidéos. Le programme doit être modifiable à l'aide de fichiers de configuration au format JSON. Nous devons également pouvoir récupérer des données de sortie (tableau de fichiers binaires).\n\n## Installation\n\n### Installation de CUDA\n\nPour linux :\n\n```bash\napt install nvidia-cuda-toolkit\n```\n\nPuis avec CMake nous allons généré le projet.\n\n```bash\ncmake CMakeLists.txt\nmake\n```\n\nDans un premier temps, j'ai commencé par créer un programme qui implémente ce que nous avons décrit, mais uniquement en utilisant le CPU. La documentation détaillée de ce programme est disponible dans le fichier [onlyCPU.md](markdown/onlyCPU.md).\n\nCepandant dans un premier temps vous pouvez essayer le programme `onlyCPU` sur votre propre machine. Elle doit néanmoins être équipé d'un terminal et de bach.\n\n### Installation de HDF5\n\nLa bibliothèque HDF5 (Hierarchical Data Format 5) est utilisée pour stocker et organiser de grandes quantités de données de manière efficace et structurée. Elle offre des fonctionnalités avancées telles que la compression des données, l'indexation, la gestion des métadonnées et la possibilité de travailler avec des ensembles de données hiérarchiques. HDF5 est largement utilisée dans le domaine de la science, de la recherche et de l'analyse de données pour gérer et échanger des données complexes, volumineuses et multidimensionnelles, offrant une solution flexible et performante pour le stockage et la manipulation de données. Elle est utilisé dans ce projet pour exporter chaque frames de la simulation en perdant le moins de temps possible.\n\nPour installer HDF5 sur Ubuntu, vous pouvez suivre les étapes suivantes :\n\n1. Mettez à jour les référentiels de packages en exécutant la commande suivante :\n  \n   ```bash\n   sudo apt update\n   ```\n\n2. Installez le package HDF5 en utilisant la commande suivante :\n\n   ```bash\n   sudo apt install libhdf5-dev\n   ```\n\n3. Une fois l'installation terminée, vous pouvez vérifier la version installée en exécutant la commande suivante :\n\n  ```bash\n  h5cc -showconfig\n  ```\n\n   Cette commande affichera les informations sur la bibliothèque HDF5 installée, y compris sa version. La version minimale requise est la 1.10.x.\n\n### OpenCV\n\nPour installer OpenCV sur Ubuntu, vous pouvez suivre les étapes suivantes :\n\n1. Mettre à jour les paquets existants :\n\n   ```bash\n   sudo apt update\n   ```\n\n2. Installer les dépendances nécessaires à OpenCV :\n\n   ```bash\n   sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev\n   ```\n\n3. Installer les bibliothèques et les outils de développement spécifiques à l'image et à la vidéo :\n\n   ```bash\n   sudo apt install libjpeg-dev libpng-dev libtiff-dev libv4l-dev libxvidcore-dev libx264-dev libatlas-base-dev\n   ```\n\n4. Accéder au répertoire OpenCV du projet:\n\n5. Créer un répertoire de construction :\n\n   ```bash\n   mkdir build\n   cd build\n   ```\n\n6. Générer les fichiers de configuration CMake :\n\n   ```bash\n   cmake ..\n   ```\n\n7. Compiler les sources :\n\n   ```bash\n   make -j$(nproc)\n   ```\n\n8. Installer OpenCV sur votre système :\n\n   ```bash\n   sudo make install\n   ```\n\nUne fois ces étapes terminées, OpenCV sera installé sur votre système Ubuntu. Vous pouvez maintenant utiliser la bibliothèque OpenCV dans vos projets C++ en incluant les en-têtes nécessaires et en liant les bibliothèques lors de la compilation.\n\nAttention il faut le codec gif :\n\n1. Ouvrez un terminal.\n\n2. Mettez à jour les packages disponibles en exécutant la commande suivante :\n\n   ```bash\n   sudo apt update\n   ```\n\n3. Installez le paquet `ffmpeg` qui contient le codec nécessaire pour le format GIF :\n\n   ```bash\n   sudo apt install ffmpeg\n   ```\n\nUne fois l'installation terminée, le codec GIF devrait être installé sur votre système Ubuntu, et OpenCV devrait être capable d'encoder les fichiers GIF correctement.\n\n## Utilisation\n\n\u003e À faire\n\n## Liste des tâches à effectuer\n\n### Organisation\n\n- [x] Réalisation du fichier README.md\n- [x] Explication du projet\n- [x] Refaire le fichier  [`gitignore`](.gitignore) de manière approp\n- [x] Créer un fichier Makefile.\n- [x] finir les export au propre (image)\n- [x] liste d'attente de chaque individu\n- [x] gestion des murs\n- [x] carte des couts\n- [x] mettre en place un nouveau model (model avec calcul de distance des case voisines les plus proche)\n- [x] parsseur d'images pour la création d'une map\n- [x] version \"mac\" CPU\n\n### Prolèmes rencontré\n\n- [x] Le Pin qui n'est pas bon dans le model 2 -\u003e po de gestion de la fin // annimation\n  C'était un problème lors de la création de la vidéo. j'enregistrais 2 frame a chaque fois.\n- [x] Trop gourmand en ressource quand on fait des grosse vidéo\n- [x] La sortie n'apparait pas toujours -\u003e ordre de plot dans la fonction qui créer les frames.\n- [x] J'affiche des var de debg a la fin du programme  -\u003e supprimé.\n- [x] Maybee faire l'inondation sur GPU ? C'est long avec des grosse matrice.\n\n# Version MAC\nLa doc de la verion la plus aboutie qui peut tourner sous mac est ici [src/gpuObjectVersion/README.md](src/gpuObjectVersion/README.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpastekaztekastor%2Fcrowd-simulation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpastekaztekastor%2Fcrowd-simulation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpastekaztekastor%2Fcrowd-simulation/lists"}