[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