[sdpb] 100/233: Now allowing individual sample points, scalings, bilinear basis for each matrix

Tobias Hansen thansen at moszumanska.debian.org
Thu Mar 9 04:06:25 UTC 2017


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository sdpb.

commit 4b27ad018347a35016b7a2addb3ed8bbf8acf5d1
Author: David Simmons-Duffin <dsd at minerva.sns.ias.edu>
Date:   Tue Oct 28 00:12:17 2014 -0400

    Now allowing individual sample points, scalings, bilinear basis for each matrix
---
 src/Polynomial.h               | 25 -------------------------
 src/SDP.cpp                    | 28 +++++++++++-----------------
 src/SDP.h                      | 37 +++++++++++++++++++++++++++++--------
 src/mpack/Rpotf2Stabilized.cpp |  6 +-----
 src/parse.cpp                  | 26 +++++++++++++-------------
 5 files changed, 54 insertions(+), 68 deletions(-)

diff --git a/src/Polynomial.h b/src/Polynomial.h
index 112c70e..4862fb7 100644
--- a/src/Polynomial.h
+++ b/src/Polynomial.h
@@ -38,29 +38,4 @@ public:
 
 };
 
-class PolynomialVectorMatrix {
-public:
-  int rows;
-  int cols;
-  vector<vector<Polynomial> > elements;
-
-  inline const vector<Polynomial>& elt(const int r, const int c) const {
-    return elements[r + c*rows];
-  }
-
-  inline vector<Polynomial>& elt(const int r, const int c) {
-    return elements[r + c*rows];
-  }
-
-  int degree() const {
-    int d = 0;
-    for (vector<vector<Polynomial> >::const_iterator e = elements.begin(); e != elements.end(); e++)
-      for (vector<Polynomial>::const_iterator p = e->begin(); p != e->end(); p++)
-        d = max(p->degree(), d);
-    return d;
-  }
-
-};
-
-
 #endif  // SDP_BOOTSTRAP_POLYNOMIAL_H_
diff --git a/src/SDP.cpp b/src/SDP.cpp
index 546f205..09dcea7 100644
--- a/src/SDP.cpp
+++ b/src/SDP.cpp
@@ -15,10 +15,7 @@ Matrix sampleBilinearBasis(const int maxDegree,
   return b;
 }
 
-SampledMatrixPolynomial samplePolynomialVectorMatrix(const PolynomialVectorMatrix &m,
-                                                     const vector<Polynomial> &bilinearBasis,
-                                                     const vector<Real> &samplePoints,
-                                                     const vector<Real> &sampleScalings) {
+SampledMatrixPolynomial samplePolynomialVectorMatrix(const PolynomialVectorMatrix &m) {
   SampledMatrixPolynomial s;
 
   assert(m.rows == m.cols);
@@ -39,8 +36,8 @@ SampledMatrixPolynomial samplePolynomialVectorMatrix(const PolynomialVectorMatri
   for (int c = 0; c < s.dim; c++) {
     for (int r = c; r < s.dim; r++) {
       for (int k = 0; k < numSamples; k++) {
-        Real x     = samplePoints[k];
-        Real scale = sampleScalings[k];
+        Real x     = m.samplePoints[k];
+        Real scale = m.sampleScalings[k];
 
         s.constraintConstants[p] = scale*m.elt(r,c)[0](x);
         for (int n = 1; n < vectorDim; n++)
@@ -52,14 +49,14 @@ SampledMatrixPolynomial samplePolynomialVectorMatrix(const PolynomialVectorMatri
   }
 
   int delta1 = s.degree/2;
-  s.bilinearBases.push_back(sampleBilinearBasis(delta1, numSamples, bilinearBasis,
-                                                samplePoints,
-                                                sampleScalings));
+  s.bilinearBases.push_back(sampleBilinearBasis(delta1, numSamples, m.bilinearBasis,
+                                                m.samplePoints,
+                                                m.sampleScalings));
   int delta2 = (s.degree - 1)/2;
   if (delta2 >= 0)
-    s.bilinearBases.push_back(sampleBilinearBasis(delta2, numSamples, bilinearBasis,
-                                                  samplePoints,
-                                                  multiplyVectors(samplePoints, sampleScalings)));
+    s.bilinearBases.push_back(sampleBilinearBasis(delta2, numSamples, m.bilinearBasis,
+                                                  m.samplePoints,
+                                                  multiplyVectors(m.samplePoints, m.sampleScalings)));
 
   return s;
       
@@ -109,14 +106,11 @@ SDP bootstrapSDP(const Vector &objective,
 }
 
 SDP bootstrapPolynomialSDP(const Vector &affineObjective,
-                           const vector<PolynomialVectorMatrix> &polVectorMatrices,
-                           const vector<Polynomial> &bilinearBasis,
-                           const vector<Real> &samplePoints,
-                           const vector<Real> &sampleScalings) {
+                           const vector<PolynomialVectorMatrix> &polVectorMatrices) {
   vector<SampledMatrixPolynomial> sampledMatrixPols;
   for (vector<PolynomialVectorMatrix>::const_iterator m = polVectorMatrices.begin();
        m != polVectorMatrices.end(); m++)
-    sampledMatrixPols.push_back(samplePolynomialVectorMatrix(*m, bilinearBasis, samplePoints, sampleScalings));
+    sampledMatrixPols.push_back(samplePolynomialVectorMatrix(*m));
 
   Vector objective = affineObjective;
   objective.erase(objective.begin());
diff --git a/src/SDP.h b/src/SDP.h
index 7ca9957..35d64d5 100644
--- a/src/SDP.h
+++ b/src/SDP.h
@@ -98,19 +98,40 @@ public:
   vector<Matrix> bilinearBases;
 };
 
-SampledMatrixPolynomial samplePolynomialVectorMatrix(const PolynomialVectorMatrix &m,
-                                                     const vector<Polynomial> &bilinearBasis,
-                                                     const vector<Real> &samplePoints,
-                                                     const vector<Real> &rescalings);
+class PolynomialVectorMatrix {
+public:
+  int rows;
+  int cols;
+  vector<vector<Polynomial> > elements;
+  vector<Real> samplePoints;
+  vector<Real> sampleScalings;
+  vector<Polynomial> bilinearBasis;
+
+  inline const vector<Polynomial>& elt(const int r, const int c) const {
+    return elements[r + c*rows];
+  }
+
+  inline vector<Polynomial>& elt(const int r, const int c) {
+    return elements[r + c*rows];
+  }
+
+  int degree() const {
+    int d = 0;
+    for (vector<vector<Polynomial> >::const_iterator e = elements.begin(); e != elements.end(); e++)
+      for (vector<Polynomial>::const_iterator p = e->begin(); p != e->end(); p++)
+        d = max(p->degree(), d);
+    return d;
+  }
+
+};
+
+SampledMatrixPolynomial samplePolynomialVectorMatrix(const PolynomialVectorMatrix &m);
 
 SDP bootstrapSDP(const Vector &objective,
                  const Real &objectiveConst,
                  const vector<SampledMatrixPolynomial> &sampledMatrixPols);
 
 SDP bootstrapPolynomialSDP(const Vector &affineObjective,
-                           const vector<PolynomialVectorMatrix> &polVectorMatrices,
-                           const vector<Polynomial> &bilinearBasis,
-                           const vector<Real> &samplePoints,
-                           const vector<Real> &sampleScalings);
+                           const vector<PolynomialVectorMatrix> &polVectorMatrices);
 
 #endif  // SDP_BOOTSTRAP_SDP_H_
diff --git a/src/mpack/Rpotf2Stabilized.cpp b/src/mpack/Rpotf2Stabilized.cpp
index e4f5e47..065f0ed 100644
--- a/src/mpack/Rpotf2Stabilized.cpp
+++ b/src/mpack/Rpotf2Stabilized.cpp
@@ -70,12 +70,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <vector>
 #include <assert.h>
-#include <iostream>
 
-using std::cout;
-using std::endl;
-
-const double CHOLESKY_STABILIZE_THRESHOLD = 1e-10;
+const double CHOLESKY_STABILIZE_THRESHOLD = 1e-60;
 
 REAL lambdaGeometricMean(double totalLogLambda, INTEGER numLambdas) {
   assert(numLambdas != 0);
diff --git a/src/parse.cpp b/src/parse.cpp
index 088a0b4..64801b1 100644
--- a/src/parse.cpp
+++ b/src/parse.cpp
@@ -52,22 +52,25 @@ SampledMatrixPolynomial parseSampledMatrixPolynomial(XMLElement *xml) {
   return s;
 }
 
-Polynomial parsePolynomial(XMLElement *polXml) {
+Polynomial parsePolynomial(XMLElement *xml) {
   Polynomial p;
-  p.coefficients = parseMany("coeff", parseReal, polXml);
+  p.coefficients = parseMany("coeff", parseReal, xml);
   return p;
 }
 
-vector<Polynomial> parsePolynomialVector(XMLElement *polVecXml) {
-  return parseMany("polynomial", parsePolynomial, polVecXml);
+vector<Polynomial> parsePolynomialVector(XMLElement *xml) {
+  return parseMany("polynomial", parsePolynomial, xml);
 }
 
-PolynomialVectorMatrix parsePolynomialVectorMatrix(XMLElement *polVecMatrixXml) {
+PolynomialVectorMatrix parsePolynomialVectorMatrix(XMLElement *xml) {
   PolynomialVectorMatrix m;
-  m.rows = parseInt(polVecMatrixXml->FirstChildElement("rows"));
-  m.cols = parseInt(polVecMatrixXml->FirstChildElement("cols"));
-  m.elements = parseMany("polynomialVector", parsePolynomialVector,
-                         polVecMatrixXml->FirstChildElement("elements"));
+  m.rows           = parseInt(xml->FirstChildElement("rows"));
+  m.cols           = parseInt(xml->FirstChildElement("cols"));
+  m.elements       = parseMany("polynomialVector", parsePolynomialVector,
+                               xml->FirstChildElement("elements"));
+  m.samplePoints   = parseVector(xml->FirstChildElement("samplePoints"));
+  m.sampleScalings = parseVector(xml->FirstChildElement("sampleScalings"));
+  m.bilinearBasis  = parsePolynomialVector(xml->FirstChildElement("bilinearBasis"));
   return m;
 }
 
@@ -83,10 +86,7 @@ SDP parseBootstrapPolynomialSDP(XMLElement *xml) {
   return bootstrapPolynomialSDP(parseVector(xml->FirstChildElement("objective")),
                                 parseMany("polynomialVectorMatrix",
                                           parsePolynomialVectorMatrix,
-                                          xml->FirstChildElement("polynomialVectorMatrices")),
-                                parsePolynomialVector(xml->FirstChildElement("bilinearBasis")),
-                                parseVector(xml->FirstChildElement("samplePoints")),
-                                parseVector(xml->FirstChildElement("sampleScalings")));
+                                          xml->FirstChildElement("polynomialVectorMatrices")));
 }
 
 SDP readBootstrapSDP(const path sdpFile) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/sdpb.git



More information about the debian-science-commits mailing list