# jemdoc: menu{MENU}{dcp.html},showsource,addcss{mcg.css}
= Disciplined convex programming
Convex programming unifies and generalizes least squares (LS), linear programming
(LP), and quadratic programming (QP). It has received considerable attention
recently for a number of reasons: its attractive theoretical properties;
the development of efficient, reliable numerical algorithms; and the discovery
of a wide variety of applications in both scientific and non-scientific fields.
Courses devoted entirely to convex programming are available at Stanford and elsewhere.
For these reasons, convex programming has the potential to become a ubiquitous
numerical technology alongside LS, LP, and QP. Nevertheless, there remains a
significant impediment to its more widespread adoption: the high level of
expertise in both convex analysis and numerical algorithms required to use it.
For potential users whose focus is the application, this prerequisite poses a
formidable barrier, especially if it is not yet certain that the outcome will
be better than with other methods. We have developed a modeling methodology
called disciplined convex programming with the goal of lowering this barrier.
As its name suggests, disciplined convex programming imposes a set of conventions
to follow when constructing problems. Compliant problems are called, appropriately,
disciplined convex programs, or DCPs. The conventions are simple and teachable,
taken from basic principles of convex analysis, and inspired by the practices of
experts who regularly study and apply convex optimization today. The conventions
do not limit generality; but they do allow the steps required to solve DCPs to
be automated and enhanced. For instance, determining if an arbitrary mathematical
program is convex is an intractable task, but determining if that same problem is
a DCP is straightforward. A number of common numerical methods for optimization can
be adapted to solve DCPs. The conversion of DCPs to solvable form can be fully
automated, and the natural problem structure in DCPs can be exploited to improve performance.
Disciplined convex programming also provides a framework for collaboration
between users with different levels of expertise. In short, disciplined
convex programming allows applications-oriented users to focus on modeling,
and---as they would with LS, LP, and QP---to leave the underlying mathematical details to experts.