DataManip Insights ÉPISODE 1Optimisation & Aide à la décisionGratuit
🧮 Épisode 1 · Programmation linéaire

« On plafonne le CO₂ de 22 %. »
Combien ça coûte ? Le solveur le sait, au centime près.

Choisir combien produire sur chaque centrale pour couvrir la demande au moindre coût, sous contraintes de capacité et d'émissions : c'est un programme linéaire. Sa solution se trouve à un sommet du domaine admissible, et chaque contrainte saturée a un prix implicite, le coût de la relâcher d'une unité.

🎯 L'analogie clé

Un budget de fonctionnement avec un plafond : le prix implicite du plafond, c'est ce que vous gagneriez en le relevant d'un euro. Le solveur le calcule pour chaque plafond.

Le principe

Une fonction de coût,
des contraintes, un sommet.

Minimiser un coût linéaire sous des contraintes linéaires : l'optimum est toujours à un sommet du polyèdre admissible. Au sommet, certaines contraintes sont saturées (égalités). Leur prix implicite, ou prix dual, dit de combien le coût baisserait si on les relâchait d'une unité.

🎯
Fonction objectif
Le coût total à minimiser : somme des coûts unitaires fois les productions.
🚧
Contraintes
Capacité de chaque centrale, demande à satisfaire, plafond d'émissions. Elles dessinent le domaine admissible.
💶
Prix dual
Pour chaque contrainte saturée : le coût marginal de la relâcher. Un plafond de CO₂ a un prix en euros par tonne.
Le point clé : la solution d'un programme linéaire ne dit pas seulement quoi faire, elle chiffre chaque contrainte. C'est la base du prix implicite du carbone et du coût marginal d'une demande supplémentaire.
À vous de manipuler

Quatre moyens de production,
un plafond de CO₂.

Éolien (8 €/MWh, 0 t, disponibilité réglable), charbon (35 €/MWh, 0,95 t/MWh, 500 MW), gaz (75 €/MWh, 0,40 t/MWh, 600 MW), fioul (160 €/MWh, 0,70 t/MWh, 300 MW). On choisit demande, vent et plafond d'émissions : le programme est résolu en énumérant les sommets du domaine admissible.

Dispatch au moindre coût
Production par moyen (MW), sans plafond et avec le plafond choisi

Énumération exacte des sommets, sans bibliothèque. Les prix implicites sont mesurés en relâchant la contrainte d'une unité (1 t/h de CO₂, 1 MW de demande).

Coût du dispatch
-
Émissions
-
t/h
Prix implicite du CO₂
-
€ par tonne en moins autorisée
Coût marginal de la demande
-
€ par MWh supplémentaire
À retenir : pour 1 000 MW, 250 MW de vent et un plafond de 450 t/h, le dispatch coûte 47 341 €/h (charbon 273, gaz 477, fioul 0). Sans plafond : 38 250 €/h et 575 t/h. Réduire les émissions de 22 % coûte donc 9 091 €/h (+24 %), soit 72,7 € par tonne évitée, exactement l'écart entre gaz et charbon rapporté à leurs émissions.
Le prix n'est pas constant

Plus le plafond se resserre,
plus la tonne coûte cher.

On fait varier le plafond de CO₂ pour la demande et le vent choisis plus haut. Le coût total est une courbe linéaire par morceaux : sa pente est le prix implicite, qui augmente à chaque changement de moyen marginal (charbon vers gaz, gaz vers fioul).

Coût total selon le plafond de CO₂
Coût total (€/h) selon le plafond (le point est le réglage actuel)

Pour la demande et le vent choisis dans le simulateur du dessus. À l'extrême gauche, la demande ne peut plus être satisfaite : la courbe s'arrête.

Plafond 575 t/h (inactif)
-
€/h
Plafond 450 t/h
-
€/h
Plafond 400 t/h
-
€/h
Plafond 350 t/h
-
€/h
Le point clé : à 1 000 MW et 250 MW de vent, passer de 450 à 400 t/h coûte 3 636 €/h de plus (72,7 € par tonne évitée), mais de 400 à 350 t/h, 17 523 €/h de plus (350 € par tonne en moyenne, jusqu'à 500 € en bout de course). Sous 345 t/h, il n'existe plus aucune solution.
En pratique

Quatre réflexes
pour modéliser un programme linéaire.

Voici la démarche, puis un exemple avec SciPy.

📝
Écrivez les contraintes en clair
Demande, capacités, plafond : une ligne chacune, avec son unité.
💶
Lisez les prix duaux
Ils chiffrent chaque contrainte saturée. Une contrainte à prix nul n'a pas d'effet.
🚫
Testez l'infaisabilité
Un plafond trop bas ne donne pas un mauvais résultat mais aucun : traitez ce cas explicitement.
🧮
Vérifiez à la main
Sur un cas simple, retrouvez le résultat par un raisonnement d'ordre de mérite avant de faire confiance au solveur.
Python · dispatch_lp.py
from scipy.optimize import linprog

# variables : charbon, gaz, fioul (MW) ; le vent (250 MW) est pris d'abord
cout = [35, 75, 160]
emis = [0.95, 0.40, 0.70]
reste = 1000 - 250

res = linprog(
    c=cout,
    A_ub=[emis, [-1, -1, -1]],     # CO2 <= plafond ; production >= reste
    b_ub=[450, -reste],
    bounds=[(0, 500), (0, 600), (0, 300)],
    method="highs",
)
print(res.x, res.fun + 8 * 250)
print(res.ineqlin.marginals)             # prix duals : CO2 environ -72,7 €/t
Test rapide

Vérifiez votre compréhension.

À l'optimum, un plafond de CO₂ est saturé avec un prix implicite de 72,7 €/t. Que signifie ce chiffre ?

Ce qu'il faut retenir

Épisode suivant

Le sac à dos : glouton ou optimal ?

Choisir des projets sous budget : la règle du meilleur rapport est-elle optimale ? Comparez-la à la programmation dynamique.

ACCÈS COMPLET

Cet épisode est gratuit. Les 282 autres t'attendent.

Statistiques, finance quantitative, machine learning, deep learning, LLM, agents IA, MLOps : 321 épisodes avec des simulateurs à manipuler, pas des vidéos.

99 € (+ TVA selon le pays) · accès à vie · remboursement possible sous 7 jours
Débloquer les 282 épisodes · 99 € J'ai déjà une clé de licence
FULL ACCESS

This episode is free. The other 282 are waiting for you.

Statistics, quantitative finance, machine learning, deep learning, LLMs, AI agents, MLOps: 321 interactive episodes with simulators to play with, not videos.

€99 (+ VAT depending on country) · lifetime access · 7-day refund
Unlock the 282 episodes · €99 I already have a license key