Optimally
EN·DE·FRDefault locale: EN
Contact
Domaines d'expertise/Revenue Management/2026

Une heuristique de tarification avec <0,2 % d'écart d'optimalité et jusqu'à 37 millions × d'accélération sur l'état de l'art

Le Breakpoint Heuristic Algorithm : résout la tarification capacitée là où toutes les méthodes exactes expirent, monte en charge jusqu'à 1 000 000 scénarios de demande à six prix en moins de 8 minutes, bat LAG (spécialiste capacité) d'un facteur 79× et CoBiT (spécialiste mixed-logit) d'un facteur jusqu'à 37 millions ×

Les algorithmes exacts sont beaux sur papier et incommodes en production. De vraies équipes de tarification ont besoin de réponses en quelques secondes, sur des instances avec contraintes de capacité, et d'une garantie de qualité qu'elles peuvent défendre en réunion.

Notre Breakpoint Heuristic Algorithm répond aux deux. Publié dans Computers & Operations Research, il résout le CPP capacité et non capacité avec un écart moyen sous 0,2 %, battant en vitesse et en qualité toute heuristique publiée pour cette classe de problèmes.

<0,2 %
écart d'optimalité moyen sur benchmarks capacités où toute méthode exacte expire
37 × 10⁶ ×
accélération maximale sur CoBiT, l'état de l'art publié pour la tarification ML-spécifique
79×
accélération minimale sur LAG, la précédente heuristique de tarification capacitée
1 000 000
scénarios de demande résolus à 6 prix en moins de 8 minutes

Le défi

Le problème de tarification capacité basé sur les choix (CPP), tarifer sous demande à choix discret quand les produits ont une capacité finie, est significativement plus difficile que son cousin non capacité. Ajouter la capacité détruit la totale unimodularité du knapsack par client, forçant le modèle à revenir en MILP : l'heuristique lagrangienne de Paneque et al. (2022) expire à 50 tirages et 4 prix, et le MILP exact ne gère que des instances jouets. Aucune des heuristiques existantes ne fonctionne sur toutes les classes de modèles.

Les praticiens ont besoin d'une heuristique unique et robuste qui marche sur toutes les classes de modèles, monte en charge sur des instances haute dimension, et leur donne une réponse défendable sur leur distance au vrai optimum.

Notre démarche

Nous avons étendu notre Breakpoint Exact Algorithm en régime heuristique : le BHA énumère les points de rupture le long d'un chemin de descente par coordonnées, acceptant des mouvements rapides quand ils améliorent l'objectif et contournant l'explosion combinatoire des méthodes exactes sur les instances multi-prix.

La capacité est gérée par une file de priorité exogène, une astuce propre et indépendante du modèle qui maintient le sous-problème interne linéaire et nous permet de réutiliser toute notre machinerie non capacité sans toucher à la logique d'énumération externe.

Nous avons combiné le BHA avec une recherche locale itérée pour échapper aux optima locaux ; la variante ILS résultante atteint tous les optima connus sur les benchmarks mixed-logit et trouve des solutions à revenu plus élevé que le BEA exact quand la méthode exacte expire.

Côté exact, nous avons conçu de nouvelles inégalités valides pour la formulation QCQP-L, accélérant notre Branch-and-Benders Decomposition ; le BHA sert aussi de warm-start de premier rang (accélérations totales jusqu'à 54 % à 10 % d'écart, selon la dimension).

Le résultat

Livrable : le Breakpoint Heuristic Algorithm et son extension Iterated Local Search, une heuristique rapide et scalable pour le problème de tarification capacité et non capacité basé sur les choix sous tout DCM à utilité linéaire en prix. Sur le benchmark de tarification parking avec capacités, le BHA livre un écart d'optimalité moyen sous 0,2 % sur toutes les instances complétées, et monte en charge jusqu'à 1 000 000 scénarios de demande à six prix en 439 secondes (~ 7,3 minutes) dans le cas non capacité.

Face à LAG (Paneque et al. 2022), la précédente heuristique CPP capacité, le BHA est au moins 79× plus rapide sur chaque classe d'instance testée. Face à CoBiT (Marandi et Lurkin 2023), le précédent état de l'art pour la tarification ML-spécifique, le BHA atteint jusqu'à 37-millions-× d'accélération (Tableau 12, R = 100 000) et l'extension ILS atteint chaque optimum connu. Nous avons aussi dérivé de nouvelles inégalités valides pour la Branch-and-Benders Decomposition spatiale de notre précédent article OR Spectrum, avec le BHA comme warm-start de premier rang — effet combiné jusqu'à 54 % d'accélération à 10 % d'écart d'optimalité. Publié en open access dans Computers & Operations Research, 2026.

Plongée technique

Le modèle derrière le résultat.

Le modèle

Ajouter des contraintes de capacité au problème de tarification basé sur les choix casse tout ce qui rendait le cas non capacité tractable. Le knapsack par client n'est plus totalement unimodulaire, donc la relaxation QCQP-L n'est plus entière, le problème redevient un MILP authentiquement combinatoire. Pire, quand un produit épuise sa capacité, le choix optimal de chaque client dépend du choix de tous les autres, ce qui signifie que l'astuce de mise à jour incrémentale du BEA échoue : l'objectif ne peut être évalué qu'après avoir assigné chaque client via la file de priorité. Le BHA est bâti autour de cette contrainte : garder l'énumération en points de rupture du BEA, mais ne l'utiliser que le long d'une dimension de prix à la fois, en évaluant l'objectif complet à chaque pas.

Variables du CPP capacité et contrainte de file de priorité. Les clients sont traités dans un ordre exogène (file de tickets, heure d'arrivée, priorité de segment, selon les besoins de l'application). Le nouveau binaire y_inr indique si l'alternative i est encore disponible quand le client n arrive en scénario r ; la famille de contraintes (f_inr, g_inr dans l'article) dit que y_inr bascule à 0 dès que les sélections cumulées de l'alternative i atteignent sa capacité c_i. Retirer la file de priorité et la remplacer par une inégalité de capacité globale permettrait au solveur de réordonner les clients de manière endogène, irréaliste et sous-estimant la volatilité du revenu.

Ce que coûte la capacité. Maintenant que ω est vraiment binaire, la bilinéarité p_i ω_inr doit être linéarisée avec des auxiliaires big-M (le MILP originel de Paneque et al.). La reformulation QCQP-L qui alimentait notre travail non capacité ne s'applique plus : la relaxation LP n'est pas entière, donc nous ne pouvons pas relâcher ω. Traduction : toute la chaîne algorithmique pricing1 (B&B spatial, B&BD, enveloppes de McCormick) s'effondre, et la seule approche exacte restante est le MILP, qui expire empiriquement à R ≥ 50.

Complexité du BEA capacité. Nous avons étendu le BEA en remplaçant sa mise à jour incrémentale par une passe d'allocation par file de priorité aux feuilles de l'arbre d'énumération. Ce correctif préserve la correction mais ajoute un facteur NRJ par niveau de récursion (nous devons considérer les J alternatives à chaque point de rupture, pas seulement une). Asymptotiquement : toujours polynomial en N et R, toujours exponentiel en J, mais la constante devant est significativement pire que la borne O(J!(NR)^J log NR) du cas non capacité.

Breakpoint Heuristic Algorithm : ascension par coordonnées sur le vecteur de prix, où chaque pas résout un BEA à un prix (la dimension où le BEA est bon marché, seulement NR points de rupture à évaluer, pas d'arbre de permutation). À l'itération t nous figeons tous les prix sauf j(t), énumérons les au plus NR + 2 prix candidats pour cette coordonnée sous l'état actuel de la file, évaluons l'objectif capacité complet à chaque candidat et choisissons le meilleur. Nous cyclons sur les dimensions jusqu'à ce que J passes consécutives de coordonnées ne produisent aucune amélioration.

Complexité effective du BHA. K est le nombre de cycles externes (empiriquement 5–20 sur les benchmarks), J le nombre de passes de coordonnées par cycle, NR le nombre de points de rupture par coordonnée, et NRJ le coût d'une évaluation de l'objectif par file de priorité. Le terme exponentiel en J qui écrase le BEA-cap exact a disparu, remplacé par un coût quadratique en (NR), ce qui explique pourquoi le BHA monte en charge là où la méthode exacte ne peut pas. Le prix : aucun certificat d'optimalité.

Enveloppe Iterated Local Search. Au lieu de muter la solution incumbente après chaque terminaison du BHA (ILS de manuel), nous élargissons le pas et relançons la recherche en ligne. C'est l'opérateur de perturbation : quand la recherche locale épuise le voisinage à petits pas, sauter à un plus grossier, ré-explorer, accepter sur amélioration. Continuer jusqu'à ce que δ dépasse Δ_max. Empiriquement cela ferme l'écart résiduel sur les benchmarks, ILS atteint tout optimum connu là où le BHA laisse ~0,04 % sur la table.

Méthode exacte guidée par l'heuristique. Nous injectons la solution du BHA dans notre Branch-and-Benders Decomposition spatial (non capacité) comme forte borne inférieure initiale, et nous en dérivons de nouvelles inégalités valides pour la formulation QCQP-L autour. Effet combiné sur le temps du B&BD pour atteindre 10 % d'écart d'optimalité : jusqu'à 54 % d'accélération à J = 4 (le régime où les méthodes exactes restent faisables). L'heuristique et la méthode exacte s'aident désormais mutuellement.

Quatre contributions algorithmiques en un article : le BEA capacité, le BHA, l'extension ILS, et le B&BD guidé par BHA avec de nouvelles inégalités valides. Le BHA est la clé de voûte, c'est l'algorithme qui passe en production, car il produit des solutions quasi optimales en temps tractable sur des instances à échelle réaliste hors de portée des méthodes exactes. La couche ILS est l'option à activer quand la qualité de solution compte plus que le temps d'exécution. Les inégalités valides et le guidage heuristique sont la manière dont le B&BD exact rivalise désormais avec les algorithmes mixed-logit spécialisés (CoBiT, LAG) sur leur terrain, et gagne, par des facteurs de 10⁴ – 10⁷.

Benchmark

Test 2 de l'article : tarification de parking capacité sur l'étude de cas d'Ibeas et al. (2014), N = 50 clients, capacités (20, 20) pour J = 2 et (15, 15, 15, 15) pour J = 4. Temps en secondes. MILP et BEA sont exacts (écart = 0) ; CMA-ES est une baseline générale par stratégie d'évolution ; BHA et ILS sont les nôtres. Sur chaque instance complétée, le BHA renvoie le même revenu que les méthodes exactes à 0,2 % près, et l'ILS atteint l'optimum exact.

RJMILPBEA (capacité)CMA-ESBHA (notre)ILS (notre)
2250,50,60,21,2
102173122,30,621
2523 22417483,6129
502> 5 h1 291188558
1002> 25 h9 914132512 793
2502> 45 h> 45 h1 08443516 357
104> 10 h> 10 h236517
1004> 45 h> 45 h1 69382834 963

Le MILP abandonne à R = 50 (limite 5 heures atteinte, écart de revenu > 8 % vs. vrai optimum). Le BEA porte la bannière exacte plus loin, résolvant R = 100, J = 2 en 2,75 heures, mais il est déjà deux ordres de grandeur plus lent que le BHA, qui finit la même instance en 51 secondes. À R = 250 même le BEA expire, alors que le BHA termine en 7 minutes. L'histoire à quatre prix est plus tranchée : toute méthode exacte échoue à R = 10, J = 4, mais le BHA renvoie des solutions quasi optimales sur toute la plage R = 10..200. CMA-ES est un test de cohérence utile, une métaheuristique respectée, mais 2–10× plus lent que le BHA et renvoie systématiquement 2–3 % de revenu en moins. Au-delà de ce test : le Tableau 6 de l'article montre le BHA résolvant J = 6, R = 1 000 000 en 439 secondes (sous 8 minutes) ; le Tableau 12 montre le BHA distançant le CoBiT spécifique mixed-logit avec des facteurs d'accélération de 3,5 × 10⁴ à 3,7 × 10⁶.

Tiré du dossier

Formulations 1 et 2 de l'article : la formulation QCQP-L qui a alimenté notre travail non capacité (à gauche) côtoie le MILP capacité (à droite). La version capacité ajoute les variables de disponibilité y_inr, les variables d'utilité escomptée υ_inr, et les contraintes de file de priorité (f_inr, g_inr). Notez l'ampleur du changement : quasiment chaque famille de contraintes s'étend, et la linéarisation big-M de la bilinéarité revient. C'est pourquoi le cas capacité est un problème algorithmique authentiquement différent, pas seulement le cas non capacité avec une inégalité de plus.
Formulations 1 et 2 de l'article : la formulation QCQP-L qui a alimenté notre travail non capacité (à gauche) côtoie le MILP capacité (à droite). La version capacité ajoute les variables de disponibilité y_inr, les variables d'utilité escomptée υ_inr, et les contraintes de file de priorité (f_inr, g_inr). Notez l'ampleur du changement : quasiment chaque famille de contraintes s'étend, et la linéarisation big-M de la bilinéarité revient. C'est pourquoi le cas capacité est un problème algorithmique authentiquement différent, pas seulement le cas non capacité avec une inégalité de plus.
Figure 1 de l'article : l'arbre d'énumération du BEA capacité pour trois clients simulés et deux alternatives tarifées. Chaque nœud est une configuration de prix partielle ; chaque branche correspond à fixer le prix de la coordonnée suivante à l'un des points de rupture client-scénario. La croissance exponentielle en J visible ici motive exactement le BHA : en faisant tourner un BEA 1D à la fois (au lieu d'un J-dimensionnel) nous parcourons un chemin racine-feuille par passe de coordonnée au lieu d'énumérer l'arbre complet.
Figure 1 de l'article : l'arbre d'énumération du BEA capacité pour trois clients simulés et deux alternatives tarifées. Chaque nœud est une configuration de prix partielle ; chaque branche correspond à fixer le prix de la coordonnée suivante à l'un des points de rupture client-scénario. La croissance exponentielle en J visible ici motive exactement le BHA : en faisant tourner un BEA 1D à la fois (au lieu d'un J-dimensionnel) nous parcourons un chemin racine-feuille par passe de coordonnée au lieu d'énumérer l'arbre complet.
Algorithmes 1–4 de l'article : le BEA non capacité (Algorithmes 1–2) et son extension capacité (Algorithmes 3–4). Le changement structurel est dans ‘enumerate_cap' : à chaque niveau de récursion il ne peut pas réutiliser les décisions client intermédiaires, car les interdépendances entre alternatives induites par la capacité signifient que l'objectif doit être ré-évalué de zéro via la file de priorité à chaque feuille. Ce facteur NRJ supplémentaire aux feuilles est ce qui donne le +1 dans l'exposant de la complexité du BEA capacité.
Algorithmes 1–4 de l'article : le BEA non capacité (Algorithmes 1–2) et son extension capacité (Algorithmes 3–4). Le changement structurel est dans ‘enumerate_cap' : à chaque niveau de récursion il ne peut pas réutiliser les décisions client intermédiaires, car les interdépendances entre alternatives induites par la capacité signifient que l'objectif doit être ré-évalué de zéro via la file de priorité à chaque feuille. Ce facteur NRJ supplémentaire aux feuilles est ce qui donne le +1 dans l'exposant de la complexité du BEA capacité.
Glossaire de la famille d'algorithmes. CPP est le problème de tarification basé sur les choix ; QCQP-L est la reformulation non convexe de notre travail antérieur ; BEA est l'algorithme exact ; BHA est la nouvelle heuristique ; ILS est son extension par recherche locale itérée ; B&B et B&BD sont les méthodes de branch-and-bound spatial utilisées pour les résolutions exactes non capacité. LAG (Paneque et al.) et CoBiT (Marandi et Lurkin) sont les heuristiques state-of-the-art antérieures pour les cadres capacité et mixed-logit respectivement, les algorithmes contre lesquels nous benchmarkons au Test 8.
Glossaire de la famille d'algorithmes. CPP est le problème de tarification basé sur les choix ; QCQP-L est la reformulation non convexe de notre travail antérieur ; BEA est l'algorithme exact ; BHA est la nouvelle heuristique ; ILS est son extension par recherche locale itérée ; B&B et B&BD sont les méthodes de branch-and-bound spatial utilisées pour les résolutions exactes non capacité. LAG (Paneque et al.) et CoBiT (Marandi et Lurkin) sont les heuristiques state-of-the-art antérieures pour les cadres capacité et mixed-logit respectivement, les algorithmes contre lesquels nous benchmarkons au Test 8.

Techniques

  • Recherche en points de rupture par ascension par coordonnées
  • Recherche locale itérée (pas adaptatif)
  • Gestion de capacité par file de priorité
  • Inégalités valides pour QCQP-L
  • Guidage heuristique pour B&BD spatial

Stack

  • Python
  • Gurobi 13
  • Julia (comparaison CoBiT)
  • Boucles internes C++

Un problème de ce type ?

Nous serions ravis d'en entendre parler.

contact@optimally.ch