POO & Recherche opérationnelle sous python
Pr: MAJDOUB Soufyane
Université Sidi Mohamed Ben Abdellah de Fès
[email protected] Laboratoire d’Informatique, Signaux, Automatique et Cognitivisme
November 28, 2024
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 1 / 15
Plan
1 La bibliothèque Docplex
2 Modèle d’optimisation
Variables de décision
Contraintes et objectif du modèle
Résolution du modèle
3 La bibliothèque OR-Tools
4 Modèle d’optimisation
Variables de décision
Contraintes et objectif du modèle
Exemple: Résolution du modèle
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 2 / 15
La bibliothèque Docplex
Docplex
• Docplex est une bibliothèque de programmation linéaire en Python
développée par IBM pour résoudre des problèmes d’optimisation.
• Cette bibliothèque permet de modéliser et de résoudre des problèmes
d’optimisation linéaire, en nombres entiers et quadratiques.
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 3 / 15
La bibliothèque Docplex
Docplex
• Docplex est une bibliothèque de programmation linéaire en Python
développée par IBM pour résoudre des problèmes d’optimisation.
• Cette bibliothèque permet de modéliser et de résoudre des problèmes
d’optimisation linéaire, en nombres entiers et quadratiques.
Example (Installer Docplex)
pip install docplex
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 3 / 15
La bibliothèque Docplex
Docplex
• Docplex est une bibliothèque de programmation linéaire en Python
développée par IBM pour résoudre des problèmes d’optimisation.
• Cette bibliothèque permet de modéliser et de résoudre des problèmes
d’optimisation linéaire, en nombres entiers et quadratiques.
Example (Installer Docplex)
pip install docplex
Une fois installé, vous pouvez importer la bibliothèque dans votre script Python et
commencer à modéliser et à résoudre des problèmes d’optimisation.
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 3 / 15
Modèle d’optimisation
Création du modèle
m = Model(name=’Exemple’)
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 4 / 15
Modèle d’optimisation
Création du modèle
m = Model(name=’Exemple’)
Création des variables
Variable continue
x1 = m.continuous_var(name=’x1’)
Variable continue positive
x2 = m.continuous_var(name="x2", lb=0)
Variable continue négative
x3 = m.continuous_var(name="x3", ub=0)
Variable continue bornée
x4 = m.continuous_var(name="x4", lb=-3, ub=10)
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 4 / 15
Création des variables
Variable binaire
x5 = m.binary_var(name=’x5’)
Variable entière comprise entre -3 et 10
x6 = m.integer_var(name=’x6’, lb=-3, ub=10)
Liste des variables continues de taille n comprise entre 0 et 10
x7 = m.continuous_var_list(n, lb=0.0, ub=10.0, name=’x7’)
Liste des variables binaires de taille n
x8 = m.binary_var_list(n, name=’x8’)
Liste des variables entières de taille n comprise entre -3 et 10
x9 = m.integer_var_list(n, lb=-3.0, ub=10.0, name=’x9’)
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 5 / 15
Variables de décision(suite)
Création des variables
Matrice des variables continues de m lignes et n colonnes dont les valeurs
comprissent entre a et b
x10 =m.continuous_var_matrix(n_rows,n_cols,lb=a,ub=b,name=’x10’)
Matrice des variables binaires de n rows lignes et n cols colonnes
x11 = m.binary_var_matrix(n_rows,n_cols,name=’x11’)
Matrice des variables entières de n rows lignes et n cols colonnes dont les valeurs
comprissent entre a et b
x12 = m.integer_var_matrix(n_rows,n_cols,lb=a,ub=b,name=’x12’)
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 6 / 15
Contraintes et objectif du modèle
Création des Contraintes
En Docplex, il est possible de créer des contraintes linéaires ou non-linéaires à
l’aide des opérateurs arithmétiques classiques (+, -, *, /) et des méthodes de la
classe Model.
m.add_constraint(2*x + 3*y <= 5*z + 2)
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 7 / 15
Contraintes et objectif du modèle
Création des Contraintes
En Docplex, il est possible de créer des contraintes linéaires ou non-linéaires à
l’aide des opérateurs arithmétiques classiques (+, -, *, /) et des méthodes de la
classe Model.
m.add_constraint(2*x + 3*y <= 5*z + 2)
Création de la fonction objectif
Une fois que vous avez défini toutes les variables et les contraintes du problème,
vous pouvez ajouter une fonction objective à optimiser à l’aide de la méthode
maximize() ou minimize() de la classe Model
m.maximize(*x + 2*y) //dans le cas de maximisation
m.minimize(*x + 2*y) //dans le cas de minimisation
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 7 / 15
Contraintes et objectif du modèle
Création des Contraintes
En Docplex, il est possible de créer des contraintes linéaires ou non-linéaires à
l’aide des opérateurs arithmétiques classiques (+, -, *, /) et des méthodes de la
classe Model.
m.add_constraint(2*x + 3*y <= 5*z + 2)
Création de la fonction objectif
Une fois que vous avez défini toutes les variables et les contraintes du problème,
vous pouvez ajouter une fonction objective à optimiser à l’aide de la méthode
maximize() ou minimize() de la classe Model
m.maximize(*x + 2*y) //dans le cas de maximisation
m.minimize(*x + 2*y) //dans le cas de minimisation
Résolution du modèle
La résolution du problème est faite en appelant la méthode solve() de l’objet Model
m.solve()
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 7 / 15
Résolution du modèle
Résolution du modèle
La résolution du problème est faite en appelant la méthode solve() de l’objet Model
m.solve()
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 8 / 15
Résolution du modèle
Résolution du modèle
La résolution du problème est faite en appelant la méthode solve() de l’objet Model
m.solve()
Exemple:Résolution d’un problème simple
Résoudre le programme
linéaire suivant:
max 5x + 3y
subject to :
x + y ≤ 5
(P) :
2x + y ≤ 8
x ≥0
y ≥0
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 8 / 15
Résolution du modèle
Résolution du modèle
La résolution du problème est faite en appelant la méthode solve() de l’objet Model
m.solve()
Exemple:Résolution d’un problème simple
Résoudre le programme from docplex.mp.model import Model
linéaire suivant: model = Model(’mon_modele’)
x = model.continuous_var(name=’x’,lb=0)
max 5x + 3y y = model.continuous_var(name=’y’,lb=0)
subject to : model.maximize(3*x + 4*y)
model.add_constraint(x + y <= 5)
x + y ≤ 5
(P) : model.add_constraint(2*x + y <= 8)
2x + y ≤ 8
sol = model.solve()
x ≥0
print(’x =’, sol[x])
y ≥0
print(’y =’, sol[y])
print(’objectif :’, sol.objective_value)
MAJDOUB Soufyane (USMBA) POO & Recherche opérationnelle sous python November 28, 2024 8 / 15