Package Python pour la résolution de programmes linéaires en nombres entiers (PLNE) par la méthode des coupes de Gomory
Project description
Gomory - Méthode des Coupes de Gomory
Package Python pour la résolution de Programmes Linéaires en Nombres Entiers (PLNE) par la méthode des coupes de Gomory.
📖 Description
Ce package implémente la méthode des coupes de Gomory pour résoudre des problèmes d'optimisation linéaire en nombres entiers. Il respecte la méthodologie académique avec :
- Arithmétique exacte : utilisation exclusive de fractions (pas de nombres flottants)
- Affichage détaillé : tableaux du simplexe formatés à chaque itération
- Traçabilité complète : suivi de chaque étape de l'algorithme
🚀 Installation
Depuis le dépôt GitHub
# Cloner le dépôt
git clone https://github.com/vleonel-junior/Gomory.git
cd Gomory
# Créer un environnement virtuel (recommandé)
python -m venv .venv
# Activer l'environnement virtuel
# Windows:
.venv\Scripts\activate
# Linux/macOS:
# source .venv/bin/activate
# Installer le package en mode développement
pip install -e .
Installation rapide (si déjà cloné)
pip install -e .
La commande pip install -e . installe le package en mode "editable" (développement), ce qui permet de modifier le code source sans avoir à réinstaller le package.
📋 Utilisation
Exemple : Problème du sac à dos
from gomory import Problem, GomorySolver
# Définir le problème
# max z = 6x₁ + 8x₂ + 7x₃
# sous contraintes:
# 4x₁ + 6x₂ + 8x₃ ≤ 14
# x₁ ≤ 1, x₂ ≤ 1, x₃ ≤ 1
# xᵢ ∈ ℕ
problem = Problem(
objective=[6, 8, 7],
sense="max",
constraints=[
([4, 6, 8], "<=", 14),
([1, 0, 0], "<=", 1),
([0, 1, 0], "<=", 1),
([0, 0, 1], "<=", 1),
],
integer_vars=[0, 1, 2], # indices des variables entières
var_names=["x1", "x2", "x3"]
)
# Résoudre
solver = GomorySolver(problem, verbose=True)
solution = solver.solve()
# Afficher la solution
print(solution)
Résultat attendu
Solution optimale entière trouvée !
x1 = 0, x2 = 1, x3 = 1
z* = 15
📚 Méthodologie
1. Résolution du programme linéaire relaxé
Le simplexe primal est d'abord appliqué au problème sans les contraintes d'intégrité.
2. Génération des coupes de Gomory
Si la solution n'est pas entière, une coupe de Gomory est générée à partir de la ligne ayant la plus grande partie décimale.
3. Application du dual simplexe
Après ajout de la coupe, l'algorithme dual du simplexe restaure la faisabilité.
4. Itération
Le processus se répète jusqu'à obtention d'une solution entière.
🧪 Tests
pytest tests/
📁 Structure du projet
gomory/
├── gomory/
│ ├── __init__.py # Exports du package
│ ├── fraction_utils.py # Utilitaires pour fractions
│ ├── problem.py # Modélisation du problème
│ ├── tableau.py # Tableau du simplexe
│ ├── simplex.py # Simplexe primal
│ ├── dual_simplex.py # Simplexe dual
│ ├── gomory_cut.py # Génération des coupes
│ ├── solver.py # Solveur principal
│ └── display.py # Affichage formaté
├── tests/ # Tests unitaires
├── examples/ # Exemples d'utilisation
└── pyproject.toml # Configuration du package
📄 Licence
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gomory-1.0.0.tar.gz.
File metadata
- Download URL: gomory-1.0.0.tar.gz
- Upload date:
- Size: 25.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b8af5d024243ac594e08e8aebc924e08b8f705f477c9df35d1c1da6c3e88bbc
|
|
| MD5 |
a0bffcba3df3c82037f0ef99ba0c5f65
|
|
| BLAKE2b-256 |
00ccc07060fe7d2ed5323f3c05e76e1f4a8c817d1bec5d91b6b0efe72e9e0292
|
File details
Details for the file gomory-1.0.0-py3-none-any.whl.
File metadata
- Download URL: gomory-1.0.0-py3-none-any.whl
- Upload date:
- Size: 25.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa87897a7a80f085777399b722337b2fd2c7e42357d621fe243ea5b439d92f3c
|
|
| MD5 |
c34f126c1859addc9d0a6c2e96278581
|
|
| BLAKE2b-256 |
0b861b506d6b489533eac10c29fa7682ba42cd8c6d24baa8f7f0a1f8bdee9c28
|