[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 ¶meters) {
+ fillVector(x, 0);
+ X.setZero();
+ X.addDiagonal(parameters.initialMatrixScalePrimal);
+ Y.setZero();
+ Y.addDiagonal(parameters.initialMatrixScaleDual);
+}
+
SDPSolverTerminateReason SDPSolver::run(const SDPSolverParameters ¶meters,
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 ¶meters) {
- 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>(¶meters.dualErrorThreshold)->default_value(Real("1e-30")),
"Threshold for feasibility of the dual problem. Corresponds to SDPA's epsilonBar.")
- ("initialMatrixScale",
- po::value<Real>(¶meters.initialMatrixScale)->default_value(Real("1e20")),
- "The primal and dual matrices X,Y begin at initialMatrixScale times the "
+ ("initialMatrixScalePrimal",
+ po::value<Real>(¶meters.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>(¶meters.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>(¶meters.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