[opengm] 18/386: bundle-optimizer: added setup of QP
Ghislain Vaillant
ghisvail-guest at moszumanska.debian.org
Wed Aug 31 08:34:59 UTC 2016
This is an automated email from the git hooks/post-receive script.
ghisvail-guest pushed a commit to branch debian/master
in repository opengm.
commit cccd60840c9061357ac4cdfa7f4e78e2e77dbc94
Author: Jan Funke <funke at ini.ch>
Date: Thu Jun 19 19:02:35 2014 -0400
bundle-optimizer: added setup of QP
---
include/opengm/learning/bundle-optimizer.hxx | 47 +++++++++++++++++-----------
1 file changed, 28 insertions(+), 19 deletions(-)
diff --git a/include/opengm/learning/bundle-optimizer.hxx b/include/opengm/learning/bundle-optimizer.hxx
index 72285f8..640afb4 100644
--- a/include/opengm/learning/bundle-optimizer.hxx
+++ b/include/opengm/learning/bundle-optimizer.hxx
@@ -28,9 +28,13 @@ public:
struct Parameter {
Parameter() :
+ lambda(1.0),
min_gap(1e-5),
steps(0) {}
+ // regularizer weight
+ double lambda;
+
// stopping criteria of the bundle method optimization
ValueType min_gap;
@@ -38,7 +42,7 @@ public:
unsigned int steps;
};
- BundleOptimizer();
+ BundleOptimizer(const Parameter& parameter = Parameter());
~BundleOptimizer();
@@ -51,17 +55,21 @@ public:
private:
- void setupQp();
+ template <typename ModelParameters>
+ void setupQp(const ModelParameters& w);
void findMinLowerBound(std::vector<ValueType>& w, ValueType& value);
ValueType dot(const std::vector<ValueType>& a, const std::vector<ValueType>& b);
+ Parameter _parameter;
+
solver::QuadraticSolverBackend* _solver;
};
template <typename T>
-BundleOptimizer<T>::BundleOptimizer() :
+BundleOptimizer<T>::BundleOptimizer(const Parameter& parameter) :
+ _parameter(parameter),
_solver(0) {}
template <typename T>
@@ -76,7 +84,7 @@ template <typename DatasetType>
OptimizerResult
BundleOptimizer<T>::optimize(const DatasetType& dataset, typename DatasetType::ModelParameters& w) {
- setupQp();
+ setupQp(w);
/*
1. w_0 = 0, t = 0
@@ -166,31 +174,32 @@ BundleOptimizer<T>::optimize(const DatasetType& dataset, typename DatasetType::M
}
template <typename T>
+template <typename ModelParameters>
void
-BundleOptimizer<T>::setupQp() {
+BundleOptimizer<T>::setupQp(const ModelParameters& w) {
/*
w* = argmin λ½|w|² + ξ, s.t. <w,a_i> + b_i ≤ ξ ∀i
*/
- //// one variable for each component of w and for ξ
- //_qpObjective->resize(_dims + 1);
+ if (!_solver)
+ _solver = solver::QuadraticSolverFactory::Create();
- //// regularizer
- //for (unsigned int i = 0; i < _dims; i++)
- //_qpObjective->setQuadraticCoefficient(i, i, 0.5*_lambda);
+ // one variable for each component of w and for ξ
+ solver::QuadraticObjective obj(w.numberOfParameters() + 1);
+
+ // regularizer
+ for (unsigned int i = 0; i < w.numberOfParameters(); i++)
+ obj.setQuadraticCoefficient(i, i, 0.5*_parameter.lambda);
- //// ξ
- //_qpObjective->setCoefficient(_dims, 1.0);
+ // ξ
+ obj.setCoefficient(w.numberOfParameters(), 1.0);
- //// we minimize
- //_qpObjective->setSense(Minimize);
+ // we minimize
+ obj.setSense(solver::Minimize);
- //// connect pipeline
- //_qpSolver->setInput("objective", _qpObjective);
- //_qpSolver->setInput("linear constraints", _bundleCollector->getOutput());
- //_qpSolver->setInput("parameters", _qpParameters);
- //_qpSolution = _qpSolver->getOutput("solution");
+ // we are done with the objective -- this does not change anymore
+ _solver->setObjective(obj);
}
template <typename T>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/opengm.git
More information about the debian-science-commits
mailing list