Implémentation de la méthode Simplex en C
Implémentation de la méthode Simplex en C
Recherche opérationnelle
Méthode Simplex
Rapport 1
INTRODUCTION
Rapport 2
fi
fi
fi
fi
fi
ÉTAT DE L’ART
L'algorithme Simplex est une méthode de résolution utilisée pour résoudre
des problèmes d'optimisation linéaire. Il se base sur la notion de
programmation linéaire, qui consiste à maximiser ou minimiser une fonction
linéaire, appelée fonction objective, sous certaines contraintes linéaires.
1. Formulation du problème :
- Le problème est formulé sous la forme d'un ensemble de contraintes
linéaires et d'une fonction objective linéaire.
- Les contraintes linéaires sont généralement exprimées sous la forme
d'équations ou d'inéquations linéaires.
Rapport 3
fi
fi
7. Solution optimale :
- Une fois que la solution optimale est atteinte, les valeurs des variables et
la valeur de la fonction objective sont obtenues à partir du tableau Simplex.
Rapport 4
fi
fi
fi
fi
Implémentation du code
Rapport 5
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
effectue une boucle tant que la solution n'est pas optimale. À chaque itération,
elle recherche la colonne pivot et la ligne pivot, puis effectue l'opération pivot.
Elle af che ensuite le nouveau tableau, l'élément pivot, la colonne pivot et la
ligne pivot. Une fois la solution optimale atteinte, elle af che le tableau nal, la
valeur de Z (la fonction objectif) et les valeurs des variables de décision.
La fonction « displayTable »
1. La fonction utilise deux variables d'itération, `i` et `j`, pour parcourir les
lignes et les colonnes du tableau.
2. À chaque itération de la boucle externe (pour `i`), la boucle interne (pour
`j`) est exécutée pour parcourir les colonnes de la ligne `i`.
3. À chaque itération de la boucle interne, la fonction `printf` est utilisée
pour af cher la valeur de `table[i][j]`, c'est-à-dire l'élément du tableau
correspondant à la ligne `i` et à la colonne `j`. Le format `%lf` est utilisé pour
af cher la valeur en notation décimale.
4. Après avoir parcouru toutes les colonnes d'une ligne, la fonction
`printf("\n")` est utilisée pour passer à la ligne suivante.
Rapport 6
fi
fi
fi
fi
fi
fi
fi
fi
5. Ce processus se répète jusqu'à ce que toutes les lignes et colonnes du
tableau aient été parcourues.
La fonction « ndPivotColumn »
Rapport 7
fi
fi
fi
fi
fi
fi
fi
La fonction « ndPivotRow »
Rapport 8
fi
fi
fi
fi
La fonction « performPivotOperation »
Rapport 9
fi
fi
fi
fi
fi
fi
La fonction « isOptimal »
Rapport 10
fi
fi
fi
fi
encore des variables de décision dont la valeur doit être améliorée pour
atteindre l'optimalité.
4. Si la condition `table[0][i] < 0` est satisfaite, la fonction retourne la valeur
0, indiquant que le tableau n'est pas optimal.
5. Si la boucle se termine sans retourner 0, cela signi e que toutes les
valeurs des cellules dans la première ligne du tableau sont supérieures ou
égales à zéro, ce qui indique que le tableau est optimal.
6. Dans ce cas, la fonction retourne la valeur 1, indiquant que le tableau est
optimal.
La fonction « addSlackVariables »
Rapport 11
fi
fi
La fonction « simplexMethod »
Rapport 12
fi
fi
fi
La fonction `simplexMethod` implémente l'algorithme du Simplex pour
résoudre un problème de programmation linéaire. Elle prend en paramètres le
tableau `table` représentant le tableau initial du Simplex, ainsi que le nombre
de lignes `rows` et de colonnes `columns` de ce tableau.
Rapport 13
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
commençant par la deuxième colonne (indice 1) jusqu'à l'avant-dernière
colonne.
Rapport 14
1. Les variables `i`, `j`, `rows` et `columns` sont déclarées. Elles seront
utilisées pour stocker des informations sur le problème de programmation
linéaire à résoudre.
2. La première instruction `printf` demande à l'utilisateur d'entrer le
nombre de variables de décision. La valeur saisie est stockée dans la variable
`columns`.
3. La ligne `columns += 2;` est utilisée pour augmenter le nombre de
colonnes du tableau `table` pour inclure les variables d'écart (slack variables) et
la ligne de l'objectif.
4. Ensuite, l'utilisateur est invité à entrer le nombre de contraintes. La
valeur saisie est stockée dans la variable `rows`.
5. La ligne `rows += 1;` est utilisée pour augmenter le nombre de lignes du
tableau `table` pour inclure la ligne de l'objectif.
6. Le tableau bidimensionnel `table` est déclaré avec une taille maximale
`MAX_SIZE`.
7. L'utilisateur est invité à entrer les coef cients de la fonction objectif. Une
boucle `for` est utilisée pour parcourir les colonnes correspondantes (deuxième
colonne jusqu'à l'avant-dernière) et stocker les coef cients dans `table[0][j]`. La
valeur est multipliée par -1 pour convertir une maximisation en minimisation.
8. La valeur de la fonction objectif (`table[0][columns - 1]`) est initialisée à
zéro.
9. Ensuite, l'utilisateur est invité à entrer les coef cients des contraintes.
Une boucle `for` est utilisée pour parcourir les lignes (à partir de la deuxième) et
les colonnes correspondantes (deuxième colonne jusqu'à l'avant-dernière). Les
coef cients sont stockés dans `table[i][j]`.
10. L'utilisateur est également invité à entrer les valeurs du membre de
droite (RHS) des contraintes, qui sont stockées dans `table[i][columns - 1]`.
11. Une fois que toutes les entrées sont effectuées, la fonction
`displayTable` est appelée pour af cher le tableau initial.
12. Ensuite, la fonction `simplexMethod` est appelée avec le tableau `table`,
le nombre de lignes et de colonnes.
13. En n, la fonction `main` se termine et renvoie 0 pour indiquer une
exécution réussie du programme.
Rapport 15
fi
fi
fi
fi
fi
fi
Simulation
Rapport 16
Rapport 17
CONCLUSION
Le projet consiste en l'implémentation de l'algorithme Simplex en langage
C pour résoudre des problèmes de programmation linéaire. L'algorithme
Simplex est l'un des algorithmes les plus couramment utilisés pour résoudre
des problèmes d'optimisation linéaire.
L'importance de ce projet réside dans sa capacité à résoudre ef cacement
des problèmes de programmation linéaire en fournissant une solution optimale
ou en indiquant l'absence de solution réalisable. L'algorithme Simplex est un
outil précieux dans de nombreux domaines tels que l'économie, la gestion des
opérations, la logistique, la recherche opérationnelle et bien d'autres.
L'implémentation de l'algorithme Simplex en C a permis de réaliser les
étapes clés de l'algorithme, notamment l'initialisation du tableau, l'ajout des
variables d'écart, la recherche des colonnes et lignes pivots, les opérations
pivotantes et la véri cation de l'optimalité. Le projet a également fourni des
fonctions auxiliaires pour af cher les tableaux et les résultats.
Tout au long du projet, l'apprentissage et les idées acquises comprennent :
Rapport 18
fi
fi
fi
fi
1. Gestion des erreurs : Ajouter une gestion des erreurs plus robuste pour
gérer les entrées incorrectes de l'utilisateur ou les situations où le problème n'a
pas de solution réalisable.
Rapport 19
fi
fi