1 #ifndef OPENGM_LEARNING_WEIGHTS 2 #define OPENGM_LEARNING_WEIGHTS 71 void setWeight(
const size_t pi,
const ValueType value){
97 : regularizationType_(),
99 if(regularizationNorm==-1){
100 regularizationType_ = NoRegularizer;
102 else if(regularizationNorm==1){
103 regularizationType_ = L1Regularizer;
105 else if(regularizationNorm==2){
106 regularizationType_ = L2Regularizer;
113 : regularizationType_(regularizationType),
123 return regularizationType_;
127 return static_cast<int>(regularizationType_);
131 if(regularizationType_== NoRegularizer){
134 else if(regularizationType_ == L1Regularizer){
136 for(
size_t wi=0; wi<weights.
size(); ++wi){
143 for(
size_t wi=0; wi<weights.
size(); ++wi){
144 val += std::pow(weights[wi], 2);
161 : wLowerBounds_(nWeights,-1.0*
std::numeric_limits<T>::infinity()),
162 wUpperBounds_(nWeights, 1.0*
std::numeric_limits<T>::infinity()),
172 template<
class ITER_LB,
class ITER_UB>
174 : wLowerBounds_(lbBegin,lbEnd),
175 wUpperBounds_(ubBegin, ubBegin +
std::distance(lbBegin, lbEnd)),
188 return cStart_.size();
192 return wLowerBounds_[wi];
195 return wUpperBounds_[wi];
199 return wLowerBounds_;
202 return wUpperBounds_;
210 return cLowerBounds_[ci];
213 return cUpperBounds_[ci];
217 return cLowerBounds_;
220 return cLowerBounds_;
223 return cUpperBounds_;
227 template<
class ITER_LB>
229 wLowerBounds_.assign(lbBegin, lbEnd);
232 template<
class ITER_UB>
234 wUpperBounds_.assign(ubBegin, ubEnd);
237 template<
class ITER_INDICES,
class ITER_COEFF>
238 void addConstraint(ITER_INDICES indicesBegin, ITER_INDICES indicesEnd, ITER_COEFF coeffBegin,
const T lowerBound,
const T upperBound){
240 const size_t cSize = std::distance(indicesBegin, indicesEnd);
242 cSize_.push_back(cSize);
245 cStart_.push_back(cOffset_);
252 for( ;indicesBegin!=indicesEnd; ++indicesBegin,++coeffBegin){
253 cIndices_.push_back(*indicesBegin);
254 cCoeff_.push_back(*coeffBegin);
260 std::vector<T> wLowerBounds_;
261 std::vector<T> wUpperBounds_;
263 std::vector<T> cLowerBounds_;
264 std::vector<T> cUpperBounds_;
267 std::vector<size_t> cStart_;
268 std::vector<size_t> cSize_;
269 std::vector<size_t> cIndices_;
270 std::vector<T> cCoeff_;
T constraintLowerBound(const size_t ci) const
size_t constraintSize(const size_t ci) const
Runtime-flexible multi-dimensional views and arrays.
WeightConstraints(const size_t nWeights=0)
void addConstraint(ITER_INDICES indicesBegin, ITER_INDICES indicesEnd, ITER_COEFF coeffBegin, const T lowerBound, const T upperBound)
WeightConstraints(ITER_LB lbBegin, ITER_LB lbEnd, ITER_UB ubBegin)
const std::vector< T > & constraintLowerBounds() const
T weightUpperBound(const size_t wi) const
Weights(const size_t numberOfWeights=0)
void setUpperBounds(ITER_UB ubBegin, ITER_UB ubEnd)
RegularizationType regularizationType() const
WeightRegularizer(const int regularizationNorm, const double lambda=1.0)
const std::vector< size_t > & constraintSizes() const
double evaluate(const Weights< T > &weights)
ValueType getWeight(const size_t pi) const
size_t numberOfConstraints() const
const std::vector< T > & constraintUpperBounds() const
T weightLowerBound(const size_t wi) const
const std::vector< T > & weightLowerBounds() const
void setWeight(const size_t pi, const ValueType value)
#define OPENGM_ASSERT_OP(a, op, b)
runtime assertion
Vector(const allocator_type &=allocator_type())
Empty constructor.
WeightRegularizer(const RegularizationType regularizationType=L2Regularizer, const double lambda=1.0)
int regularizerNorm() const
void setLowerBounds(ITER_LB lbBegin, ITER_LB lbEnd)
const std::vector< T > & weightUpperBounds() const
size_t numberOfWeights() const
const size_t size() const
Get the number of data items.
T constraintUpperBound(const size_t ci) const