Skip to content

SALLAH-JP/CollectGraph

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

đŸ—ș CollectGraph

Optimisation de tournées de collecte de déchets par théorie des graphes

Application web interactive permettant de modéliser un réseau de collecte sous forme de graphe, de calculer les trajets optimaux entre points (Dijkstra) et d'assigner des équipes par zones via coloration de graphe.

License: MIT Python Flask PostgreSQL JavaScript

🧼 Algorithmes · 🚀 Installation · 🔌 API REST


📋 Sommaire


🎯 À propos

CollectGraph est un projet académique de théorie des graphes appliquée à un problÚme concret : l'optimisation des tournées de collecte de déchets en milieu urbain. L'application combine la modélisation visuelle d'un réseau de routes (graphe pondéré) avec deux algorithmes classiques :

  • đŸ›Łïž Dijkstra pour trouver le chemin le plus court entre deux points
  • 🎹 Coloration gloutonne pour rĂ©partir les zones de collecte entre Ă©quipes ou jours de la semaine

L'interface est entiÚrement interactive : on dessine le graphe à la souris sur un Canvas HTML5, on visualise les résultats en temps réel, et les données sont persistées dans une base PostgreSQL.


✹ FonctionnalitĂ©s

  • đŸ—ș Visualisation interactive du graphe sur Canvas HTML5
  • ✏ Édition dynamique : ajout/suppression de nƓuds et arĂȘtes Ă  la souris
  • ⚖ ArĂȘtes pondĂ©rĂ©es (distance/temps)
  • đŸ›Łïž Algorithme de Dijkstra : chemin optimal entre deux nƓuds
  • 🎹 Coloration de graphe : assignation automatique d'Ă©quipes/jours
  • đŸ’Ÿ Persistance PostgreSQL : les modifications sont sauvegardĂ©es
  • 🔄 API REST complĂšte : intĂ©gration possible avec d'autres systĂšmes

🚀 Installation

Prérequis

  • Python 3.8 ou supĂ©rieur
  • PostgreSQL 12 ou supĂ©rieur
  • pip

1. Cloner le repo

git clone https://github.com/SALLAH-JP/TG.git
cd TG

2. Environnement virtuel Python

python -m venv venv
# Windows
venv\Scripts\activate
# Linux / macOS
source venv/bin/activate

3. Dépendances Python

pip install flask flask-cors psycopg2-binary

4. Configurer PostgreSQL

Créer la base et importer le schéma :

# Créer la base
createdb TG

# Importer le schéma (à la racine du repo)
psql -d TG -f TG.sql

Schéma simplifié :

CREATE TABLE nodes (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) UNIQUE NOT NULL,
    x FLOAT NOT NULL,
    y FLOAT NOT NULL
);

CREATE TABLE edges (
    id SERIAL PRIMARY KEY,
    from_node VARCHAR(50) NOT NULL,
    to_node VARCHAR(50) NOT NULL,
    weight INT NOT NULL,
    undirected BOOLEAN DEFAULT FALSE,
    FOREIGN KEY (from_node) REFERENCES nodes(name) ON DELETE CASCADE,
    FOREIGN KEY (to_node) REFERENCES nodes(name) ON DELETE CASCADE
);

5. Configurer la connexion

Modifier les identifiants PostgreSQL dans server.py :

def get_connection():
    return psycopg2.connect(
        dbname="TG",
        user="postgres",
        password="VOTRE_MOT_DE_PASSE",
        host="localhost",
        port=5432
    )

6. Lancer l'application

python server.py

L'application est accessible sur http://localhost:5000


🎼 Guide d'utilisation

Interface principale

  • Canvas central : visualisation du graphe (nƓuds + arĂȘtes pondĂ©rĂ©es)
  • Barre d'outils : sĂ©lection de l'action en cours, choix source/destination
  • Panneau latĂ©ral : lĂ©gende des Ă©quipes et rĂ©sultats des calculs

Actions disponibles

➕ Ajouter un nƓud

  1. SĂ©lectionner « Ajouter un nƓud » dans le menu
  2. Cliquer OK
  3. Cliquer sur le canvas pour le placer
  4. Entrer un nom (auto-incrémenté si vide) puis Entrée

❌ Supprimer un nƓud

  1. SĂ©lectionner « Supprimer un nƓud » → OK
  2. Cliquer sur le nƓud à supprimer
  3. Les arĂȘtes liĂ©es sont supprimĂ©es en cascade

↔ Ajouter une arĂȘte

  1. SĂ©lectionner « Ajouter une arĂȘte » → OK
  2. Cliquer sur le nƓud source
  3. Cliquer sur le nƓud destination
  4. Entrer le poids (distance/temps) → EntrĂ©e

🚼 Supprimer une arĂȘte

  1. SĂ©lectionner « Supprimer une arĂȘte » → OK
  2. Cliquer sur l'arĂȘte

đŸ›Łïž Chercher le chemin optimal

  1. Choisir la source et la destination dans les menus déroulants
  2. Cliquer Rechercher (Dijkstra)
  3. Le chemin est surligné sur le canvas et la distance affichée

🎹 Assigner les Ă©quipes

  1. Cliquer Colorier (jours/équipes)
  2. Les nƓuds sont automatiquement colorĂ©s selon leur assignation
  3. La lĂ©gende affiche la correspondance couleur ↔ Ă©quipe

🔌 API REST

GET /graph

Retourne le graphe complet.

{
  "nodes": [
    {"name": "N1", "x": 100, "y": 150},
    {"name": "N2", "x": 300, "y": 250}
  ],
  "edges": [
    {"from": "N1", "to": "N2", "weight": 50, "undirected": false}
  ]
}

POST /graph/node

Ajoute un nƓud.

{ "name": "N3", "x": 400, "y": 300 }

DELETE /graph/node

Supprime un nƓud (et ses arĂȘtes en cascade).

{ "name": "N3" }

POST /graph/edge

Ajoute une arĂȘte pondĂ©rĂ©e.

{ "from": "N1", "to": "N2", "weight": 50 }

DELETE /graph/edge

Supprime une arĂȘte.

{ "from": "N1", "to": "N2" }

GET /algo/dijkstra?src=N1&dst=N2

Calcule le plus court chemin.

{
  "path": ["N1", "N3", "N2"],
  "distance": 150
}

GET /algo/coloring

Coloration du graphe (assignation d'équipes).

{
  "N1": 1,
  "N2": 2,
  "N3": 1
}

🧼 Algorithmes implĂ©mentĂ©s

đŸ›Łïž Dijkstra

Calcule le plus court chemin entre deux nƓuds dans un graphe pondĂ©rĂ© non-nĂ©gatif.

  • ComplexitĂ© : O((V + E) log V) avec file de prioritĂ©
  • ImplĂ©mentation : logic.py
  • Usage : optimisation des trajets de collecte entre deux points

🎹 Coloration de graphe (gloutonne)

Assigne des couleurs (= Ă©quipes ou jours) aux nƓuds de façon Ă  ce que deux nƓuds adjacents n'aient jamais la mĂȘme couleur.

  • StratĂ©gie : tri des nƓuds par degrĂ© dĂ©croissant puis affectation gloutonne
  • Objectif : minimiser le nombre d'Ă©quipes/jours nĂ©cessaires pour couvrir toute la ville
  • Application : planification hebdomadaire des tournĂ©es

đŸ› ïž Technologies utilisĂ©es

Backend

  • Flask — micro-framework web Python
  • Flask-CORS — gestion des requĂȘtes cross-origin
  • psycopg2 — driver PostgreSQL

Frontend

  • HTML5 / CSS3 — structure et styles
  • Canvas API — rendu 2D interactif du graphe
  • JavaScript vanilla — logique frontend, pas de framework
  • Fetch API — communication avec le backend

Base de données

  • PostgreSQL — stockage des nƓuds, arĂȘtes et mĂ©tadonnĂ©es

📁 Structure du projet

.
├── server.py              # Backend Flask + routes API
├── logic.py               # Algorithmes (Dijkstra, coloration)
├── TG.sql                 # SchĂ©ma SQL de la base
├── public/                # Frontend
│   ├── index.html         # Page principale
│   ├── app.js             # Logique Canvas + appels API
│   └── style.css          # Styles
├── projet final tg.docx   # Rapport du projet
└── LICENSE

📊 Exemple de cas d'usage

Scénario : Optimiser la collecte des déchets dans une ville de 30 quartiers.

  1. ModĂ©lisation — CrĂ©er un nƓud par quartier, des arĂȘtes pour chaque route (poids = distance ou temps de parcours)
  2. RĂ©partition — Lancer la coloration : la ville est divisĂ©e en zones distinctes, chacune attribuĂ©e Ă  une Ă©quipe diffĂ©rente
  3. Optimisation — Pour chaque zone, utiliser Dijkstra pour planifier le trajet le plus rapide entre le dĂ©pĂŽt et chaque point
  4. Persistance — Le rĂ©seau est sauvegardĂ© en base, modifiable en temps rĂ©el par les opĂ©rateurs

🐛 DĂ©pannage

psycopg2.OperationalError: could not connect to server → PostgreSQL n'est pas dĂ©marrĂ©, ou les identifiants dans server.py sont incorrects.

Canvas vide au dĂ©marrage → La base est vide. Ajouter des nƓuds manuellement via l'interface, ou importer un jeu de donnĂ©es initial dans TG.sql.

ArĂȘte impossible Ă  ajouter → VĂ©rifier que les deux nƓuds existent et que l'arĂȘte n'existe pas dĂ©jĂ  entre eux.


🔒 SĂ©curitĂ©

  • RequĂȘtes paramĂ©trĂ©es : protection contre les injections SQL
  • CORS configurĂ© pour limiter les origines autorisĂ©es
  • Gestion des erreurs cĂŽtĂ© serveur

📚 Contexte acadĂ©mique

Ce projet a été réalisé dans le cadre du cours de Théorie des Graphes de la Licence Informatique Appliquée à l'Université des Mascareignes. Le rapport complet est disponible dans le dépÎt (projet final tg.docx).


đŸ‘€ Auteur

SALLAH Assiongbon ThĂ©odore Jean-Paul Étudiant en 3Ăšme annĂ©e — Licence Informatique AppliquĂ©e 🎓 UniversitĂ© des Mascareignes (Maurice)

GitHub LinkedIn


📜 Licence

Ce projet est distribuĂ© sous licence MIT — voir le fichier LICENSE.


Si ce projet vous a plu, n'hésitez pas à laisser une ⭐ !

About

đŸ—ș Optimisation de tournĂ©es de collecte de dĂ©chets par thĂ©orie des graphes. Dijkstra + coloration de graphe + visualisation Canvas interactive. Flask + PostgreSQL.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors