[mlpack-git] master: Add matrix sensing SDP test case (51c62b4)

gitdub at big.cc.gt.atl.ga.us gitdub at big.cc.gt.atl.ga.us
Thu Jan 29 00:33:39 EST 2015


Repository : https://github.com/mlpack/mlpack

On branch  : master
Link       : https://github.com/mlpack/mlpack/compare/9b55e5e4a300972d01cf1cf2802df8bf392a1fd1...b2575360e76877d7de615cd3d44b7f279565ce74

>---------------------------------------------------------------

commit 51c62b4fa75a7a78c15e77c5945fade7dc624370
Author: Stephen Tu <tu.stephenl at gmail.com>
Date:   Sat Jan 3 02:17:47 2015 -0800

    Add matrix sensing SDP test case


>---------------------------------------------------------------

51c62b4fa75a7a78c15e77c5945fade7dc624370
 src/mlpack/tests/data/sensing_b.csv | 200 ++++++++++++++++++++++++++++++++++++
 src/mlpack/tests/lrsdp_test.cpp     |  52 +++++++++-
 2 files changed, 251 insertions(+), 1 deletion(-)

diff --git a/src/mlpack/tests/data/sensing_b.csv b/src/mlpack/tests/data/sensing_b.csv
new file mode 100644
index 0000000..2feecf7
--- /dev/null
+++ b/src/mlpack/tests/data/sensing_b.csv
@@ -0,0 +1,200 @@
+9.081395313224642496e-02
+5.496290547715595304e-02
+-5.978396492894334779e-02
+-8.318462418584293694e-02
+-6.504039846256944035e-02
+-9.569472453322355743e-02
+-2.025122981294856794e-01
+2.131076746571983205e-02
+6.167304072637854601e-02
+-3.924128902897050519e-02
+-3.797312525102847225e-02
+-5.050157746113251994e-02
+1.050362514145872228e-02
+4.620850853612284981e-02
+-2.422402869699196160e-01
+-6.127683898245880889e-02
+-1.166554362291423175e-01
+1.008600301445260194e-02
+-1.528759460310894214e-01
+-4.000999067570142065e-03
+-1.193105763932560404e-01
+3.744886692744417434e-02
+-9.058905772468181516e-02
+-8.208779273096364348e-02
+1.228223554269697315e-01
+-4.175524080723477804e-02
+2.190778275186035240e-01
+2.144504158654786385e-01
+6.379964763754597534e-02
+4.565399989938209030e-02
+8.187642069580408632e-02
+-1.072377852730250908e-01
+-1.854327518442145106e-01
+-8.110483672613975903e-02
+1.435581658077208778e-01
+-2.709239831751772062e-02
+-9.551121327291063612e-02
+-3.315494515259661407e-02
+-3.692500396878713870e-02
+4.224292005724045174e-02
+1.312841369522142754e-02
+7.468507055024296848e-02
+-3.856985427606782202e-02
+7.335190262581009479e-02
+-7.542891281114669222e-02
+1.747120922809537735e-01
+1.703430031123153165e-01
+-8.523155089628646486e-02
+1.554690478089029160e-01
+2.765076350704358948e-02
+8.827053329820658267e-02
+5.964958461889534325e-02
+-6.109658215076061577e-02
+-1.479418353261361951e-01
+5.731337842017324158e-02
+1.739068476088502513e-01
+-1.996106876393613505e-02
+-1.777277669316208730e-02
+-8.305959643049466018e-03
+3.054846025671330567e-01
+-6.739759830980548982e-02
+5.878389966469857453e-02
+-1.741291165596102752e-01
+-8.393754736029350461e-02
+-4.206132456895162602e-02
+1.885158381733477440e-01
+1.053847852164714327e-01
+1.289273083327822644e-01
+-2.346054374256502373e-02
+5.265268614497967820e-02
+-2.423885240643807726e-01
+2.319661095268402140e-02
+2.359639948960082917e-02
+1.752607725973244490e-02
+-1.503487271171546902e-01
+-7.203245290855500582e-02
+-5.696971617344929323e-02
+7.157820297316913605e-02
+4.378764931044570874e-02
+1.293321367356864426e-02
+3.551896410945951099e-02
+1.920610486490098023e-01
+-9.475276251023698193e-02
+2.360343239635656343e-01
+3.340422177247134861e-02
+-3.104189773293585669e-02
+-1.681915011802187498e-01
+-1.422039486376053263e-01
+-1.387322293239038884e-01
+-6.419144627309769646e-02
+-1.722830396132977726e-01
+-9.941993737198064063e-02
+-1.249092733488415541e-01
+-5.502929083764306062e-02
+-4.582519474106976770e-02
+1.017201097221036715e-01
+-4.217682627440138415e-03
+-6.624740927819000591e-02
+4.139841572844826789e-02
+8.882437003641779905e-02
+-4.897510785393276861e-02
+-1.205647992307109645e-01
+9.271309765269339365e-02
+-4.105610468534735824e-02
+2.065136296157473184e-01
+-3.685709806706879976e-02
+-7.117436676976333920e-03
+-1.066984426195213484e-02
+-8.727370363153456878e-02
+-2.770243903600680055e-02
+-1.787673692133072978e-01
+-7.319040571473828943e-03
+-1.350136444589136175e-01
+-3.311779155207623601e-03
+4.439706973641981830e-02
+-8.378683158605627901e-02
+4.853524029971131165e-02
+-1.609625743622081773e-01
+-7.031511659289180205e-02
+-6.891040580171922669e-02
+7.934948131442576269e-02
+3.832505738905928744e-02
+-6.883069182151385634e-02
+-1.378537662168000111e-03
+7.360167881997223271e-02
+9.103191018381159849e-02
+1.841630064906071840e-02
+-4.864811562325987992e-02
+1.258973598298517294e-01
+-4.297559030185539586e-02
+1.322269114298557924e-01
+9.416949954904510478e-02
+-2.074694175808811936e-01
+1.666060691633691748e-01
+5.344853422627139639e-02
+-3.645031142218253112e-02
+-1.034467825579320488e-01
+-1.031196607424256229e-02
+7.177791243758024908e-02
+-1.075697785954092961e-01
+8.939722598057789349e-02
+-8.921896862757336399e-02
+-1.047469118790304854e-01
+3.690488517097132576e-02
+3.646717956645264408e-02
+1.337980455907619021e-02
+-5.488328883514304035e-03
+5.361366375439652332e-02
+1.591005522169769981e-01
+7.357991984289941056e-02
+-7.843436882752340134e-02
+1.942703137723723328e-01
+1.596651224450081619e-01
+-3.924096986411600152e-03
+1.408940755347300455e-01
+7.227261813414283254e-02
+-7.094500484454678568e-02
+3.930696749398474715e-03
+-3.397977559252277069e-02
+-7.388544596475785792e-03
+-5.992057700053260438e-02
+-1.510579371598718690e-01
+-1.379470031339805614e-01
+-5.261593507839751327e-02
+6.023499963736603235e-02
+-7.883428258451460890e-02
+-1.738241831022194206e-02
+-8.290923626461448037e-02
+7.308387981088999841e-02
+-1.272635294476711643e-01
+1.025087776629415304e-01
+2.384129253804601056e-04
+-8.344921271130432278e-03
+1.115069703579386895e-01
+4.844691960423992000e-02
+6.281184145789542317e-02
+-1.691077719588219286e-01
+4.399624898826870467e-02
+8.221100640365501533e-02
+9.480107559049072430e-03
+-5.425211354171427525e-02
+-1.549078210984185799e-01
+-1.800427025751281385e-01
+9.168373596307732853e-02
+-1.705928332426932120e-03
+6.592254894801898024e-02
+-5.884068201154245281e-03
+-2.228471161871336814e-01
+-8.218154184445411459e-02
+1.570734389656482377e-01
+3.145377994682267003e-02
+-2.395758109528924040e-02
+-2.426555342745301963e-02
+8.011395767131437862e-02
+1.092904430778265518e-01
+5.795393502615468762e-02
+-1.608321428975284864e-02
+-9.423958783023698993e-02
+-9.228500876565826072e-02
+-1.457744248191513159e-01
diff --git a/src/mlpack/tests/lrsdp_test.cpp b/src/mlpack/tests/lrsdp_test.cpp
index 4913b14..46187c6 100644
--- a/src/mlpack/tests/lrsdp_test.cpp
+++ b/src/mlpack/tests/lrsdp_test.cpp
@@ -118,7 +118,6 @@ BOOST_AUTO_TEST_CASE(Johnson844LovaszThetaSDP)
   }
 }
 
-
 /**
  * Create an unweighted graph laplacian from the edges.
  */
@@ -185,6 +184,57 @@ BOOST_AUTO_TEST_CASE(ErdosRenyiRandomGraphMaxCutSDP)
   BOOST_REQUIRE_CLOSE(finalValue, -3672.7, 1e-1);
 }
 
+BOOST_AUTO_TEST_CASE(GaussianMatrixSensingSDP)
+{
+  arma::mat Xorig, A, bmat;
+
+  data::Load("sensing_X.csv", Xorig, true, false);
+  data::Load("sensing_A.csv", A, true, false);
+  data::Load("sensing_b.csv", bmat, true, false);
+
+  arma::vec b = bmat;
+
+  const size_t m = Xorig.n_rows;
+  const size_t n = Xorig.n_cols;
+  const size_t p = b.n_elem;
+
+  assert(A.n_rows == p);
+  assert(A.n_cols == m * m);
+
+  float r = 0.5 + sqrt(0.25 + 2 * p);
+  if (ceil(r) > m + n)
+    r = m + n;
+
+  std::srand(0x0FAE8543);
+  arma::mat coordinates = arma::randu<arma::mat>(m + n, ceil(r));
+  std::srand(std::time(nullptr));
+
+  LRSDP sensing(0, p, coordinates);
+  sensing.SparseC().eye(m + n, m + n);
+  sensing.DenseB() = 2. * b;
+  for (size_t i = 0; i < p; ++i)
+  {
+    const auto rows = arma::span(0, m - 1);
+    const auto cols = arma::span(m, m + n - 1);
+    const auto Ai = arma::reshape(A.row(i), n, m);
+    sensing.DenseA()[i].zeros(m + n, m + n);
+    sensing.DenseA()[i](rows, cols) = trans(Ai);
+    sensing.DenseA()[i](cols, rows) = Ai;
+  }
+
+  double finalValue = sensing.Optimize(coordinates);
+  BOOST_REQUIRE_CLOSE(finalValue, 44.7550132629, 1e-1);
+
+  const arma::mat rrt = coordinates * trans(coordinates);
+  for (size_t i = 0; i < p; ++i)
+  {
+    const auto rows = arma::span(0, m - 1);
+    const auto cols = arma::span(m, m + n - 1);
+    const auto Ai = arma::reshape(A.row(i), n, m);
+    BOOST_REQUIRE_CLOSE(arma::dot(trans(Ai), rrt(rows, cols)), b(i), 1e-3);
+  }
+}
+
 /**
  * Test a nuclear norm minimization SDP.
  *



More information about the mlpack-git mailing list