Guillaume Fossier· optimisation Réserver 15 min

Optimisation sous contrainte · recherche opérationnelle · ML appliqué

Le solveur exact
tient jusqu'où ?

Avant que le temps de calcul vous pousse aux heuristiques. C'est l'arbitrage qui m'occupe. J'interviens quand le cœur du produit est un problème de calcul.

20×
solveur accéléré
4 s → <200 ms
97,6 %
couverture CP-SAT
solve ~1,2–1,9 s
−0,854
corrélation held-out
Spearman, p = 0,001

Le problème que je prends

Le yield management, c'est de l'optimisation sous incertitude de demande avec des contraintes de capacité dures. En RL, la difficulté est de garder une reward stable. Pour des agents, l'orchestration doit rester déterministe là où ça compte.

Tous ces problèmes posent la même question : vous tenez le solveur exact en interne jusqu'où, avant que le temps de calcul vous pousse aux heuristiques ? Je travaille cet arbitrage. Trois cas ci-dessous, chiffrés et vérifiables.

Trois cas, trois classes de problème

01 Métaheuristique · budget temps réel code privé · technique tracée au commit

Solveur sous contrainte de temps

Problème dur

Optimiser un graphe de décision multi-objectif (trois objectifs concurrents), avec des taux endogènes non-linéaires qui se renvoient les uns aux autres. Budget dur : moins de 2 secondes entre deux phases, moins de 500 ms en cours d'exécution.

Approche

Le solveur exact tombe d'office : la non-linéarité interdit la linéarisation, et une dépendance externe type CPLEX/Gurobi était proscrite. J'ai écrit un GRASP + Tabu + VNS anytime, à pool alpha adaptatif et escalade de voisinages, front de Pareto pondéré Chebyshev. Les taux endogènes passent par une itération de Picard sous-relaxée, tenue hors de la boucle de recherche.

Ce que je ne maquille pas

Je mesure et trace la vitesse. La qualité des solutions, je l'affirme préservée, je ne la chiffre pas encore.

Résultat mesuré
4 s → <200 ms

le même solveur, après avoir sorti le point fixe des boucles chaudes

02 CP-SAT (OR-Tools) · en production déployé · pokeforge.app

Set-cover sous contraintes dures

Problème dur

Sélectionner six éléments sous contraintes d'unicité dures pour maximiser une couverture pondérée par l'usage contre une matrice de menaces. Du set-cover combinatoire, pas un tri par score.

Approche

CP-SAT (OR-Tools), un solveur de contraintes industriel, appelé depuis la route applicative. Linéarisation propre du max, objectif secondaire lexicographique (multiplicateur 10⁷, int64-safe) pour un tie-break déterministe inter-runs, cache de résultat par signature d'entrée.

Ce que je ne maquille pas

Verdict que j'assume, audit externe à l'appui : le CP-SAT est propre, c'est le thermomètre qui mesure la météo avec une fourchette. Le solveur n'est pas le maillon faible, le modèle sous-jacent l'est. Nommer la limite du proxy compte plus que le solveur lui-même.

Résultat mesuré
97,6 % · solve 1,2–1,9 s

couverture stable quand le pool passe de 67 à 138 candidats ; cache 2061 ms → 140 ms

03 Validation de modèle · sans overfit en ligne · fossier.dev

Un signal qui survit au held-out

Problème dur

Quantifier une grandeur (la difficulté empathique d'une paire d'émotions) et prouver que le signal n'est pas un artefact de ce qu'on a sélectionné, sur des corpus multi-label réels.

Approche

Modèle à zéro paramètre libre, coordonnées figées depuis la littérature, seuls trois poids de distance calibrés. Cross-validation sur un corpus, held-out sur un second, jamais de réglage sur le jeu de test. Signal recoupé sur trois mesures d'association indépendantes (PMI, NPMI, LMI) et deux null models.

Ce que je ne maquille pas

Corrélation forte avec la co-occurrence réelle, null model p = 0,001. La validation comme mesure empathique au sens psychologique (ratings humains) reste à mener, et c'est écrit dans la doc du modèle.

Résultat mesuré
−0,854 / −0,839

Spearman sur XED (17 528 items) puis SemEval held-out (10 690 items)

Le même arbitrage, jusqu'à l'archivage paper public + case study

Un candidat gagnait 100 % des duels contre la version en production. Je l'ai refusé.

Testé sur des données qu'il n'avait jamais vues, son coût de calcul réel était 13,26× la prod, soit 2,8× mon estimation. Non viable. Archivé, beam search réglé à la main retenu. J'ai tranché sur le coût réel, pas sur l'estimation. C'est le moment précis où le solveur cède la place à l'heuristique.

Lire le paper complet
100 %
duels gagnés, refusés
13,26×
coût calcul réel
110
situations testées

Comment je travaille

Les contraintes dures sont la topologie du solveur

Une contrainte de capacité n'est pas un poids dans l'objectif. Elle borne l'espace de recherche. La confondre avec une pénalité, c'est laisser le solveur la violer dès que ça l'arrange.

Déterministe pour décider, LLM pour raconter

La décision critique passe par un moteur testé et reproductible. Le LLM habille le résultat, il ne le prend pas. Sur oco, le moteur de policy est à 100 % heuristique, couvert par des tests déterministes.

Un gate qui ferme vaut mieux qu'un chiffre forcé

J'écris le critère d'échec avant de lancer. Quand le candidat ne passe pas, il est archivé, même séduisant. La falsification propre est ce qui rend le reste crédible.

Ce que je revendique
  • CP-SAT / OR-Tools (programmation par contraintes)
  • Programmation linéaire (CVXPY / Clarabel)
  • Métaheuristiques anytime (GRASP, Tabu, VNS, Pareto)
  • Validation de modèle (cross-val, held-out, null models)
  • Orchestration déterministe (moteur de policy testé, sans LLM dans la décision)
Ce que je ne revendique pas
  • Pas d'expérience MILP en production sur CPLEX / Gurobi
  • Pas de modèle RL entraîné qui bat un baseline (un essai, falsifié et documenté)
  • Pas de benchmark agent chiffré : oco est un artefact d’ingénierie, pas une métrique

Là où le solveur exact s'impose, je le dis et je formule le problème pour qu'un spécialiste MIP le prenne. C'est plus utile qu'un nom de solveur que je n'ai pas livré.

L'offre d'entrée

Diagnostic Calcul —
le verdict avant le moteur

Cinq jours, forfait. Je cartographie votre problème de calcul, je prototype la formulation sur vos données, je borne le gain atteignable. Vous repartez avec un verdict chiffré : solveur exact, heuristique, ou « n'y touchez pas — ça ne vaut pas le coût ». L'implémentation est une phase 2, au forfait, si le verdict la justifie.

  • Formulation formelle du problème : variables, contraintes, objectif
  • Prototype de faisabilité sur données réelles ou synthétiques
  • Gain atteignable borné et chiffré
  • Verdict de recommandation + roadmap phase 2

Les cinq jours démarrent quand vos données sont accessibles. À défaut, le verdict est rendu sur données synthétiques représentatives, et le passage aux données réelles est chiffré en phase 2.

Prix de lancement · 3 places
3 500 € 1 500 € HT

Forfait 5 jours · TVA non applicable, art. 293 B du CGI

En échange : un témoignage chiffré et le droit de publier la case study, anonymisée si besoin. Retour au plein tarif dès la première référence publiée — c'est écrit ici, vous pourrez le vérifier.

Un seul appel

Quinze minutes
sur votre arbitrage

Vous décrivez le problème de calcul qui vous tient. Je vous dis si c'est mon terrain, et où passe la ligne solveur / heuristique pour votre cas. Sans engagement.

Pas le bon créneau ? Écrivez-moi.

[email protected]

Guillaume Fossier · optimisation sous contrainte, OR & ML appliqué

[email protected] · SIREN 983 817 057