Pourquoi la faisabilité compte plus que l’optimalité

Published

January 29, 2026

Introduction : Le paradoxe de l’optimisation

La plupart des cours d’optimisation mettent l’accent sur l’optimalité.
La plupart des systèmes industriels punissent l’infaisabilité.

Ce décalage n’est pas académique.
Il est opérationnel.

J’ai vu des modèles méticuleusement optimisés s’effondrer en production parce qu’ils étaient trop parfaits—opérant à la limite de la faisabilité sans aucune marge d’erreur. Pendant ce temps, des solutions “sous-optimales” avec une marge de manœuvre intégrée fonctionnaient parfaitement pendant des mois.

La leçon était brutale et claire : dans les opérations réelles, une solution faisable en laquelle vous pouvez avoir confiance vaut mieux qu’une solution optimale que vous ne pouvez pas déployer.

Voici pourquoi la faisabilité n’est pas seulement importante—c’est le fondement même de l’optimisation pratique.


Faisable bat optimal — à chaque fois

En théorie, une solution infaisable est inutile.
En pratique, une solution presque optimale mais faisable bat une solution parfaite qui viole une seule contrainte.

Considérez deux solutions d’allocation d’entrepôt :

Solution A (Optimale) : - Minimise la distance totale de prélèvement de 18% - Atteint un équilibrage parfait de la charge entre les zones - Viole la capacité physique dans la Zone 3 de 2% pendant les heures de pointe - Résultat : Ne peut pas être mise en œuvre. Le débordement crée des dangers pour la sécurité et un chaos opérationnel.

Solution B (Faisable, optimale à 95%) : - Minimise la distance totale de prélèvement de 14% - Léger déséquilibre dans l’utilisation des zones - Respecte toutes les contraintes de capacité avec un tampon de 10% - Résultat : Déployée avec succès. Fonctionne pendant 6 mois sans intervention.

Quelle solution apporte le plus de valeur ?

La réponse est évidente—mais les algorithmes d’optimisation ne se soucient pas du déploiement. Ils se soucient des fonctions objectifs.

Les opérations ne négocient pas les contraintes

Quand je dis à un gestionnaire d’entrepôt que mon modèle d’optimisation a réduit les coûts de 15% mais nécessite des violations occasionnelles de capacité, la réponse est toujours la même :

“Je me fiche de votre fonction objectif. Ma contrainte, c’est la réalité physique. Les étagères contiennent X palettes. Pas X + 2%. Corrigez votre modèle.”

Les opérations imposent des invariants :

  • Capacité : Vous ne pouvez pas stocker plus que l’espace physique ne le permet.
  • Sécurité : Vous ne pouvez pas dépasser les limites de charge, violer les dégagements ou ignorer les codes d’incendie.
  • Timing : Vous ne pouvez pas livrer avant le ramassage, expédier avant la réception ou commencer avant que les prérequis soient remplis.
  • Séquencement : Vous ne pouvez pas nettoyer l’équipement pendant qu’il fonctionne, accéder à un inventaire bloqué ou contourner les inspections obligatoires.

Ce ne sont pas des règles souples.
Ce sont des conditions limites de la réalité.

Et la réalité est impitoyable.


L’optimalité cache la fragilité

Les solutions hautement optimisées ont tendance à être fragiles.
Elles opèrent à la limite de la faisabilité, exploitant chaque degré de liberté disponible.

C’est beau en théorie.
C’est catastrophique en pratique.

La fragilité des solutions optimales

Exemple : Planification de production

Un calendrier de production optimal pourrait :

  • Utiliser les machines à 98% de capacité,
  • Minimiser les temps de changement à quelques secondes,
  • Séquencer les tâches sans tampon entre les opérations,
  • Supposer une disponibilité parfaite des matériaux, de la main-d’œuvre et de l’équipement.

Puis la réalité arrive :

Une petite perturbation :

  • Expédition retardée (les matières premières arrivent avec 2 heures de retard),
  • Données manquantes (l’inspection qualité révèle un défaut de lot),
  • Intervention humaine (arrêt d’urgence de l’opérateur pour la sécurité),
  • Variance d’équipement (la machine fonctionne 5% plus lentement que prévu),

…et tout le plan s’effondre.

Le calendrier se transforme en cascade de :

  • Échéances manquées,
  • Opérations en aval inactives,
  • Logistique accélérée pour récupérer,
  • Replanification manuelle consommant des heures de temps de planificateur.

La solution “optimale” a optimisé pour un monde qui n’existe pas.

Les systèmes robustes échangent l’optimalité contre la marge

Dans mon travail de chaîne d’approvisionnement, j’ai appris à délibérément sous-optimiser :

  • Planifier les machines à 85-90% de capacité, pas 98%—laisse de la place pour la variabilité.
  • Construire des tampons de temps entre les opérations critiques—absorbe les retards sans cascade.
  • Maintenir des stocks de sécurité même quand les formules EOQ disent de minimiser l’inventaire—protège contre les pics de demande.
  • Utiliser des délais conservateurs—tient compte de la non-fiabilité des fournisseurs.

Ces choix réduisent la valeur de la fonction objectif.
Ils réduisent également la probabilité d’échec catastrophique.

Les bons modèles rendent ce compromis explicite.

Au lieu de :

# Maximiser le débit (fragile)
objective = maximize(sum(production[t] for t in time_periods))

Je conçois :

# Maximiser le débit sous réserve de robustesse
objective = maximize(
    sum(production[t] for t in time_periods) 
    - penalty * sum(capacity_utilization_excess[m, t] for m, t in machines_time)
)

# Avec des contraintes de marge explicites
capacity_utilization[m, t] <= 0.90 * capacity[m]  # Plafond dur à 90%

Ce n’est pas de l’aversion au risque académique.
C’est la survie opérationnelle.


La faisabilité est un choix de conception

La faisabilité ne vient pas “gratuitement”.
Elle est ingéniérée.

Quand je conçois un modèle d’optimisation, assurer la faisabilité nécessite des choix délibérés :

1. Limites conservatrices

Au lieu d’utiliser la capacité nominale, j’utilise la capacité effective tenant compte de :

  • Temps d’arrêt pour maintenance,
  • Taux de rejet qualité,
  • Variance d’efficacité de l’opérateur,
  • Conditions de charge de pointe.
# Approche naïve (échoue en production)
constraint: production[t] <= nominal_capacity

# Approche robuste (survit à la réalité)
constraint: production[t] <= 0.85 * nominal_capacity  # Tampon de 15% pour la variabilité

2. Tampons explicites

Je construis la marge dans la structure du modèle, pas après coup :

  • Tampons de temps : entre les opérations dépendantes,
  • Tampons d’inventaire : stock de sécurité, capacité de pointe,
  • Tampons de capacité : équipement de réserve, zones de débordement.

Ceux-ci réduisent la valeur objectif optimale.
Ils préviennent également l’infaisabilité sous perturbation.

3. Valeurs big-M soigneusement choisies

Les formulations big-M sont notoirement fragiles. Choisissez M trop petit, et vous contraignez artificiellement le problème. Choisissez M trop grand, et vous créez une instabilité numérique.

Mauvais choix de big-M :

# Nombre arbitrairement grand
M = 1e9
constraint: y[i] <= M * x[i]  # Si x[i]=0, force y[i]=0

Si les valeurs réelles de y peuvent atteindre 1e8, cela casse. Si elles sont bornées par 100, M=1e9 cause des problèmes numériques au solveur.

Bon choix de big-M :

# Dérivé de la structure du problème
M = max(demand[i] for i in products) * max(lead_time[j] for j in suppliers)
constraint: y[i] <= M * x[i]  # Borne valide la plus serrée

Cela nécessite de comprendre le problème, pas seulement de reproduire un modèle de manuel.

4. Simplifications délibérées

Parfois, la “bonne” formulation est intraitable.
Parfois, la simplification est le seul chemin vers la faisabilité.

Exemple : Un modèle d’inventaire multi-échelon globalement optimal pourrait nécessiter :

  • Programmation dynamique stochastique,
  • Simulation Monte Carlo pour l’incertitude de la demande,
  • Variables entières pour les quantités de commande,
  • Fonctions de coût de détention non linéaires.

Résultat : Intraitable computationnellement pour des tailles de problèmes réalistes.

Simplification :

  • Utiliser une approximation déterministe avec des scénarios de demande,
  • Linéariser les coûts de détention,
  • Décomposer par échelon,
  • Résoudre séquentiellement avec passage d’information.

Compromis : Perdre la garantie d’optimalité globale.
Gain : Solutions faisables en minutes au lieu de jamais.

Ces choix sont rarement élégants.
Ils sont nécessaires.


Ce que la production enseigne rapidement

Les environnements de production exposent ce que les simulations cachent.

Dans les milieux académiques, les modèles sont évalués sur : - Valeur de la fonction objectif, - Temps d’exécution du solveur, - Écart d’optimalité.

En production, les modèles sont évalués sur :

  • Taux de succès de déploiement (fonctionne-t-il réellement ?),
  • Fréquence d’intervention manuelle (à quelle fréquence les opérateurs le contournent-ils ?),
  • Modes d’échec (qu’est-ce qui le casse, et à quel point ?),
  • Confiance des parties prenantes (les gens croient-ils aux recommandations ?).

Si un modèle :

1. Échoue silencieusement

Produit des solutions qui violent des contraintes non explicitement modélisées (limites réglementaires, précédence implicite, règles métier non déclarées), l’équipe opérationnelle découvre les violations après le déploiement, pas avant.

Impact : Perte de confiance. Contournements manuels. Abandon du modèle.

2. Nécessite des corrections manuelles constantes

Génère des solutions qui sont “techniquement faisables” mais opérationnellement absurdes : - Planifier une expédition qui arrive après la date limite du client, - Attribuer des produits incompatibles à la même zone de stockage, - Recommander des quantités de production qui ne s’alignent pas avec les unités d’emballage.

Impact : Les planificateurs passent plus de temps à corriger les sorties du modèle qu’ils n’en passeraient à planifier manuellement.

3. Produit des solutions qui nécessitent des explications

Si les parties prenantes demandent systématiquement “Pourquoi a-t-il recommandé cela ?” et que la réponse nécessite de plonger dans les variables duales, les prix fictifs ou les relaxations de contraintes—le modèle a échoué dans son travail principal : soutenir les décisions.

La faisabilité, c’est ce qui survit au contact avec la réalité

J’ai appris à évaluer les modèles non pas par la qualité de leur optimisation, mais par :

  • Combien de temps ils fonctionnent sans intervention manuelle,
  • Comment ils se dégradent gracieusement sous des problèmes de qualité des données,
  • Avec quelle facilité les parties prenantes comprennent et font confiance aux sorties,
  • Combien de “corrections d’urgence” ils nécessitent en production.

L’optimalité est un plus.
La faisabilité est non négociable.


Le coût caché de l’infaisabilité

Les solutions infaisables n’échouent pas simplement—elles érodent la confiance dans l’analytique.

Quand un modèle d’optimisation méticuleusement conçu : - Recommande un plan de production qui viole la capacité, - Suggère des niveaux d’inventaire qui créent des ruptures de stock, - Propose des expéditions qui manquent les fenêtres de livraison,

Les parties prenantes ne blâment pas le modèle.
Elles blâment toute la fonction analytique.

La conversation passe de “Comment l’optimisation peut-elle nous aider ?” à “Pourquoi devrions-nous faire confiance à vos modèles ?”

Reconstruire cette confiance prend des mois.
La détruire prend un mauvais déploiement.

C’est pourquoi je suis obsédé par la faisabilité avant même de penser à l’optimalité.


Réflexion finale : L’existence avant l’excellence

L’optimisation ne consiste pas à trouver la meilleure solution.
Il s’agit de trouver des solutions qui peuvent exister.

Une solution qui :

  • Respecte toutes les contraintes,
  • Résiste à la variabilité opérationnelle,
  • Gagne la confiance des parties prenantes,
  • Fonctionne sans intervention constante,

…est infiniment plus précieuse qu’une solution théoriquement optimale qui ne peut pas être déployée.

Tout le reste est optionnel.


Liste de vérification pratique pour une conception axée sur la faisabilité

Quand je conçois un modèle d’optimisation, je pose maintenant ces questions avant d’exécuter le solveur :

Ai-je validé chaque contrainte avec les parties prenantes ?
(Pas seulement “Cette contrainte est-elle correcte ?” mais “Est-ce ainsi que la réalité fonctionne réellement ?”)

Ai-je construit des tampons explicites pour la variabilité ?
(Marge de capacité, tampons de temps, stock de sécurité, capacité de pointe)

Ai-je testé la formulation sous contrainte sur des cas limites ?
(Demande de pointe, défaillances de fournisseurs, problèmes de qualité des données, temps d’arrêt de l’équipement)

Puis-je expliquer chaque contrainte en langage simple ?
(Si je ne peux pas expliquer pourquoi une contrainte existe, les parties prenantes ne feront pas confiance aux solutions qui la respectent)

Ai-je conçu pour une dégradation gracieuse ?
(Que se passe-t-il quand une contrainte est presque violée ? Le modèle récupère-t-il ou s’effondre-t-il ?)

Ma formulation big-M est-elle numériquement stable ?
(Mes valeurs big-M sont-elles des bornes serrées, ou des nombres arbitrairement grands qui causent des problèmes au solveur ?)

Si je ne peux pas répondre “oui” à toutes ces questions, je ne déploie pas.

Parce que les échecs de faisabilité en production sont bien plus coûteux que les solutions sous-optimales.


Les solutions optimales impressionnent dans les présentations.
Les solutions faisables survivent en production.

Je choisis la survie.


Quelle a été votre expérience avec les compromis faisabilité vs optimalité ? Avez-vous déployé des modèles “optimaux” qui ont échoué ? Ou des modèles “sous-optimaux” qui ont prospéré ? Comparons nos histoires de guerre—contactez-moi sur LinkedIn.