RECHERCHE OPÉRATIONNELLE

Prenez les meilleures décisions
sous toutes vos contraintes.

  • Maximisation ou minimisation d'un objectif mesurable
  • Respect strict de vos règles métier et capacités
  • Résultats actionnables en quelques secondes
  • Adaptable à chaque changement de contexte opérationnel
Voir notre approche
optimizer.py
from pulp import *

# ── Exemple : allocation budgétaire ──────────────────────────
# 4 canaux marketing, budget total = 100 000 €
canaux  = ["SEA", "Social", "Email", "Display"]
retours = [4.2,   3.8,     5.1,     2.9]        # ROI estimé
budgets_min = [5000, 3000, 1000, 0]              # planchers
budgets_max = [50000, 40000, 20000, 30000]       # plafonds

prob = LpProblem("budget_marketing", LpMaximize)

# Variables de décision
x = [LpVariable(f"x_{c}", budgets_min[i], budgets_max[i])
     for i, c in enumerate(canaux)]

# Objectif : maximiser le ROI total
prob += lpSum(retours[i] * x[i] for i in range(4))

# Contrainte : budget global
prob += lpSum(x) <= 100_000

# Résolution
prob.solve(PULP_CBC_CMD(msg=0))

for i, c in enumerate(canaux):
    print(f"{c:8s} → {value(x[i]):>8,.0f} €")
# SEA      →   50 000 €
# Email    →   20 000 €
# Social   →   27 000 €
# Display  →    3 000 €
C'est quoi ?

La programmation linéaire,
une réponse mathématique
à vos arbitrages.

Dans toute organisation, des dizaines de décisions sont prises chaque jour en équilibrant des objectifs contradictoires : coûts vs qualité, rapidité vs capacité, marge vs satisfaction client. L'optimisation sous contrainte transforme ces arbitrages en un problème mathématique que l'ordinateur résout de manière provably optimale.

Avec PuLP — la librairie Python de référence pour la programmation linéaire en nombres entiers (ILP) — nous modélisons précisément vos variables de décision, votre fonction objectif et l'ensemble de vos contraintes métier. Le solveur CBC (ou Gurobi pour les problèmes industriels) trouve alors la solution globalement optimale en quelques millisecondes.

x₁ x₂ C₁ C₂ C₃ Optimal z* = 18 420 0 Région admissible
Résultats mesurés

L'optimisation qui change l'opérationnel.

−25%

de coûts opérationnels en moyenne

×10

plus rapide qu'une optimisation manuelle

100%

des contraintes métier respectées

Stack technique

PuLP, OR-Tools, Gurobi :
le bon outil pour chaque problème.

Py

PuLP

Programmation Linéaire

La librairie Python open-source de référence pour formuler des problèmes LP et ILP. Syntaxe intuitive, intégration native avec les solveurs CBC, GLPK, CPLEX et Gurobi. Idéale pour 95% des problèmes d'entreprise.

  • Variables continues, entières et binaires
  • Contraintes d'égalité et d'inégalité
  • Interface unifiée multi-solveurs
  • Compatible pandas & numpy

OR-Tools

Google — Combinatoire

La suite Google pour les problèmes combinatoires complexes : VRP (tournées), scheduling, bin packing. Plus puissant que PuLP sur les espaces de solutions discrets de grande taille.

Gurobi

Industriel — Large échelle

Le solveur commercial le plus performant du marché. Utilisé pour les problèmes MIP à plusieurs milliers de variables. Jusqu'à 100× plus rapide que CBC sur les instances industrielles.

Scipy Optimize

Continu — Non-linéaire

Pour les fonctions objectives non-linéaires (quadratiques, convexes) : minimisation sous contraintes avec SLSQP, L-BFGS-B. Intégré nativement à l'écosystème scientifique Python.

Cas d'usage

Où l'optimisation transforme l'opérationnel.

Planification de tournées & logistique

Minimisez distances, coûts carburant et nombre de véhicules avec OR-Tools VRP. Fenêtres horaires, capacités, priorités clients — optimal en quelques secondes.

Gestion des stocks & réapprovisionnement

Quantités optimales à commander par SKU avec PuLP : coûts de stockage, minimums fournisseurs, prévisions de demande. Réduction moyenne de 20% des coûts de stock.

Planification RH & affectation de ressources

Plannings optimaux en ILP : équilibre charge, compétences, contraintes légales (convention collective) et préférences collaborateurs. Déploiement RH ou SIRH.

Pricing & allocation budgétaire

Maximisez votre marge ou votre part de marché sous contrainte de budget, de capacité de production et de positionnement concurrentiel.

Notre méthodologie

De votre problème métier au modèle en production.

01

Modélisation du problème

On commence par formaliser votre problème : quelle est la variable à optimiser ? Quelles sont les contraintes non négociables (capacités, délais, coûts fixes) ? Cette étape de traduction mathématique est clé pour obtenir un modèle fidèle à votre réalité opérationnelle.

02

Implémentation avec PuLP & Python

Nous développons le modèle en Python avec PuLP (ou OR-Tools, Gurobi selon la complexité). La logique métier est encodée sous forme de variables de décision, de fonction objectif et de contraintes linéaires — le tout testé sur vos données réelles.

03

Intégration & pilotage en continu

Le solveur est intégré dans votre stack (API, dashboard, ERP). Chaque changement de paramètre — nouvelles commandes, absences, ruptures — relance une optimisation en temps réel, sans intervention manuelle.