mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-30 00:50:37 +08:00
Problem::Evaluate implementation.
1. Add Problem::Evaluate and tests. 2. Remove Solver::Summary::initial/final_* 3. Remove Solver::Options::return_* members. 4. Various cpplint cleanups. Change-Id: I4266de53489896f72d9c6798c5efde6748d68a47
This commit is contained in:
committed by
Gerrit Code Review
parent
d4a0bf86d6
commit
509f68cfe3
+73
-1
@@ -39,11 +39,12 @@
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
#include <glog/logging.h>
|
||||
#include "ceres/internal/macros.h"
|
||||
#include "ceres/internal/port.h"
|
||||
#include "ceres/internal/scoped_ptr.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
|
||||
namespace ceres {
|
||||
|
||||
@@ -51,6 +52,7 @@ class CostFunction;
|
||||
class LossFunction;
|
||||
class LocalParameterization;
|
||||
class Solver;
|
||||
struct CRSMatrix;
|
||||
|
||||
namespace internal {
|
||||
class Preprocessor;
|
||||
@@ -326,6 +328,76 @@ class Problem {
|
||||
// sizes of all of the residual blocks.
|
||||
int NumResiduals() const;
|
||||
|
||||
// Options struct to control Problem::Evaluate.
|
||||
struct EvaluateOptions {
|
||||
EvaluateOptions()
|
||||
: num_threads(1) {
|
||||
}
|
||||
|
||||
// The set of parameter blocks for which evaluation should be
|
||||
// performed. This vector determines the order that parameter
|
||||
// blocks occur in the gradient vector and in the columns of the
|
||||
// jacobian matrix. If parameter_blocks is empty, then it is
|
||||
// assumed to be equal to vector containing ALL the parameter
|
||||
// blocks. Generally speaking the parameter blocks will occur in
|
||||
// the order in which they were added to the problem. But, this
|
||||
// may change if the user removes any parameter blocks from the
|
||||
// problem.
|
||||
//
|
||||
// NOTE: This vector should contain the same pointers as the ones
|
||||
// used to add parameter blocks to the Problem. These parmeter
|
||||
// block should NOT point to new memory locations. Bad things will
|
||||
// happen otherwise.
|
||||
vector<double*> parameter_blocks;
|
||||
|
||||
// The set of residual blocks to evaluate. This vector determines
|
||||
// the order in which the residuals occur, and how the rows of the
|
||||
// jacobian are ordered. If residual_blocks is empty, then it is
|
||||
// assumed to be equal to the vector containing all the residual
|
||||
// blocks. If this vector is empty, then it is assumed to be equal
|
||||
// to a vector containing ALL the residual blocks. Generally
|
||||
// speaking the residual blocks will occur in the order in which
|
||||
// they were added to the problem. But, this may change if the
|
||||
// user removes any residual blocks from the problem.
|
||||
vector<ResidualBlockId> residual_blocks;
|
||||
int num_threads;
|
||||
};
|
||||
|
||||
// Evaluate Problem. Any of the output pointers can be NULL. Which
|
||||
// residual blocks and parameter blocks are used is controlled by
|
||||
// the EvaluateOptions struct above.
|
||||
//
|
||||
// Note 1: The evaluation will use the values stored in the memory
|
||||
// locations pointed to by the parameter block pointers used at the
|
||||
// time of the construction of the problem. i.e.,
|
||||
//
|
||||
// Problem problem;
|
||||
// double x = 1;
|
||||
// problem.Add(new MyCostFunction, NULL, &x);
|
||||
//
|
||||
// double cost = 0.0;
|
||||
// problem.Evaluate(Problem::EvaluateOptions(), &cost, NULL, NULL, NULL);
|
||||
//
|
||||
// The cost is evaluated at x = 1. If you wish to evaluate the
|
||||
// problem at x = 2, then
|
||||
//
|
||||
// x = 2;
|
||||
// problem.Evaluate(Problem::EvaluateOptions(), &cost, NULL, NULL, NULL);
|
||||
//
|
||||
// is the way to do so.
|
||||
//
|
||||
// Note 2: If no local parameterizations are used, then the size of
|
||||
// the gradient vector (and the number of columns in the jacobian)
|
||||
// is the sum of the sizes of all the parameter blocks. If a
|
||||
// parameter block has a local parameterization, then it contributes
|
||||
// "LocalSize" entries to the gradient vecto (and the number of
|
||||
// columns in the jacobian).
|
||||
bool Evaluate(const EvaluateOptions& options,
|
||||
double* cost,
|
||||
vector<double>* residuals,
|
||||
vector<double>* gradient,
|
||||
CRSMatrix* jacobian);
|
||||
|
||||
private:
|
||||
friend class Solver;
|
||||
internal::scoped_ptr<internal::ProblemImpl> problem_impl_;
|
||||
|
||||
Reference in New Issue
Block a user