Ce projet fait partie de mon 🔗 PORTFOLIO orienté Data / IA / Software Engineering
KRPSIM est un simulateur d'ordonnancement de processus avec vérification de trace. Le projet lit une configuration de stocks/processus, calcule une exécution optimisée et permet de vérifier la cohérence d'une trace d'exécution.
- 🎯 Objectif du projet
- 🧩 Fonctionnalités principales
- 🧰 Stack
- ⚙️ Installation (source)
- 🚀 Quick Start
- 📋 Tableau des commandes make
- 📝 Formats d'entrée
- 🖥️ Exemple de sortie: simulation
- ✅ Exemple de sortie: vérification + graphe
- 📊 Visualisation Gantt
- 🗂️ Structure du projet
- 🧪 Tests
- 🔍 Qualité du code
- 📚 Documentation
- 👥 Auteurs
- 🛡️ Licence
Projet réalisé dans le cadre du cursus École 42 (projet KRPSIM), avec un objectif d'ingénierie logicielle: parser une grammaire métier, ordonnancer des processus de façon déterministe et valider les sorties.
- Simulation d'un flux de production à ressources contraintes.
- Optimisation multi-critères (temps, stock cible).
- Vérification automatique d'une trace (auditabilité d'exécution).
- Génération d'une configuration exploitable pour visualisation Gantt.
- Langage & packaging : Python
>=3.10,<3.14, Poetry - Runtime : pandas, matplotlib
- Tests : pytest, pytest-cov, Hypothesis
- Qualité : Ruff, MyPy, Black, isort, pre-commit
git clone https://github.com/raveriss/krpsim.git
cd krpsim
make installmake install installe automatiquement Poetry (si absent), crée le virtualenv et installe les dépendances.
Les cibles Make exécutent déjà les commandes dans ce virtualenv; vous pouvez donc lancer directement
make krpsim ..., make krpsim_verif ... ou make test après installation.
make shell reste disponible pour ouvrir un shell interactif dans le virtualenv lors du debug manuel.
Sur Fedora 42, le Python système est 3.13; il est supporté par cette configuration.
make krpsim resources/ikea 10
make krpsim_verif resources/ikea trace_ikea.txt| Commande | Description |
|---|---|
make |
Installation complète (install + install-bin) |
make install |
Installe Poetry (si absent) et les dépendances |
make install-bin |
Crée les symlinks krpsim / krpsim_verif dans ~/.local/bin |
make shell |
Ouvre un shell interactif dans le virtualenv |
make krpsim <resource_file> <max_cycles> |
Lance la simulation |
make krpsim_verif <resource_file> <trace_file> |
Vérifie une trace |
make graph |
Génère le graphe Gantt |
make test |
Exécute les tests |
make lint |
Exécute le lint et le typage |
make format |
Formate le code (black, isort) |
make process_resources |
Batch sur tous les fichiers de resources |
make clean |
Nettoie les artefacts temporaires |
make fclean |
Nettoyage complet (inclut venv et Poetry user) |
make doctor |
Vérifie l’état de l’environnement |
make help |
Affiche l’aide des cibles |
Les fichiers de configuration décrivent les stocks initiaux puis les processus sous forme name:(need):(result):delay.
La durée delay d'un processus doit être strictement positive (>= 1).
Une durée :0 est rejetée avec un message explicite indiquant comment corriger la ligne.
Exemple (resources/ikea):
#
# ikea demo - krpsim
#
# stock name:quantity
planche:7
#
# process name:(need1:qty1;need2:qty2;[...]):(result1:qty1;result2:qty2;[...]):delay
#
do_montant:(planche:1):(montant:1):15
do_fond:(planche:2):(fond:1):20
do_etagere:(planche:1):(etagere:1):10
do_armoire_ikea:(montant:2;fond:1;etagere:3):(armoire:1):30
#
# optimize time for 0 stock and no process possible,
# or maximize some products over a long delay
# optimize:(stock1;stock2;...)
#
optimize:(time;armoire)
#make krpsim resources/ikea 10
[KRPSIM] Exécution: file=resources/ikea, max_cycles=10
[KRPSIM] Trace de sortie: trace_ikea.txt
[KRPSIM] Config graphe: graph_config_ikea.json
Nice file! 4 processes, 5 stocks, 1 to optimize
Evaluating ... done.
Main walk:
Optimization criteria: time, armoire
0:do_etagere
0:do_montant
0:do_fond
1:do_etagere
1:do_montant
2:do_etagere
20:do_armoire_ikea
No more process doable at time 51
Final Stocks:
armoire => 1
etagere => 0
fond => 0
montant => 0
planche => 0
[GRAPH_CONFIG] Fichier genere: graph_config_ikea.jsonmake krpsim_verif resources/ikea trace_ikea.txt
[KRPSIM_VERIF] Vérification: file=resources/ikea, trace=trace_ikea.txt
trace is valid
Final Stocks:
armoire => 1
etagere => 0
fond => 0
montant => 0
planche => 0
Last cycle: 51
[GRAPH_CONFIG] Fichier genere: graph_config_ikea.json
[GRAPH] Génération du graphe GanttExemple de diagramme généré à partir du cas resources/ikea:
Sur un environnement sans affichage graphique interactif (par exemple Fedora avec
le backend Matplotlib Agg), le graphe est sauvegardé dans
docs/graphs/diagramme_gantt_<nom>.png.
Les commandes make krpsim_verif, make graph et make analysis_log_gantt_project
ouvrent automatiquement ce fichier quand un ouvreur système est disponible.
Pour générer sans ouvrir l'image:
KRPSIM_OPEN_GRAPH=0 make krpsim_verif resources/ikea trace_ikea.txtCommande utilisée:
tree -L 2Sortie:
.
├── author
├── codecov.yml
├── docs
│ ├── AGENTS.md
│ ├── diagramme_gantt_ikea.png
│ ├── diagramme_gantt_simple.png
│ ├── krpsim.en.subject.pdf
│ ├── Lois de Murphy.KRPSIM.txt
│ ├── optimize_marelle-bonbon.png
│ ├── optimize_marelle.png
│ ├── optimize_stock1.png
│ ├── optimize_stock1-stock2.png
│ ├── optimize_stock2-stock1.png
│ ├── optimize_time-marelle.png
│ ├── pipeline.md
│ └── WBS_krpsim.txt
├── gantt_project
│ ├── build_graph_config.py
│ └── gantt.py
├── graph_config_ikea.json
├── graph_config_simple.json
├── LICENSE
├── Makefile
├── poetry.lock
├── pyproject.toml
├── README.md
├── resources
│ ├── bad_proc
│ ├── bad_ref
│ ├── bad_stock
│ ├── best
│ ├── big
│ ├── delay0
│ ├── dup
│ ├── expo
│ ├── finite
│ ├── gantt_x
│ ├── gantt_y
│ ├── greedy
│ ├── ikea
│ ├── init0
│ ├── lexi
│ ├── loop
│ ├── multi_out
│ ├── no_goal
│ ├── obj2
│ ├── pomme
│ ├── recre
│ ├── self
│ ├── simple
│ ├── steak
│ └── time
├── src
│ ├── krpsim
│ └── krpsim_verif
├── tests
│ ├── __init__.py
│ ├── test_cli.py
│ ├── test_display.py
│ ├── test_graph_pipeline.py
│ ├── test_parser_hypothesis.py
│ ├── test_parser.py
│ ├── test_simulator.py
│ ├── test_verifier.py
│ └── test_version.py
├── trace_ikea.txt
└── trace_simple.txt
7 directories, 57 filesmake test- Formatage :
blacketisort. - Lint :
ruff. - Typage :
mypy. - Hooks :
pre-commit.
- Rafael VERISSIMO — Portfolio · LinkedIn · GitHub
- Paul BEAUDET — LinkedIn · GitHub
- Sylvanna COURBIS — GitHub
Projet distribué sous licence MIT.
