[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