CVXPY : écrire l'optimisation convexe comme le mathématicien l'énonce
CVXPY est un framework Python pour l'optimisation convexe qui convertit les problèmes de modélisation de haut niveau en programmes convexes disciplinés et aide à choisir des solveurs, à ajuster les contraintes et à valider les résultats numériques.
En bref
- De quoi s’agit-il ?
- Langage de modélisation embarqué dans Python qui traduit les problèmes convexes vers des solveurs comme Clarabel, SCS, OSQP et HiGHS ; CVXPY modélise, elle ne résout pas.
- À qui s’adresse-t-il ?
- CVXPY concerne les ingénieurs et chercheurs qui modélisent des problèmes convexes en Python, de l'ajustement de moindres carrés contraints aux programmes géométriques, et qui veulent garder une écriture proche des mathématiques avec accès aux valeurs duales. Elle ne concerne ni les problèmes non convexes qui exigent des heuristiques locales, ni qui cherche un solveur rapide à appeler tel quel : CVXPY modélise et délègue.
- Puis-je l’utiliser commercialement ?
- Oui. Apache-2.0 est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 2 jours.
- En quel langage est-il écrit ?
- Principalement C++, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 14 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Écrire le problème tel que les maths l'énoncent
CVXPY se présente comme un langage de modélisation pour l'optimisation convexe, embarqué dans Python, qui permet d'exprimer un problème en suivant les mathématiques plutôt que la forme standard restrictive exigée par les solveurs. L'exemple du README montre la grammaire : un cp.Variable de dimension n, un objectif cp.Minimize(cp.sum_squares(A @ x - b)) pour un least-squares, des contraintes 0 <= x, x <= 1 écrites telles quelles, puis un appel prob.solve(). L'outil rend ensuite trois étages de résultats : la valeur optimale de l'objectif, les valeurs de la variable dans x.value, et les multiplicateurs de Lagrange via constraint.dual_value. Cette proximité entre notation mathématique et code explique la longévité du projet, né comme sujet de recherche à l'université Stanford.
Un langage de modélisation, pas un solveur
Le README l'affirme sans détour : CVXPY n'est pas un solveur. Elle s'appuie sur les solveurs open source Clarabel, SCS, OSQP et HiGHS, livrés avec le paquet, tandis que d'autres solveurs restent disponibles mais doivent être installés séparément. Cette distinction structure l'usage : la qualité et la vitesse de résolution dépendent du solveur choisi, et le choix se règle selon la famille de problème et sa taille, la documentation dédiée aux solveurs servant d'arbitre. Les dépendances énoncées donnent d'ailleurs une idée des briques embarquées, avec des planchers de versions : Clarabel >= 0.5.0, OSQP >= 1.0.0, SCS >= 3.2.4.post1, highspy >= 1.11.0. Un utilisateur qui venait à remplacer le solveur par défaut garde donc son modèle intact, seul le moteur change.
Cinq familles de problèmes au catalogue
La liste des classes de problèmes modélisables dépasse le convexe pur : problèmes d'optimisation convexe, convexe mixte en nombres entiers, programmes géométriques, programmes quasi convexes et programmes non linéaires. Chaque famille mobilise des mécanismes différents du langage, la convexité disciplinée servant de colonne vertébrale, comme le suggère la question type renvoyée vers StackOverflow, pourquoi mon problème n'est-il pas DCP. Cette étendue distingue CVXPY d'un simple enrobage de solveur linéaire : un même vocabulaire de variables, contraintes et objectifs couvre du placement de portefeuille au dimensionnement de circuits en passant par l'approximation quasi convexe. Le dépôt, écrit majoritairement en C++ côté moteur, pèse 6 314 étoiles et 193 tickets ouverts.
Installation : Python 3.11 et NumPy 2.0 comme planchers
Le paquet s'installe depuis PyPI par pip install cvxpy, ou via conda par conda install -c conda-forge cvxpy. La liste des dépendances impose des planchers à noter pour les environnements anciens : Python >= 3.11, NumPy >= 2.0.0, SciPy >= 1.13.0, en plus des solveurs déjà cités et de sparsediffpy >= 0.2.2. Ces planchers signent une bibliothèque qui suit le rythme de l'écosystème scientifique Python, ce qui exclut de fait les distributions professionnelles figées sur des versions antérieures. Le guide d'installation détaillé sur cvxpy.org couvre les cas particuliers, et le canal Discord annoncé dans le README prend le relais pour les questions d'installation qui dépassent la doc.
De Stanford à un projet gouverné en commun
Le projet assume son histoire : né comme recherche à l'université Stanford, il se développe aujourd'hui entre de nombreuses institutions et pays. La section Team nomme les mainteneurs actuels, Steven Diamond, Akshay Agrawal, Riley Murray, Philipp Schiele, Bartolomeo Stellato et Parth Nobel, et remercie une liste non exhaustive de contributeurs historiques parmi lesquels Stephen Boyd, dont les travaux fondateurs sur la programmation convexe éclairent la généalogie. Un document de gouvernance hébergé dans l'organisation cvxpy décrit les processus. Pour l'usage académique, le README demande de citer les publications associées, page Citing à l'appui ; pour l'usage industriel, l'équipe invite à se signaler sur Discord ou par email.
Benchmarks publics et secours communautaires balisés
Le README oriente chaque type de demande vers un canal distinct, à la manière d'un projet qui a déjà absorbé des milliers de tickets. Les problèmes de correction, documentation, performance et demandes de fonctionnalités passent par le traqueur GitHub ; les questions d'usage élémentaires, dont l'exemple canonique est le fameux problème non DCP, partent vers StackOverflow ; la conversation en temps réel vit sur Discord et les discussions longues sur GitHub Discussions. Les performances se jugent sur un site de benchmarks séparé, cvxpy.github.io/benchmarks, alimenté en partie par des contributions du dépôt cvxpy/benchmarks, un point d'entrée utile avant de choisir un solveur. La contribution, elle, ne suppose aucune expertise en optimisation convexe : documentation, bibliothèque d'exemples et tickets étiquetés help wanted servent de portes d'entrée.
Conclusion éditoriale
CVXPY concerne les ingénieurs et chercheurs qui modélisent des problèmes convexes en Python, de l'ajustement de moindres carrés contraints aux programmes géométriques, et qui veulent garder une écriture proche des mathématiques avec accès aux valeurs duales. Elle ne concerne ni les problèmes non convexes qui exigent des heuristiques locales, ni qui cherche un solveur rapide à appeler tel quel : CVXPY modélise et délègue. Avant de l'adopter, installez-la par pip install cvxpy, rejouez l'exemple least-squares du README avec ses contraintes 0 <= x, x <= 1, vérifiez que x.value et constraints[0].dual_value retrouvent les valeurs attendues, puis comparez les solveurs disponibles sur cvxpy.github.io/benchmarks pour votre taille de problème.
Notes de la communauté