[mlpack-svn] r16748 - mlpack/trunk/src/mlpack/core/optimizers/sa
fastlab-svn at coffeetalk-1.cc.gatech.edu
fastlab-svn at coffeetalk-1.cc.gatech.edu
Wed Jul 2 17:15:06 EDT 2014
Author: rcurtin
Date: Wed Jul 2 17:15:05 2014
New Revision: 16748
Log:
Refactor to avoid holding variables in the class itself (reduces the size of SA a bit). Remove an unnecessary variable too. Minor changes, no public API changes.
Modified:
mlpack/trunk/src/mlpack/core/optimizers/sa/sa.hpp
mlpack/trunk/src/mlpack/core/optimizers/sa/sa_impl.hpp
Modified: mlpack/trunk/src/mlpack/core/optimizers/sa/sa.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/core/optimizers/sa/sa.hpp (original)
+++ mlpack/trunk/src/mlpack/core/optimizers/sa/sa.hpp Wed Jul 2 17:15:05 2014
@@ -170,15 +170,13 @@
arma::mat moveSize;
- // following variables are initialized inside Optimize
- arma::mat accept;
- double energy;
- size_t idx;
- size_t nVars;
- size_t sweepCounter;
+ void GenerateMove(arma::mat& iterate,
+ arma::mat& accept,
+ double& energy,
+ size_t& idx,
+ size_t& sweepCounter);
- void GenerateMove(arma::mat& iterate);
- void MoveControl(size_t nMoves);
+ void MoveControl(size_t nMoves, arma::mat& accept);
};
}; // namespace optimization
Modified: mlpack/trunk/src/mlpack/core/optimizers/sa/sa_impl.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/core/optimizers/sa/sa_impl.hpp (original)
+++ mlpack/trunk/src/mlpack/core/optimizers/sa/sa_impl.hpp Wed Jul 2 17:15:05 2014
@@ -45,7 +45,6 @@
maxMove.fill(maxMoveCoef);
moveSize.set_size(rows, cols);
moveSize.fill(initMoveCoef);
- accept.zeros(rows, cols);
}
//! Optimize the function (minimize).
@@ -60,24 +59,25 @@
size_t i;
size_t frozenCount = 0;
- energy = function.Evaluate(iterate);
+ double energy = function.Evaluate(iterate);
size_t oldEnergy = energy;
math::RandomSeed(std::time(NULL));
- nVars = rows * cols;
- idx = 0;
- sweepCounter = 0;
+ size_t idx = 0;
+ size_t sweepCounter = 0;
+
+ arma::mat accept(rows, cols);
accept.zeros();
// Initial Moves to get rid of dependency of initial states.
for (i = 0; i < initMoves; ++i)
- GenerateMove(iterate);
+ GenerateMove(iterate, accept, energy, idx, sweepCounter);
// Iterating and cooling.
for (i = 0; i != maxIterations; ++i)
{
oldEnergy = energy;
- GenerateMove(iterate);
+ GenerateMove(iterate, accept, energy, idx, sweepCounter);
temperature = coolingSchedule.nextTemperature(temperature, energy);
// Determine if the optimization has entered (or continues to be in) a
@@ -88,7 +88,7 @@
frozenCount = 0;
// Terminate, if possible.
- if (frozenCount >= maxToleranceSweep * nVars)
+ if (frozenCount >= maxToleranceSweep * iterate.n_elem)
{
Log::Debug << "SA: minimized within tolerance " << tolerance << " for "
<< maxToleranceSweep << " sweeps after " << i << " iterations; "
@@ -115,7 +115,11 @@
typename CoolingScheduleType
>
void SA<FunctionType, CoolingScheduleType>::GenerateMove(
- arma::mat& iterate)
+ arma::mat& iterate,
+ arma::mat& accept,
+ double& energy,
+ size_t& idx,
+ size_t& sweepCounter)
{
double prevEnergy = energy;
double prevValue = iterate(idx);
@@ -147,7 +151,7 @@
}
++idx;
- if (idx == nVars) // Finished with a sweep.
+ if (idx == iterate.n_elem) // Finished with a sweep.
{
idx = 0;
++sweepCounter;
@@ -155,7 +159,7 @@
if (sweepCounter == moveCtrlSweep) // Do MoveControl().
{
- MoveControl(moveCtrlSweep);
+ MoveControl(moveCtrlSweep, accept);
sweepCounter = 0;
}
}
@@ -179,7 +183,7 @@
typename CoolingScheduleType
>
void SA<FunctionType, CoolingScheduleType>::MoveControl(
- size_t nMoves)
+ size_t nMoves, arma::mat& accept)
{
arma::mat target;
target.copy_size(accept);
@@ -190,7 +194,7 @@
// To avoid the use of element-wise arma::min(), which is only available in
// Armadillo after v3.930, we use a for loop here instead.
- for (size_t i = 0; i < nVars; ++i)
+ for (size_t i = 0; i < accept.n_elem; ++i)
moveSize(i) = (moveSize(i) > maxMove(i)) ? maxMove(i) : moveSize(i);
accept.zeros();
More information about the mlpack-svn
mailing list