shark::SvmProblem< Problem > Class Template Reference

#include <shark/Algorithms/QP/SvmProblems.h>

+ Inheritance diagram for shark::SvmProblem< Problem >:

Public Types

typedef Problem::QpFloatType QpFloatType
 
typedef Problem::MatrixType MatrixType
 
typedef LibSVMSelectionCriterion PreferedSelectionStrategy
 

Public Member Functions

 SvmProblem (Problem &problem)
 
std::size_t dimensions () const
 
std::size_t active () const
 
double boxMin (std::size_t i) const
 
double boxMax (std::size_t i) const
 
bool isLowerBound (std::size_t i) const
 
bool isUpperBound (std::size_t i) const
 
MatrixTypequadratic ()
 representation of the quadratic part of the objective function
 
double linear (std::size_t i) const
 
double alpha (std::size_t i) const
 
double diagonal (std::size_t i) const
 
double gradient (std::size_t i) const
 
std::size_t permutation (std::size_t i) const
 
RealVector getUnpermutedAlpha () const
 
void updateSMO (std::size_t i, std::size_t j)
 Does an update of SMO given a working set with indices i and j.
 
double functionValue () const
 Returns the current function value of the problem.
 
bool shrink (double)
 
void reshrink ()
 
void unshrink ()
 
void setInitialSolution (RealVector const &alpha, RealVector const &gradient)
 Define the initial solution for the iterative solver.
 
void setInitialSolution (RealVector const &alpha)
 Define the initial solution for the iterative solver.
 
void deactivateVariable (std::size_t i)
 Remove the i-th example from the problem while taking the equality constraint into account.
 
void activateVariable (std::size_t i)
 Reactivate an previously deactivated variable.
 
void flipCoordinates (std::size_t i, std::size_t j)
 exchange two variables via the permutation
 
void scaleBoxConstraints (double factor, double variableScalingFactor)
 Scales all box constraints by a constant factor and adapts the solution using a separate scaling.
 
virtual void setLinear (std::size_t i, double newValue)
 adapts the linear part of the problem and updates the internal data structures accordingly.
 
double checkKKT () const
 

Protected Member Functions

virtual void applyStep (std::size_t i, std::size_t j, double step)
 Update the problem by a proposed step i taking the box constraints into account.
 
void updateAlphaStatus (std::size_t i)
 
bool testShrinkVariable (std::size_t a, double largestUp, double smallestDown) const
 

Protected Attributes

Problem m_problem
 
RealVector m_gradient
 gradient of the objective function at the current alpha
 
std::size_t m_active
 
std::vector< char > m_alphaStatus
 Stores the status, whther alpha is on the lower or upper bound, or whether it is free.
 

Detailed Description

template<class Problem>
class shark::SvmProblem< Problem >

Definition at line 300 of file SvmProblems.h.

Member Typedef Documentation

◆ MatrixType

template<class Problem >
typedef Problem::MatrixType shark::SvmProblem< Problem >::MatrixType

Definition at line 303 of file SvmProblems.h.

◆ PreferedSelectionStrategy

template<class Problem >
typedef LibSVMSelectionCriterion shark::SvmProblem< Problem >::PreferedSelectionStrategy

Definition at line 304 of file SvmProblems.h.

◆ QpFloatType

template<class Problem >
typedef Problem::QpFloatType shark::SvmProblem< Problem >::QpFloatType

Definition at line 302 of file SvmProblems.h.

Constructor & Destructor Documentation

◆ SvmProblem()

Member Function Documentation

◆ activateVariable()

template<class Problem >
void shark::SvmProblem< Problem >::activateVariable ( std::size_t  i)
inline

◆ active()

template<class Problem >
std::size_t shark::SvmProblem< Problem >::active ( ) const
inline

◆ alpha()

◆ applyStep()

template<class Problem >
virtual void shark::SvmProblem< Problem >::applyStep ( std::size_t  i,
std::size_t  j,
double  step 
)
inlineprotectedvirtual

Update the problem by a proposed step i taking the box constraints into account.

A step length 0<=lambda<=1 is found so that boxMin(i) <= alpha(i)+lambda*step <= boxMax(i) and boxMin(j) <= alpha(j)-lambda*step <= boxMax(j) the update is performed in a numerically stable way and the internal data structures are also updated.

Definition at line 572 of file SvmProblems.h.

References shark::SvmProblem< Problem >::active(), shark::SvmProblem< Problem >::boxMax(), shark::SvmProblem< Problem >::boxMin(), shark::SvmProblem< Problem >::m_gradient, shark::SvmProblem< Problem >::m_problem, shark::SvmProblem< Problem >::quadratic(), SIZE_CHECK, and shark::SvmProblem< Problem >::updateAlphaStatus().

Referenced by shark::SvmProblem< Problem >::deactivateVariable().

◆ boxMax()

◆ boxMin()

◆ checkKKT()

◆ deactivateVariable()

template<class Problem >
void shark::SvmProblem< Problem >::deactivateVariable ( std::size_t  i)
inline

Remove the i-th example from the problem while taking the equality constraint into account.

The i-th element is first set to zero and as well as an unspecified set corrected so that the constraint is fulfilled.

Definition at line 490 of file SvmProblems.h.

References shark::SvmProblem< Problem >::alpha(), shark::AlphaDeactivated, shark::SvmProblem< Problem >::applyStep(), shark::SvmProblem< Problem >::dimensions(), shark::SvmProblem< Problem >::m_alphaStatus, and SIZE_CHECK.

◆ diagonal()

template<class Problem >
double shark::SvmProblem< Problem >::diagonal ( std::size_t  i) const
inline

◆ dimensions()

◆ flipCoordinates()

template<class Problem >
void shark::SvmProblem< Problem >::flipCoordinates ( std::size_t  i,
std::size_t  j 
)
inline

◆ functionValue()

template<class Problem >
double shark::SvmProblem< Problem >::functionValue ( ) const
inline

Returns the current function value of the problem.

Definition at line 436 of file SvmProblems.h.

References shark::SvmProblem< Problem >::m_gradient, and shark::SvmProblem< Problem >::m_problem.

◆ getUnpermutedAlpha()

template<class Problem >
RealVector shark::SvmProblem< Problem >::getUnpermutedAlpha ( ) const
inline

◆ gradient()

◆ isLowerBound()

template<class Problem >
bool shark::SvmProblem< Problem >::isLowerBound ( std::size_t  i) const
inline

◆ isUpperBound()

template<class Problem >
bool shark::SvmProblem< Problem >::isUpperBound ( std::size_t  i) const
inline

◆ linear()

template<class Problem >
double shark::SvmProblem< Problem >::linear ( std::size_t  i) const
inline

◆ permutation()

template<class Problem >
std::size_t shark::SvmProblem< Problem >::permutation ( std::size_t  i) const
inline

◆ quadratic()

template<class Problem >
MatrixType & shark::SvmProblem< Problem >::quadratic ( )
inline

representation of the quadratic part of the objective function

Definition at line 344 of file SvmProblems.h.

References shark::SvmProblem< Problem >::m_problem.

Referenced by shark::SvmProblem< Problem >::applyStep(), shark::SvmProblem< Problem >::SvmProblem(), and shark::SvmProblem< Problem >::updateSMO().

◆ reshrink()

template<class Problem >
void shark::SvmProblem< Problem >::reshrink ( )
inline

Definition at line 441 of file SvmProblems.h.

◆ scaleBoxConstraints()

template<class Problem >
void shark::SvmProblem< Problem >::scaleBoxConstraints ( double  factor,
double  variableScalingFactor 
)
inline

◆ setInitialSolution() [1/2]

template<class Problem >
void shark::SvmProblem< Problem >::setInitialSolution ( RealVector const &  alpha)
inline

Define the initial solution for the iterative solver.

This method can be used to warm-start the solver. It requires a feasible solution (alpha), for which it computes the gradient of the dual objective function. Note that this is a quadratic time operation in the number of non-zero coefficients.

Definition at line 470 of file SvmProblems.h.

References shark::SvmProblem< Problem >::alpha(), shark::SvmProblem< Problem >::dimensions(), shark::SvmProblem< Problem >::gradient(), shark::SvmProblem< Problem >::m_problem, shark::SvmProblem< Problem >::setInitialSolution(), and SIZE_CHECK.

◆ setInitialSolution() [2/2]

template<class Problem >
void shark::SvmProblem< Problem >::setInitialSolution ( RealVector const &  alpha,
RealVector const &  gradient 
)
inline

◆ setLinear()

template<class Problem >
virtual void shark::SvmProblem< Problem >::setLinear ( std::size_t  i,
double  newValue 
)
inlinevirtual

adapts the linear part of the problem and updates the internal data structures accordingly.

Reimplemented in shark::BoxBasedShrinkingStrategy< SvmProblem< Problem > >.

Definition at line 535 of file SvmProblems.h.

References shark::SvmProblem< Problem >::linear(), shark::SvmProblem< Problem >::m_gradient, and shark::SvmProblem< Problem >::m_problem.

◆ shrink()

template<class Problem >
bool shark::SvmProblem< Problem >::shrink ( double  )
inline

Definition at line 440 of file SvmProblems.h.

◆ testShrinkVariable()

template<class Problem >
bool shark::SvmProblem< Problem >::testShrinkVariable ( std::size_t  a,
double  largestUp,
double  smallestDown 
) const
inlineprotected

◆ unshrink()

template<class Problem >
void shark::SvmProblem< Problem >::unshrink ( )
inline

Definition at line 442 of file SvmProblems.h.

◆ updateAlphaStatus()

◆ updateSMO()

Member Data Documentation

◆ m_active

template<class Problem >
std::size_t shark::SvmProblem< Problem >::m_active
protected

Definition at line 559 of file SvmProblems.h.

Referenced by shark::SvmProblem< Problem >::active().

◆ m_alphaStatus

◆ m_gradient

◆ m_problem


The documentation for this class was generated from the following file: