1 #ifndef OPENGM_LINEAR_CONSTRAINT_FUNCTION_HXX_ 2 #define OPENGM_LINEAR_CONSTRAINT_FUNCTION_HXX_ 21 template<
class VALUE_TYPE,
class INDEX_TYPE =
size_t,
class LABEL_TYPE =
size_t>
29 typedef typename LinearConstraintFunctionTraitsType::IndexType
IndexType;
30 typedef typename LinearConstraintFunctionTraitsType::LabelType
LabelType;
43 template <
class SHAPE_ITERATOR_TYPE>
44 LinearConstraintFunction(SHAPE_ITERATOR_TYPE shapeBegin, SHAPE_ITERATOR_TYPE shapeEnd,
const LinearConstraintsContainerType& constraints,
const ValueType returnValid = 0.0,
const ValueType returnInvalid = 1.0);
45 template <
class SHAPE_ITERATOR_TYPE,
class CONSTRAINTS_ITERATOR_TYPE>
46 LinearConstraintFunction(SHAPE_ITERATOR_TYPE shapeBegin, SHAPE_ITERATOR_TYPE shapeEnd, CONSTRAINTS_ITERATOR_TYPE constraintsBegin, CONSTRAINTS_ITERATOR_TYPE constraintsEnd,
const ValueType returnValid = 0.0,
const ValueType returnInvalid = 1.0);
50 template<
class STATES_ITERATOR_TYPE>
51 ValueType
operator()(STATES_ITERATOR_TYPE statesBegin)
const;
52 size_t shape(
const size_t i)
const;
57 ValueType
min()
const;
58 ValueType
max()
const;
59 MinMaxFunctor<ValueType>
minMax()
const;
78 template <
class LABEL_ITERATOR>
79 void challenge_impl(ViolatedLinearConstraintsIteratorType& violatedConstraintsBegin, ViolatedLinearConstraintsIteratorType& violatedConstraintsEnd, ViolatedLinearConstraintsWeightsIteratorType& violatedConstraintsWeightsBegin, LABEL_ITERATOR labelingBegin,
const ValueType tolerance = 0.0)
const;
80 template <
class LABEL_ITERATOR>
81 void challengeRelaxed_impl(ViolatedLinearConstraintsIteratorType& violatedConstraintsBegin, ViolatedLinearConstraintsIteratorType& violatedConstraintsEnd, ViolatedLinearConstraintsWeightsIteratorType& violatedConstraintsWeightsBegin, LABEL_ITERATOR labelingBegin,
const ValueType tolerance = 0.0)
const;
95 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
114 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
123 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
130 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR>
132 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR>
430 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
438 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
439 template <
class SHAPE_ITERATOR_TYPE>
441 :
shape_(shapeBegin, shapeEnd),
442 size_(
std::
accumulate(shapeBegin, shapeEnd, 1,
std::multiplies<typename
std::iterator_traits<SHAPE_ITERATOR_TYPE>::value_type>())),
456 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
457 template <
class SHAPE_ITERATOR_TYPE,
class CONSTRAINTS_ITERATOR_TYPE>
459 :
shape_(shapeBegin, shapeEnd),
460 size_(
std::
accumulate(shapeBegin, shapeEnd, 1,
std::multiplies<typename
std::iterator_traits<SHAPE_ITERATOR_TYPE>::value_type>())),
474 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
479 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
480 template<
class STATES_ITERATOR_TYPE>
484 const ValueType weight = constraintsIter->operator()(statesBegin);
492 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
498 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
503 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
508 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
513 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
518 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
528 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
533 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
538 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
543 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
548 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
549 template <
class LABEL_ITERATOR>
551 size_t numViolatedConstraints = 0;
554 const double weight =
static_cast<double>(constraintsIter->operator()(labelingBegin));
555 if(weight > tolerance) {
558 ++numViolatedConstraints;
566 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
567 template <
class LABEL_ITERATOR>
569 size_t numViolatedConstraints = 0;
573 typename LinearConstraintType::CoefficientsIteratorType coefficientsIter = constraintsIter->coefficientsBegin();
574 for(std::vector<size_t>::const_iterator variableIDsIter = indicatorVariableLookupTableIter->begin(); variableIDsIter != indicatorVariableLookupTableIter->end(); ++variableIDsIter) {
575 result += labelingBegin[*variableIDsIter] * (*coefficientsIter);
580 const double weight = result - constraintsIter->getBound();
581 switch(constraintsIter->getConstraintOperator()) {
582 case LinearConstraintType::LinearConstraintOperatorType::LessEqual : {
583 if(weight > tolerance) {
586 ++numViolatedConstraints;
590 case LinearConstraintType::LinearConstraintOperatorType::Equal : {
591 if(weight > tolerance) {
594 ++numViolatedConstraints;
595 }
else if(weight < -tolerance) {
598 ++numViolatedConstraints;
611 if(weight < -tolerance) {
614 ++numViolatedConstraints;
618 ++indicatorVariableLookupTableIter;
625 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
628 if(std::distance(constraintsIter->indicatorVariablesBegin(), constraintsIter->indicatorVariablesEnd()) == 0) {
630 std::cout <<
"empty constraint" << std::endl;
633 for(
IndicatorVariablesIteratorType variablesIter = constraintsIter->indicatorVariablesBegin(); variablesIter != constraintsIter->indicatorVariablesEnd(); ++variablesIter) {
634 if(std::distance(variablesIter->begin(), variablesIter->end()) == 0) {
636 std::cout <<
"empty indicator variable" << std::endl;
639 for(
VariableLabelPairsIteratorType indicatorVariablesIter = variablesIter->begin(); indicatorVariablesIter != variablesIter->end(); ++indicatorVariablesIter) {
640 if(indicatorVariablesIter->first >=
shape_.size()) {
642 }
else if(indicatorVariablesIter->second >=
shape_[indicatorVariablesIter->first]) {
652 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
656 for(
IndicatorVariablesIteratorType variablesIter = constraintsIter->indicatorVariablesBegin(); variablesIter != constraintsIter->indicatorVariablesEnd(); ++variablesIter) {
667 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
671 std::vector<size_t> currentConstraintLookup;
672 for(
IndicatorVariablesIteratorType variablesIter = constraintsIter->indicatorVariablesBegin(); variablesIter != constraintsIter->indicatorVariablesEnd(); ++variablesIter) {
681 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
683 const size_t dimensionSize = 1;
684 const size_t shapeSize = src.
dimension();
685 const size_t numConstraintsSize = 1;
686 const size_t operatorTypeSize = src.
constraints_.size();
687 const size_t numIndicatorVariablesPerConstraintSize = src.
constraints_.size();
691 size_t numVariablesPerIndicatorVariablePerConstraintSize = 0;
692 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
693 numVariablesPerIndicatorVariablePerConstraintSize += std::distance(constraintsIter->indicatorVariablesBegin(), constraintsIter->indicatorVariablesEnd());
695 numVariablesPerIndicatorVariablePerConstraintSize *= 2;
699 size_t variableStatePairSize = 0;
700 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
701 for(IndicatorVariablesIteratorType variablesIter = constraintsIter->indicatorVariablesBegin(); variablesIter != constraintsIter->indicatorVariablesEnd(); ++variablesIter) {
702 variableStatePairSize += std::distance(variablesIter->begin(), variablesIter->end());
705 variableStatePairSize *= 2;
707 const size_t totalIndexSize = dimensionSize + shapeSize + operatorTypeSize + numConstraintsSize + numIndicatorVariablesPerConstraintSize + numVariablesPerIndicatorVariablePerConstraintSize + variableStatePairSize;
708 return totalIndexSize;
711 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
714 const size_t validSize = 1;
715 const size_t invalidSize = 1;
719 size_t coefficientsSize = 0;
720 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
721 coefficientsSize += std::distance(constraintsIter->coefficientsBegin(), constraintsIter->coefficientsEnd());
724 const size_t totalValueSize = boundsSize + validSize + invalidSize + coefficientsSize;
725 return totalValueSize;
728 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
729 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR>
737 for(
size_t i = 0; i < src.
dimension(); i++) {
738 *indexOutIterator = src.
shape_[i];
749 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
750 *indexOutIterator = constraintsIter->getConstraintOperator();
755 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
756 *indexOutIterator = std::distance(constraintsIter->indicatorVariablesBegin(), constraintsIter->indicatorVariablesEnd());
763 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
764 for(IndicatorVariablesIteratorType variablesIter = constraintsIter->indicatorVariablesBegin(); variablesIter != constraintsIter->indicatorVariablesEnd(); ++variablesIter) {
765 *indexOutIterator =
static_cast<size_t>(variablesIter->getLogicalOperatorType());
767 *indexOutIterator = std::distance(variablesIter->begin(), variablesIter->end());
775 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
776 for(IndicatorVariablesIteratorType variablesIter = constraintsIter->indicatorVariablesBegin(); variablesIter != constraintsIter->indicatorVariablesEnd(); ++variablesIter) {
777 for(VariableLabelPairsIteratorType indicatorVariablesIter = variablesIter->begin(); indicatorVariablesIter != variablesIter->end(); ++indicatorVariablesIter) {
778 *indexOutIterator = indicatorVariablesIter->first;
780 *indexOutIterator = indicatorVariablesIter->second;
788 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
789 *valueOutIterator = constraintsIter->getBound();
803 for(LinearConstraintsIteratorType constraintsIter = src.
constraints_.begin(); constraintsIter != src.
constraints_.end(); ++constraintsIter) {
804 for(CoefficientsIteratorType coefficientsIter = constraintsIter->coefficientsBegin(); coefficientsIter != constraintsIter->coefficientsEnd(); ++coefficientsIter) {
805 *valueOutIterator = *coefficientsIter;
811 template<
class VALUE_TYPE,
class INDEX_TYPE,
class LABEL_TYPE>
812 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR>
816 const size_t dimension = *indexInIterator;
819 INDEX_INPUT_ITERATOR shapeBegin = indexInIterator;
820 INDEX_INPUT_ITERATOR shapeEnd = indexInIterator +
dimension;
830 for(LinearConstraintsIteratorType constraintsIter = constraints.begin(); constraintsIter != constraints.end(); ++constraintsIter) {
836 std::vector<INDEX_TYPE> numIndicatorariablesPerConstraint;
837 for(LinearConstraintsIteratorType constraintsIter = constraints.begin(); constraintsIter != constraints.end(); ++constraintsIter) {
838 numIndicatorariablesPerConstraint.push_back(*indexInIterator);
843 std::vector<std::vector<INDEX_TYPE> > numVariablesPerIndicatorVariablePerConstraint;
845 std::vector<std::vector<LogicalOperatorType> > logicalOperatorPerIndicatorVariablePerConstraint;
846 for(
size_t i = 0; i < numIndicatorariablesPerConstraint.size(); ++i) {
847 numVariablesPerIndicatorVariablePerConstraint.push_back(std::vector<INDEX_TYPE>());
848 logicalOperatorPerIndicatorVariablePerConstraint.push_back(std::vector<LogicalOperatorType>());
849 for(
size_t j = 0; j < numIndicatorariablesPerConstraint[i]; ++j) {
850 logicalOperatorPerIndicatorVariablePerConstraint[i].push_back(static_cast<LogicalOperatorType>(*indexInIterator));
852 numVariablesPerIndicatorVariablePerConstraint[i].push_back(*indexInIterator);
859 std::vector<IndicatorVariablesContainerType> variableStatePairs;
861 for(
size_t i = 0; i < numVariablesPerIndicatorVariablePerConstraint.size(); ++i) {
863 for(
size_t j = 0; j < numVariablesPerIndicatorVariablePerConstraint[i].size(); ++j) {
865 for(
size_t k = 0; k < numVariablesPerIndicatorVariablePerConstraint[i][j]; ++k) {
866 const INDEX_TYPE variable = *indexInIterator;
868 const LABEL_TYPE label = *indexInIterator;
870 variableStatePairs[i][j].add(variable, label);
873 variableStatePairs[i][j].setLogicalOperatorType(logicalOperatorPerIndicatorVariablePerConstraint[i][j]);
879 for(LinearConstraintsIteratorType constraintsIter = constraints.begin(); constraintsIter != constraints.end(); ++constraintsIter) {
880 constraintsIter->setBound(*valueInIterator);
885 const VALUE_TYPE returnValid = *valueInIterator;
889 const VALUE_TYPE returnInvalid = *valueInIterator;
894 std::vector<CoefficientsContainerType> coefficients;
895 for(
size_t i = 0; i < numIndicatorariablesPerConstraint.size(); ++i) {
896 coefficients.push_back(CoefficientsContainerType());
897 for(
size_t j = 0; j < numIndicatorariablesPerConstraint[i]; ++j) {
898 coefficients[i].push_back(*valueInIterator);
904 for(
size_t i = 0; i < constraints.
size(); ++i) {
905 constraints[i].add(variableStatePairs[i].begin(), variableStatePairs[i].end(), coefficients[i].begin());
ValueType returnValid_
Stores the return value of LinearConstraintFunction::operator() if no constraint is violated...
LinearConstraintType::VariableLabelPairsIteratorType VariableLabelPairsIteratorType
std::vector< LinearConstraintType > LinearConstraintsContainerType
IndicatorVariablesContainerType::const_iterator IndicatorVariablesIteratorType
Defines the const iterator type to iterate over the set of indicator variables.
Provides interface for liner constraint functions.
std::vector< std::vector< size_t > > indicatorVariableLookupTable_
Lookup table for fast access of the indicator variable IDs.
ValueType operator()(STATES_ITERATOR_TYPE statesBegin) const
Function evaluation.
IndicatorVariableType::IteratorType VariableLabelPairsIteratorType
Defines the const iterator type to iterate over the variable label pairs of an indicator variable...
IndicatorVariablesIteratorType indicatorVariablesOrderBegin_impl() const
Implementation of LinearConstraintFunctionBase::indicatorVariableOrderBegin.
opengm::FunctionBase< LinearConstraintFunction< VALUE_TYPE, INDEX_TYPE, LABEL_TYPE >, LinearConstraintFunctionTraits< LinearConstraintFunction< VALUE_TYPE, INDEX_TYPE, LABEL_TYPE > >::ValueType, LinearConstraintFunctionTraits< LinearConstraintFunction< VALUE_TYPE, INDEX_TYPE, LABEL_TYPE > >::IndexType, LinearConstraintFunctionTraits< LinearConstraintFunction< VALUE_TYPE, INDEX_TYPE, LABEL_TYPE > >::LabelType >::accumulate ReturnType accumulate() const
accumulate all values of the function
LinearConstraintsContainerType constraints_
Stores the constraints of the linear constraint function.
LinearConstraintFunctionTraitsType::LinearConstraintType LinearConstraintType
Typedef of the LinearConstraint class which is used to represent linear constraints.
std::vector< IndicatorVariableType > IndicatorVariablesContainerType
Defines the storage type for the set of indicator variables.
LinearConstraintFunctionTraitsType::ViolatedLinearConstraintsIteratorType ViolatedLinearConstraintsIteratorType
Defines the violated linear constraints iterator type which is used to iterate over the set of violat...
LinearConstraintFunctionTraitsType::IndexType IndexType
Typedef of the INDEX_TYPE template parameter type from the class LinearConstraintFunction.
LinearConstraintFunctionTraitsType::IndicatorVariablesIteratorType IndicatorVariablesIteratorType
Defines the indicator variables container iterator type which is used to iterate over the indicator v...
Defines the const iterator type to iterate over the subset of a sequence.
LinearConstraintsIteratorType linearConstraintsBegin_impl() const
Implementation of LinearConstraintFunctionBase::linearConstraintsBegin.
#define OPENGM_ASSERT(expression)
LinearConstraintFunctionTraitsType::LinearConstraintsContainerType LinearConstraintsContainerType
Defines the linear constraints container type which is used to store multiple linear constraints...
LinearConstraintType::IndicatorVariablesIteratorType IndicatorVariablesIteratorType
LinearConstraintFunctionTraitsType::ViolatedLinearConstraintsWeightsIteratorType ViolatedLinearConstraintsWeightsIteratorType
Defines the violated linear constraints weights iterator type which is used to iterate over the weigh...
IndicatorVariablesIteratorType indicatorVariablesOrderEnd_impl() const
Implementation of LinearConstraintFunctionBase::indicatorVariableOrderEnd.
std::vector< LabelType > shape_
Stores the shape of the linear constraint function.
Default implementation of a linear constraint function class.
bool checkConstraints() const
Check linear constraints. Only used for assertion in debug mode.
ValueType max() const
Maximum value of the linear constraint function.
LinearConstraintsContainerType::const_iterator LinearConstraintsIteratorType
size_t size() const
Number of parameters.
LinearConstraintFunction()
LinearConstraintFunction constructor.
LinearConstraintFunctionTraitsType::ViolatedLinearConstraintsWeightsContainerType ViolatedLinearConstraintsWeightsContainerType
Defines the violated linear constraints weights container type which is used to store the weights of ...
std::vector< double > ViolatedLinearConstraintsWeightsContainerType
void challenge_impl(ViolatedLinearConstraintsIteratorType &violatedConstraintsBegin, ViolatedLinearConstraintsIteratorType &violatedConstraintsEnd, ViolatedLinearConstraintsWeightsIteratorType &violatedConstraintsWeightsBegin, LABEL_ITERATOR labelingBegin, const ValueType tolerance=0.0) const
Implementation of LinearConstraintFunctionBase::challenge.
ValueType min() const
Minimum value of the linear constraint function.
Base class for linear constraint functions.
std::vector< size_t > violatedConstraintsIds_
Stores the indices of the violated constraints which are detected by LinearConstraintFunction::challe...
IndicatorVariablesContainerType indicatorVariableList_
A list of all indicator variables present in the linear constraint function.
ViolatedLinearConstraintsWeightsContainerType::const_iterator ViolatedLinearConstraintsWeightsIteratorType
void challengeRelaxed_impl(ViolatedLinearConstraintsIteratorType &violatedConstraintsBegin, ViolatedLinearConstraintsIteratorType &violatedConstraintsEnd, ViolatedLinearConstraintsWeightsIteratorType &violatedConstraintsWeightsBegin, LABEL_ITERATOR labelingBegin, const ValueType tolerance=0.0) const
Implementation of LinearConstraintFunctionBase::challengeRelaxed.
void createIndicatorVariableLookupTable()
Helper function to create an indicator variable lookup table. The table is stored in LinearConstraint...
ViolatedLinearConstraintsWeightsContainerType violatedConstraintsWeights_
Stores the weights of the violated constraints which are detected by LinearConstraintFunction::challe...
size_t shape(const size_t i) const
Number of labels of the indicated input variable.
LinearConstraintFunctionTraitsType::LinearConstraintsIteratorType LinearConstraintsIteratorType
Defines the linear constraints container iterator type which is used to iterate over the set of linea...
Traits class for linear constraint functions.
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.
LinearConstraint< ValueType, IndexType, LabelType > LinearConstraintType
Provides implementation for class LinearConstraint.
LinearConstraintFunctionTraits< LinearConstraintFunctionType > LinearConstraintFunctionTraitsType
Typedef of the LinearConstraintFunctionTraits class with appropriate template parameter.
LinearConstraintFunctionTraitsType::ValueType ValueType
Typedef of the VALUE_TYPE template parameter type from the class LinearConstraintFunction.
Provides implementation for class SubsequenceIterator.
LinearConstraintFunctionBase< LinearConstraintFunctionType > LinearConstraintFunctionBaseType
Typedef of the LinearConstraintFunctionBase class with appropriate template parameter.
size_t dimension() const
Number of input variables.
LinearConstraintFunctionTraitsType::VariableLabelPairsIteratorType VariableLabelPairsIteratorType
Defines the variable label pairs iterator type which is used to iterate over the variable label pairs...
LinearConstraintType::IndicatorVariablesContainerType IndicatorVariablesContainerType
MinMaxFunctor< ValueType > minMax() const
Get minimum and maximum at the same time.
void fillIndicatorVariableList()
Helper function to fill LinearConstraintFunction::indicatorVariableList_ with all indicator variables...
LinearConstraintFunction< VALUE_TYPE, INDEX_TYPE, LABEL_TYPE > LinearConstraintFunctionType
Typedef of the LinearConstraintFunction class with appropriate template parameter.
ValueType returnInvalid_
Stores the return value of LinearConstraintFunction::operator() if at least one constraint is violate...
LinearConstraintFunctionTraitsType::IndicatorVariablesContainerType IndicatorVariablesContainerType
Defines the indicator variables container type which is used to store the indicator variables used by...
LinearConstraintsIteratorType linearConstraintsEnd_impl() const
Implementation of LinearConstraintFunctionBase::linearConstraintsEnd.
Define a linear constraint for a set of indicatorVariables.
LinearConstraintFunctionTraitsType::LabelType LabelType
Typedef of the LABEL_TYPE template parameter type from the class LinearConstraintFunction.
size_t size_
Stores the size of the linear constraint function.
SubsequenceIterator< LinearConstraintsIteratorType, typename std::vector< size_t >::const_iterator > ViolatedLinearConstraintsIteratorType
~LinearConstraintFunction()
LinearConstraintFunction destructor.