Comment écrire une décision avec des nombres ?
La recherche opérationnelle est la science qui aide à prendre la meilleure décision quand les moyens sont limités. Elle commence toujours par un modèle : la décision écrite avec des nombres.
Ce modèle dit ce que l’on peut choisir, ce que l’on veut gagner et ce qui nous limite. Vous saurez l’écrire pour une boulangerie.
À la fin de cette leçon
Remarque
Je peux écrire une décision sous la forme de variables, d’un objectif et de contraintes.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Variable de décision | un nombre que l’on choisit librement | pain |
| Objectif | la quantité que l’on veut rendre la plus grande ou la plus petite | |
| Contrainte | une limite que le plan doit respecter | |
| Plan réalisable | un plan qui respecte toutes les contraintes | |
| Modèle | la décision écrite avec des variables, un objectif et des contraintes |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une boulangerie doit choisir ses fournées
Une boulangerie lyonnaise prépare le matin des fournées de pain et des fournées de brioches. Une fournée de pain rapporte 40 euros et une fournée de brioches 50 euros.
Elle dispose de 10 kg de farine et de 8 heures de pétrissage. Une fournée de pain prend 2 kg et 1 heure, une fournée de brioches 1 kg et 2 heures. Que faut-il cuire ?
Exemple travaillé : ce que prend chaque fournée
| Pain (x) | Brioches (y) | Disponible | |
|---|---|---|---|
| Farine en kg | 2 | 1 | 10 |
| Pétrissage en heures | 1 | 2 | 8 |
| Gain en euros | 40 | 50 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un modèle a trois parties
Les variables de décision sont les nombres à choisir : x fournées de pain et y fournées de brioches.
L’objectif est le gain à rendre le plus grand : 40 x + 50 y. Les contraintes sont les limites. Elles s’écrivent 2 x + y ≤ 10 pour la farine et x + 2 y ≤ 8 pour le temps. On ajoute x ≥ 0 et y ≥ 0, car on ne cuit pas un nombre négatif de fournées.
Tester un plan avec Python
# Un plan : 4 fournées de pain et 2 fournées de brioches.
pain = 4
brioche = 2
farine_utilisee = 2 * pain + brioche
temps_utilise = pain + 2 * brioche
print("farine utilisée", farine_utilisee, "kg sur 10")
print("temps utilisé", temps_utilise, "heures sur 8")
print("plan réalisable", farine_utilisee <= 10 and temps_utilise <= 8)
print("gain", 40 * pain + 50 * brioche, "euros")
Un plan réalisable respecte toutes les limites
Pour juger un plan, on fait deux choses. D’abord, on vérifie chaque contrainte avec les nombres du plan. Ensuite, si tout passe, on calcule le gain.
Un plan qui dépasse une seule limite est non réalisable, même s’il rapporte beaucoup. Le plan 5 pains et 1 brioche rapporte 250 euros, mais il demande 11 kg de farine.
Juger trois plans d’un coup
docker exec jupyter python3 -c "[print(x, y, 2 * x + y <= 10, x + 2 * y <= 8, 40 * x + 50 * y) for x, y in [(4, 2), (5, 1), (0, 4)]]"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire ce que la commande affiche
Chaque ligne donne x, y, puis deux réponses Vrai ou Faux, puis le gain. La première réponse dit si la farine suffit, la seconde si le temps suffit.
Le plan (4, 2) passe les deux tests et rapporte 260 euros. Le plan (5, 1) échoue sur la farine. Le plan (0, 4) est réalisable mais ne rapporte que 200 euros.
Une erreur fréquente
Attention
Beaucoup pensent que le meilleur plan est celui qui utilise le plus de produit à l’objectif, ici le plus de brioches. Mais les brioches prennent du temps, et le temps est limité. Un modèle sert justement à peser toutes les limites ensemble, jamais une seule.
Pour aller plus loin
Dans votre carnet, changez les 10 kg de farine en 12 kg, puis testez le plan (5, 2). Dites s’il devient réalisable et combien il rapporte.
Pensez ensuite à un autre cas de votre vie : un budget de courses, un emploi du temps de révision. Écrivez ses variables, son objectif et ses contraintes.