<p>The implementation is based on the XZ+ZX method presented here: <a href="https://www.cs.nyu.edu/overton/papers/pdffiles/pdsdp.pdf">https://www.cs.nyu.edu/overton/papers/pdffiles/pdsdp.pdf</a></p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>&nbsp;&nbsp;<a href='https://github.com/mlpack/mlpack/pull/391'>https://github.com/mlpack/mlpack/pull/391</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>WIP: a compiling, but non-functioning primal-dual IP SDP solver</li>
  <li>WIP: a compiling test case</li>
  <li>WIP: hammer out a few bugs, still doesn&#39;t work</li>
  <li>WIP: fix a few more bugs</li>
  <li>add a check for dual feasibility</li>
  <li>WIP: commit missing data file</li>
  <li>restructure the primal-dual tests a bit</li>
  <li>error checking of initial matrices</li>
  <li>lovasz theta SDP test</li>
  <li>Add log chebyshev approx testcase</li>
  <li>add a comment on why the MVU test fails</li>
  <li>comment out MVU test case</li>
  <li>add correlation coeff sdp test from wiki</li>
  <li>minor cleanup of comments</li>
  <li>Add some comments/TODOs to the primal-dual implementation</li>
  <li>implement the mehrotra&#39;s predictor-corrector rule</li>
  <li>refactor KKT solver</li>
  <li>more refactoring</li>
  <li>sparse svec</li>
  <li>primal dual method now takes adv of sparse constraints</li>
  <li>use glibc constants</li>
  <li>make the SDP objective matrix type a template parameter</li>
  <li>iteration check is now iteration != maxIterations</li>
  <li>Port LR-SDP to use the new SDP problem object</li>
  <li>fix up PrimalDualSolver::Optimize() return value</li>
  <li>Merge remote-tracking branch &#39;mlpack/master&#39; into ip</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-0">src/mlpack/core/math/CMakeLists.txt</a>
    (1)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-1">src/mlpack/core/math/lin_alg.cpp</a>
    (89)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-2">src/mlpack/core/math/lin_alg.hpp</a>
    (46)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-3">src/mlpack/core/math/lin_alg_impl.hpp</a>
    (23)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-4">src/mlpack/core/optimizers/CMakeLists.txt</a>
    (2)
  </li>
  <li>
    <strong>D</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-5">src/mlpack/core/optimizers/lrsdp/CMakeLists.txt</a>
    (13)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-6">src/mlpack/core/optimizers/sdp/CMakeLists.txt</a>
    (17)
  </li>
  <li>
    <strong>R</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-7">src/mlpack/core/optimizers/sdp/lrsdp.hpp</a>
    (34)
  </li>
  <li>
    <strong>R</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-8">src/mlpack/core/optimizers/sdp/lrsdp_function.hpp</a>
    (118)
  </li>
  <li>
    <strong>R</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-9">src/mlpack/core/optimizers/sdp/lrsdp_function_impl.hpp</a>
    (159)
  </li>
  <li>
    <strong>R</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-10">src/mlpack/core/optimizers/sdp/lrsdp_impl.hpp</a>
    (26)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-11">src/mlpack/core/optimizers/sdp/primal_dual.hpp</a>
    (133)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-12">src/mlpack/core/optimizers/sdp/primal_dual_impl.hpp</a>
    (386)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-13">src/mlpack/core/optimizers/sdp/sdp.hpp</a>
    (116)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-14">src/mlpack/core/optimizers/sdp/sdp_impl.hpp</a>
    (71)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-15">src/mlpack/methods/matrix_completion/matrix_completion.cpp</a>
    (2)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-16">src/mlpack/methods/matrix_completion/matrix_completion.hpp</a>
    (9)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-17">src/mlpack/methods/mvu/mvu.cpp</a>
    (4)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-18">src/mlpack/tests/CMakeLists.txt</a>
    (1)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-19">src/mlpack/tests/data/r10.txt</a>
    (10)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-20">src/mlpack/tests/lin_alg_test.cpp</a>
    (99)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-21">src/mlpack/tests/lrsdp_test.cpp</a>
    (24)
  </li>
  <li>
    <strong>A</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-22">src/mlpack/tests/sdp_primal_dual_test.cpp</a>
    (635)
  </li>
  <li>
    <strong>M</strong>
    <a href="https://github.com/mlpack/mlpack/pull/391/files#diff-23">src/mlpack/tests/to_string_test.cpp</a>
    (4)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/mlpack/mlpack/pull/391.patch'>https://github.com/mlpack/mlpack/pull/391.patch</a></li>
  <li><a href='https://github.com/mlpack/mlpack/pull/391.diff'>https://github.com/mlpack/mlpack/pull/391.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">&mdash;<br>Reply to this email directly or <a href="https://github.com/mlpack/mlpack/pull/391">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AJ4bFOflpzPyqiWK1LFrtCeqRHolQLwEks5nkFUagaJpZM4DVljE.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
  <div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
    <link itemprop="url" href="https://github.com/mlpack/mlpack/pull/391"></link>
    <meta itemprop="name" content="View Pull Request"></meta>
  </div>
  <meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>