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é.
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.
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é.
É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.
É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).
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).
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.
Voici la démarche, puis un exemple avec SciPy.
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
Choisir des projets sous budget : la règle du meilleur rapport est-elle optimale ? Comparez-la à la programmation dynamique.
Statistiques, finance quantitative, machine learning, deep learning, LLM, agents IA, MLOps : 321 épisodes avec des simulateurs à manipuler, pas des vidéos.
Statistics, quantitative finance, machine learning, deep learning, LLMs, AI agents, MLOps: 321 interactive episodes with simulators to play with, not videos.