[mlpack-git] master: Slight style changes, and comment utility functions and put them inside the relevant namespace. (42d9d25)
gitdub at big.cc.gt.atl.ga.us
gitdub at big.cc.gt.atl.ga.us
Thu Mar 5 22:09:11 EST 2015
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/904762495c039e345beba14c1142fd719b3bd50e...f94823c800ad6f7266995c700b1b630d5ffdcf40
>---------------------------------------------------------------
commit 42d9d25fbdd756aa1192bc25be61609c0e98de37
Author: ryan <ryan at ratml.org>
Date: Wed Dec 31 20:39:47 2014 -0500
Slight style changes, and comment utility functions and put them inside the relevant namespace.
>---------------------------------------------------------------
42d9d25fbdd756aa1192bc25be61609c0e98de37
.../core/optimizers/lrsdp/lrsdp_function.cpp | 56 +++++++++++-----------
1 file changed, 29 insertions(+), 27 deletions(-)
diff --git a/src/mlpack/core/optimizers/lrsdp/lrsdp_function.cpp b/src/mlpack/core/optimizers/lrsdp/lrsdp_function.cpp
index 31d4bd7..f6ac6ae 100644
--- a/src/mlpack/core/optimizers/lrsdp/lrsdp_function.cpp
+++ b/src/mlpack/core/optimizers/lrsdp/lrsdp_function.cpp
@@ -75,46 +75,50 @@ std::string LRSDPFunction::ToString() const
return convert.str();
}
+namespace mlpack {
+namespace optimization {
+
+//! Utility function for calculating part of the objective when AugLagrangian is
+//! used with an LRSDPFunction.
template <typename MatrixType>
static inline void
-updateObjective(double &objective,
- const arma::mat &rrt,
- const std::vector<MatrixType> &ais,
- const arma::vec &bis,
- const arma::vec &lambda,
- size_t lambda_offset,
- double sigma)
+UpdateObjective(double& objective,
+ const arma::mat& rrt,
+ const std::vector<MatrixType>& ais,
+ const arma::vec& bis,
+ const arma::vec& lambda,
+ const size_t lambdaOffset,
+ const double sigma)
{
for (size_t i = 0; i < ais.size(); ++i)
{
// Take the trace subtracted by the b_i.
- double constraint = trace(ais[i] * rrt) - bis[i];
- objective -= (lambda[lambda_offset + i] * constraint);
+ const double constraint = trace(ais[i] * rrt) - bis[i];
+ objective -= (lambda[lambdaOffset + i] * constraint);
objective += (sigma / 2.) * constraint * constraint;
}
}
+//! Utility function for calculating part of the gradient when AugLagrangian is
+//! used with an LRSDPFunction.
template <typename MatrixType>
static inline void
-updateGradient(arma::mat &s,
- const arma::mat &rrt,
- const std::vector<MatrixType> &ais,
- const arma::vec &bis,
- const arma::vec &lambda,
- size_t lambda_offset,
- double sigma)
+UpdateGradient(arma::mat& s,
+ const arma::mat& rrt,
+ const std::vector<MatrixType>& ais,
+ const arma::vec& bis,
+ const arma::vec& lambda,
+ const size_t lambdaOffset,
+ const double sigma)
{
for (size_t i = 0; i < ais.size(); ++i)
{
const double constraint = trace(ais[i] * rrt) - bis[i];
- const double y = lambda[lambda_offset + i] - sigma * constraint;
+ const double y = lambda[lambdaOffset + i] - sigma * constraint;
s -= y * ais[i];
}
}
-namespace mlpack {
-namespace optimization {
-
// Template specializations for function and gradient evaluation.
template<>
double AugLagrangianFunction<LRSDPFunction>::Evaluate(
@@ -141,12 +145,10 @@ double AugLagrangianFunction<LRSDPFunction>::Evaluate(
objective += trace(function.DenseC() * rrt);
// Now each constraint.
- updateObjective(
- objective, rrt, function.SparseA(), function.SparseB(),
+ UpdateObjective(objective, rrt, function.SparseA(), function.SparseB(),
lambda, 0, sigma);
- updateObjective(
- objective, rrt, function.DenseA(), function.DenseB(),
- lambda, function.NumSparseConstraints(), sigma);
+ UpdateObjective(objective, rrt, function.DenseA(), function.DenseB(), lambda,
+ function.NumSparseConstraints(), sigma);
return objective;
}
@@ -171,10 +173,10 @@ void AugLagrangianFunction<LRSDPFunction>::Gradient(
if (function.hasDenseObjective())
s += function.DenseC();
- updateGradient(
+ UpdateGradient(
s, rrt, function.SparseA(), function.SparseB(),
lambda, 0, sigma);
- updateGradient(
+ UpdateGradient(
s, rrt, function.DenseA(), function.DenseB(),
lambda, function.NumSparseConstraints(), sigma);
More information about the mlpack-git
mailing list