as well, with an appropriate integer-capable solver.</p>
<p>To use CVX effectively, you need to know at least a bit about convex
optimization. For background on convex optimization, see the book
<aclass="reference external"href="http://www.stanford.edu/~boyd/cvxbook">Convex Optimization</a><aclass="reference internal"href="credits.html#bv04"id="id2">[BV04]</a> or the
<spanclass="target"id="index-3"></span><pid="index-4">Previous versions of CVX supported two free SQLP solvers,
<aclass="reference external"href="http://sedumi.ie.lehigh.edu">SeDuMi</a><aclass="reference internal"href="credits.html#stu99"id="id4">[Stu99]</a> and
<aclass="reference external"href="http://www.math.nus.edu.sg/~mattohkc/sdpt3.html">SDPT3</a><aclass="reference internal"href="credits.html#ttt03"id="id5">[TTT03]</a>. These
solvers are included with the CVX distribution. Starting with version 2.0,
CVX supports two <em>commercial</em> solvers as well,
<aclass="reference external"href="http://gurobi.com">Gurobi</a> and <aclass="reference external"href="http://mosek.com">MOSEK</a>. For
more information, see <aclass="reference internal"href="solver.html#solvers"><em>Solvers</em></a>.</p>
<p>The ability
to use CVX with commercial solvers is a new capability that we have decided
to include under a new CVX Professional license model. Academic users will
be able to utilize these features at no charge, but commercial users will require
a paid CVX Professional license. For more details, see <aclass="reference internal"href="#licensing"><em>Licensing</em></a>.</p>
<divclass="section"id="what-s-new">
<h3>What’s new?<aclass="headerlink"href="#what-s-new"title="Permalink to this headline">¶</a></h3>
<p>If you browse the source code and documentation,
you will find indications of support for Octave with CVX. However:</p>
<divclass="admonition note">
<pclass="first admonition-title">Note</p>
<pclass="last">Unfortunately, for average end users (this means you!), Octave
will <em>not</em> work. The <em>currently released</em> versions of Octave,
including versions 3.8.0 and earlier, do not
support CVX. Please do not waste your time by trying!</p>
</div>
<p>We are working hard with the Octave team on final updates
to bring CVX to Octave, and we anticipate version 3.8.1 or 3.9.0 will
be ready. We add this here to warn you <em>not</em> to interpret the mentions
of Octave in the code as a hidden code to try it yourself!</p>
<spanid="what-is-dcp"></span><spanid="index-5"></span><h2>What is disciplined convex programming?<aclass="headerlink"href="#what-is-disciplined-convex-programming"title="Permalink to this headline">¶</a></h2>
<p><em>Disciplined convex programming</em> is a methodology for constructing
convex optimization problems proposed by
Michael Grant, Stephen Boyd, and Yinyu Ye <aclass="reference internal"href="credits.html#gby06"id="id6">[GBY06]</a>, <aclass="reference internal"href="credits.html#gra04"id="id7">[Gra04]</a>.
It is meant to support the formulation and construction of optimization
problems that the user intends <em>from the outset</em> to be convex.</p>
<pid="index-6">Disciplined convex programming
imposes a set of conventions or rules, which we call <aclass="reference internal"href="dcp.html#dcp"><em>the DCP ruleset</em></a>.
Problems which adhere to the ruleset can be rapidly and automatically
verified as convex and converted to solvable form. Problems that violate
the ruleset are rejected—even when the problem is convex. That is not
to say that such problems cannot be solved using DCP; they just need to
be rewritten in a way that conforms to the DCP ruleset.</p>
<p>A detailed description of the DCP ruleset is given in <aclass="reference internal"href="dcp.html#dcp"><em>The DCP ruleset</em></a>.
It is extremely important for anyone who intends to
actively use CVX to understand it. The ruleset is simple to learn, and
is drawn from basic principles of convex analysis. In return for
accepting the restrictions imposed by the ruleset, we obtain
considerable benefits, such as automatic conversion of problems to
solvable form, and full support for nondifferentiable functions. In
practice, we have found that disciplined convex programs closely
resemble their natural mathematical forms.</p>
<divclass="section"id="mixed-integer-problems">
<spanid="what-is-midcp"></span><spanid="index-7"></span><h3>Mixed integer problems<aclass="headerlink"href="#mixed-integer-problems"title="Permalink to this headline">¶</a></h3>
<p>With version 2.0, CVX now supports <em>mixed integer</em> disciplined convex programs (MIDCPs).
A MIDCP is a model that obeys the same convexity rules as standard DCPs, except
that one or more of its variables is constrained to take on integral values. In other
words, if the integer constraints are removed, the result is a standard DCP.</p>
<p>Unlike a true DCP, a mixed integer problem is <em>not</em> convex. Finding the global optimum
requires the combination of a traditional convex optimization algorithm with an exhaustive
search such as a branch-and-bound algorithm. Some CVX solvers do not include this second
piece and therefore do not support MIDCPs; see <aclass="reference internal"href="solver.html#solvers"><em>Solvers</em></a> for more information.
What is more, even the best solvers cannot
guarantee that every moderately-sized MIDCP can be solved in a reasonable amount of time.</p>
<p>Mixed integer disciplined convex programming represents new territory for the
CVX modeling framework—and for the supporting solvers as well. While solvers
for mixed integer linear and quadratic programs (MILP/MIQP) are reasonably mature,
support for more general convex nonlinearities is a relatively new
development. We anticipate that MIDCP support will improve over time.</p>
</div>
</div>
<divclass="section"id="what-cvx-is-not">
<h2>What CVX is <em>not</em><aclass="headerlink"href="#what-cvx-is-not"title="Permalink to this headline">¶</a></h2>
<p>CVX is <em>not</em> meant to be a tool for checking if your problem is convex.
You need to know a bit about convex optimization to effectively use CVX;
otherwise you are the proverbial monkey at the typewriter, hoping to
(accidentally) type in a valid disciplined convex program. If you are
not certain that your problem is convex <em>before</em> you enter it into CVX,
you are using the tool improperly, and your efforts will likely fail.</p>
<p>CVX is <em>not</em> meant for very large problems, so if your problem is very
large (for example, a large image processing or machine learning problem), CVX is unlikely
to work well (or at all). For such problems you will likely need to
directly call a solver, or to develop your own methods, to get the
efficiency you need.</p>
<p>For such problems CVX can play an important role, however. Before
starting to develop a specialized large-scale method, you can use CVX to
solve scaled-down or simplified versions of the problem, to rapidly
experiment with exactly what problem you want to solve. For image
reconstruction, for example, you might use CVX to experiment with
different problem formulations on <spanclass="math">\(50 \times 50\)</span> pixel images.</p>
<p>CVX <em>will</em> solve many medium and large scale problems, provided they
have exploitable structure (such as sparsity), and you avoid <ttclass="docutils literal"><spanclass="pre">for</span></tt>
loops, which can be slow in Matlab, and functions like <ttclass="docutils literal"><spanclass="pre">log</span></tt> and <ttclass="docutils literal"><spanclass="pre">exp</span></tt> that
require successive approximation. If you encounter difficulties in
solving large problem instances, consider posting your model to the
<aclass="reference external"href="http://ask.cvxr.com">CVX Forum</a>; the CVX community
may be able to suggest an equivalent formulation that CVX
can process more efficiently.</p>
</div>
<divclass="section"id="licensing">
<spanid="index-8"></span><spanid="id8"></span><h2>Licensing<aclass="headerlink"href="#licensing"title="Permalink to this headline">¶</a></h2>
<p>CVX is free for use in both academic and commercial settings when paired with
a free solver—including the versions of SeDuMi and SDPT3 that are included with the
package.</p>
<p>With version 2.0, we have added the ability to connect CVX to <em>commercial</em> solvers as well.
This new functionality is released under a <em>CVX Professional</em> product tier
which we intend to license to commercial users for a fee, and offer to academic users
at no charge. The licensing structure is as follows:</p>
<ulclass="simple">
<li><em>All users</em> are free to use the standard features of CVX <em>at no charge</em>.
This includes the ability to construct and solve any of the models
supported by the free solvers SeDuMi and SDPT3.</li>
<li><em>Commercial users</em> who wish to solve CVX models using Gurobi or MOSEK will
need to purchase a CVX Professional license. Please send an email to
<aclass="reference external"href="mailto:sales%40cvxr.com">CVX Research</a> for inquiries.
for an availability schedule and pricing details.</li>
<li><em>Academic users</em> may utilize the CVX Professional capability <em>at no charge</em>.
To obtain an academic license, please visit the
<aclass="reference external"href="http://cvxr.com/cvx/academic">Academic licenses</a> page on the
CVX Research web site.</li>
</ul>
<p>The bulk of CVX remains open source under a slightly modified version of the GPL Version
2 license. A small number of files that support the CVX Professional functionality remain
closed source. If those files are removed, the modified package remains <em>fully functional</em>
using the free solvers, SeDuMi and SDPT3. Users
may freely modify, augment, and redistribute this free version of CVX, as long as all
modifications are themselves released under the same license. This includes adding support
for new solvers released under a free software license such as the GPL.
For more details, please see the full <aclass="reference internal"href="license.html#licensing2"><em>Licensing</em></a> section.</p>