[sdpb] 82/233: Added ability to independently set initialMatrixScale for primal and dual

Tobias Hansen thansen at moszumanska.debian.org
Thu Mar 9 04:06:22 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 a1a8833c08da587a74a8c5a46a4a7d9928f16cd8
Author: David Simmons-Duffin <dsd at athena.sns.ias.edu>
Date:   Thu Sep 25 21:49:00 2014 -0400

    Added ability to independently set initialMatrixScale for primal and dual
---
 src/SDPSolver.cpp   |  8 ++++++++
 src/SDPSolver.h     |  8 +++++---
 src/SDPSolverIO.cpp | 14 ++++----------
 src/main.cpp        | 12 ++++++++----
 4 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/src/SDPSolver.cpp b/src/SDPSolver.cpp
index 5033858..7a40992 100644
--- a/src/SDPSolver.cpp
+++ b/src/SDPSolver.cpp
@@ -569,6 +569,14 @@ void SDPSolver::computeSearchDirection(const Real &beta,
   dY *= -1;
 }
 
+void SDPSolver::initialize(const SDPSolverParameters &parameters) {
+  fillVector(x, 0);
+  X.setZero();
+  X.addDiagonal(parameters.initialMatrixScalePrimal);
+  Y.setZero();
+  Y.addDiagonal(parameters.initialMatrixScaleDual);
+}
+
 SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters &parameters,
                                         const path checkpointFile) {
   printSolverHeader();
diff --git a/src/SDPSolver.h b/src/SDPSolver.h
index 3185200..9df8edb 100644
--- a/src/SDPSolver.h
+++ b/src/SDPSolver.h
@@ -26,7 +26,8 @@ public:
   Real dualityGapThreshold;
   Real primalErrorThreshold;
   Real dualErrorThreshold;
-  Real initialMatrixScale;
+  Real initialMatrixScalePrimal;
+  Real initialMatrixScaleDual;
   Real feasibleCenteringParameter;
   Real infeasibleCenteringParameter;
   Real stepLengthReduction;
@@ -36,7 +37,8 @@ public:
     setPrecision(dualityGapThreshold,          precision);
     setPrecision(primalErrorThreshold,         precision);
     setPrecision(dualErrorThreshold,           precision);
-    setPrecision(initialMatrixScale,           precision);
+    setPrecision(initialMatrixScalePrimal,     precision);
+    setPrecision(initialMatrixScaleDual,       precision);
     setPrecision(feasibleCenteringParameter,   precision);
     setPrecision(infeasibleCenteringParameter, precision);
     setPrecision(stepLengthReduction,          precision);
@@ -131,7 +133,7 @@ public:
   Vector freeVariableSolution();
   void saveCheckpoint(const path &checkpointFile);
   void loadCheckpoint(const path &checkpointFile);
-  void saveSolution(const path &outFile);
+  void saveSolution(const SDPSolverTerminateReason, const path &outFile);
 };
 
 void printSolverHeader();
diff --git a/src/SDPSolverIO.cpp b/src/SDPSolverIO.cpp
index 30cfee5..17a0a0e 100644
--- a/src/SDPSolverIO.cpp
+++ b/src/SDPSolverIO.cpp
@@ -50,7 +50,8 @@ ostream& operator<<(ostream& os, const SDPSolverParameters& p) {
   os << "dualityGapThreshold          = " << p.dualityGapThreshold          << endl;
   os << "primalErrorThreshold         = " << p.primalErrorThreshold         << endl;
   os << "dualErrorThreshold           = " << p.dualErrorThreshold           << endl;
-  os << "initialMatrixScale           = " << p.initialMatrixScale           << endl;
+  os << "initialMatrixScalePrimal     = " << p.initialMatrixScalePrimal     << endl;
+  os << "initialMatrixScaleDual       = " << p.initialMatrixScaleDual       << endl;
   os << "feasibleCenteringParameter   = " << p.feasibleCenteringParameter   << endl;
   os << "infeasibleCenteringParameter = " << p.infeasibleCenteringParameter << endl;
   os << "stepLengthReduction          = " << p.stepLengthReduction          << endl;
@@ -108,18 +109,11 @@ void SDPSolver::loadCheckpoint(const path &checkpointFile) {
   boost::serialization::serializeSDPSolverState(ar, x, X, Y);
 }
 
-void SDPSolver::initialize(const SDPSolverParameters &parameters) {
-  fillVector(x, 0);
-  X.setZero();
-  X.addDiagonal(parameters.initialMatrixScale);
-  Y.setZero();
-  Y.addDiagonal(parameters.initialMatrixScale);
-}
-
-void SDPSolver::saveSolution(const path &outFile) {
+void SDPSolver::saveSolution(const SDPSolverTerminateReason terminateReason, const path &outFile) {
   boost::filesystem::ofstream ofs(outFile);
   cout << "Saving solution to: " << outFile << endl;
   ofs.precision(int(status.primalObjective.get_prec() * 0.30102999566398114 + 5));
+  ofs << "terminateReason = \"" << terminateReason      << "\";\n";
   ofs << "primalObjective = " << status.primalObjective << ";\n";
   ofs << "dualObjective   = " << status.dualObjective   << ";\n";
   ofs << "dualityGap      = " << status.dualityGap()    << ";\n";
diff --git a/src/main.cpp b/src/main.cpp
index ec3e4a9..295254d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -57,7 +57,7 @@ int solveSDP(const path &sdpFile,
   cout << timers << endl;
 
   if (reason == PrimalDualOptimal || reason == DualFeasibleMaxObjectiveExceeded)
-    solver.saveSolution(outFile);
+    solver.saveSolution(reason, outFile);
 
   return 0;
 }
@@ -122,9 +122,13 @@ int main(int argc, char** argv) {
     ("dualErrorThreshold",
      po::value<Real>(&parameters.dualErrorThreshold)->default_value(Real("1e-30")),
      "Threshold for feasibility of the dual problem. Corresponds to SDPA's epsilonBar.")
-    ("initialMatrixScale",
-     po::value<Real>(&parameters.initialMatrixScale)->default_value(Real("1e20")),
-     "The primal and dual matrices X,Y begin at initialMatrixScale times the "
+    ("initialMatrixScalePrimal",
+     po::value<Real>(&parameters.initialMatrixScalePrimal)->default_value(Real("1e20")),
+     "The primal matrix X begins at initialMatrixScalePrimal times the "
+     "identity matrix. Corresponds to SDPA's lambdaStar.")
+    ("initialMatrixScaleDual",
+     po::value<Real>(&parameters.initialMatrixScaleDual)->default_value(Real("1e20")),
+     "The dual matrix Y begins at initialMatrixScaleDual times the "
      "identity matrix. Corresponds to SDPA's lambdaStar.")
     ("feasibleCenteringParameter",
      po::value<Real>(&parameters.feasibleCenteringParameter)->default_value(Real("0.1")),

-- 
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