NonlinearInequalityConstraint.cpp
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
21 
22 namespace gtsam {
23 
24 /* ********************************************************************************************* */
26  return noiseModel()->whiten(unwhitenedExpr(x));
27 }
28 
29 /* ********************************************************************************************* */
31  OptionalMatrixVecType H) const {
33  for (size_t i = 0; i < dim(); i++) {
34  if (error(i) < 0) {
35  error(i) = 0;
36  if (H) {
37  for (Matrix& m : *H) {
38  m.row(i).setZero();
39  }
40  }
41  }
42  }
43  return error;
44 }
45 
46 /* ********************************************************************************************* */
48  return (unwhitenedExpr(x).array() >= 0).any();
49 }
50 
51 /* ********************************************************************************************* */
53  InequalityPenaltyFunction::shared_ptr func, const double mu) const {
55  return penaltyFactor(mu);
56 }
57 
58 /* ********************************************************************************************* */
60  const {
62  return nullptr;
63 }
64 
65 /* ********************************************************************************************* */
67  const double mu) const {
68  return createEqualityConstraint()->penaltyFactor(mu);
69 }
70 
71 /* ********************************************************************************************* */
73  const Double_& expression, const double& sigma)
74  : Base(constrainedNoise(Vector1(sigma)), expression.keysAndDims().first),
75  expression_(expression),
76  dims_(expression.keysAndDims().second) {}
77 
78 /* ********************************************************************************************* */
80  const Double_& expression, const double& sigma) {
81  Double_ neg_expr = Double_(0.0) - expression;
82  return std::make_shared<ScalarExpressionInequalityConstraint>(neg_expr, sigma);
83 }
84 
85 /* ********************************************************************************************* */
87  const Double_& expression, const double& sigma) {
88  return std::make_shared<ScalarExpressionInequalityConstraint>(expression, sigma);
89 }
90 
91 /* ********************************************************************************************* */
93  OptionalMatrixVecType H) const {
94  // Copy-paste from ExpressionFactor.
95  if (H) {
97  } else {
98  return Vector1(expression_.value(x));
99  }
100 }
101 
102 /* ********************************************************************************************* */
105  return std::make_shared<ExpressionEqualityConstraint<double>>(
106  expression_, 0.0, noiseModel()->sigmas());
107 }
108 
109 /* ********************************************************************************************* */
111  const double mu) const {
112  Double_ penalty_expression(RampFunction::Ramp, expression_);
113  return std::make_shared<ExpressionFactor<double>>(penaltyNoise(mu), 0.0, penalty_expression);
114 }
115 
116 /* ********************************************************************************************* */
118  InequalityPenaltyFunction::shared_ptr func, const double mu) const {
119  if (!func) {
120  return penaltyFactor(mu);
121  }
122  // TODO(yetong): can we pass the functor directly to construct the expression?
123  Double_ error(func->function(), expression_);
124  return std::make_shared<ExpressionFactor<double>>(penaltyNoise(mu), 0.0, error);
125 }
126 
127 /* ********************************************************************************************* */
129  const double mu) const {
130  return std::make_shared<ExpressionFactor<double>>(penaltyNoise(mu), 0.0, expression_);
131 }
132 
133 /* ********************************************************************************************* */
135  size_t dimension = 0;
136  for (const auto& constraint : *this) {
137  dimension += constraint->dim();
138  }
139  return dimension;
140 }
141 
142 /* ********************************************************************************************* */
144  Vector violation(dim());
145  size_t start_idx = 0;
146  for (const auto& constraint : *this) {
147  size_t dim = constraint->dim();
148  violation.middleCols(start_idx, dim) =
149  whiten ? constraint->whitenedError(values) : constraint->unwhitenedError(values);
150  start_idx += dim;
151  }
152  return violation;
153 }
154 
155 /* ********************************************************************************************* */
157  return violationVector(values, true).norm();
158 }
159 
160 /* ********************************************************************************************* */
163  for (const auto& constraint : *this) {
164  graph.add(constraint->penaltyFactor(mu));
165  }
166  return graph;
167 }
168 
169 /* ********************************************************************************************* */
171  InequalityPenaltyFunction::shared_ptr func, const double mu) const {
173  for (const auto& constraint : *this) {
174  graph.add(constraint->penaltyFactorCustom(func, mu));
175  }
176  return graph;
177 }
178 
179 } // namespace gtsam
H
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy y set format x g set format y g set format x2 g set format y2 g set format z g set angles radians set nogrid set key title set key left top Right noreverse box linetype linewidth samplen spacing width set nolabel set noarrow set nologscale set logscale x set set pointsize set encoding default set nopolar set noparametric set set set set surface set nocontour set clabel set mapping cartesian set nohidden3d set cntrparam order set cntrparam linear set cntrparam levels auto set cntrparam points set size set set xzeroaxis lt lw set x2zeroaxis lt lw set yzeroaxis lt lw set y2zeroaxis lt lw set tics in set ticslevel set tics set mxtics default set mytics default set mx2tics default set my2tics default set xtics border mirror norotate autofreq set ytics border mirror norotate autofreq set ztics border nomirror norotate autofreq set nox2tics set noy2tics set timestamp bottom norotate set rrange[*:*] noreverse nowriteback set trange[*:*] noreverse nowriteback set urange[*:*] noreverse nowriteback set vrange[*:*] noreverse nowriteback set xlabel matrix size set x2label set timefmt d m y n H
Definition: gnuplot_common_settings.hh:74
gtsam::ScalarExpressionInequalityConstraint::expression
const Double_ & expression() const
Definition: NonlinearInequalityConstraint.h:123
gtsam::Vector1
Eigen::Matrix< double, 1, 1 > Vector1
Definition: Vector.h:42
gtsam::NoiseModelFactor::dim
size_t dim() const override
Definition: NonlinearFactor.h:241
gtsam::NonlinearInequalityConstraints::violationNorm
double violationNorm(const Values &values) const
Definition: NonlinearInequalityConstraint.cpp:156
gtsam::Expression::value
T value(const Values &values, std::vector< Matrix > *H=nullptr) const
Return value and optional derivatives, reverse AD version Notes: this is not terribly efficient,...
Definition: Expression-inl.h:143
gtsam::NonlinearInequalityConstraint::unwhitenedError
virtual Vector unwhitenedError(const Values &x, OptionalMatrixVecType H=nullptr) const override
Definition: NonlinearInequalityConstraint.cpp:30
array
int array[24]
Definition: Map_general_stride.cpp:1
gtsam::Double_
Expression< double > Double_
Definition: nonlinear/expressions.h:28
gtsam::ScalarExpressionInequalityConstraint::shared_ptr
std::shared_ptr< This > shared_ptr
Definition: NonlinearInequalityConstraint.h:82
gtsam::NoiseModelFactor::error
double error(const Values &c) const override
Definition: NonlinearFactor.cpp:138
mu
double mu
Definition: testBoundingConstraint.cpp:37
gtsam::NonlinearInequalityConstraints::penaltyGraph
NonlinearFactorGraph penaltyGraph(const double mu=1.0) const
Definition: NonlinearInequalityConstraint.cpp:161
gtsam::ScalarExpressionInequalityConstraint::LeqZero
static ScalarExpressionInequalityConstraint::shared_ptr LeqZero(const Double_ &expression, const double &sigma)
Definition: NonlinearInequalityConstraint.cpp:86
gtsam::NonlinearInequalityConstraint::active
virtual bool active(const Values &x) const override
Definition: NonlinearInequalityConstraint.cpp:47
x
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition: gnuplot_common_settings.hh:12
gtsam::NonlinearInequalityConstraints::dim
size_t dim() const
Definition: NonlinearInequalityConstraint.cpp:134
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
gtsam::ScalarExpressionInequalityConstraint::expression_
Double_ expression_
Definition: NonlinearInequalityConstraint.h:85
different_sigmas::values
HybridValues values
Definition: testHybridBayesNet.cpp:247
gtsam::NoiseModelFactor::shared_ptr
std::shared_ptr< This > shared_ptr
Definition: NonlinearFactor.h:210
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:39
gtsam::Expression::valueAndDerivatives
T valueAndDerivatives(const Values &values, const KeyVector &keys, const FastVector< int > &dims, std::vector< Matrix > &H) const
private version that takes keys and dimensions, returns derivatives
Definition: Expression-inl.h:168
gtsam::ScalarExpressionInequalityConstraint::penaltyFactorCustom
NoiseModelFactor::shared_ptr penaltyFactorCustom(InequalityPenaltyFunction::shared_ptr func, const double mu=1.0) const override
Definition: NonlinearInequalityConstraint.cpp:117
sampling::sigma
static const double sigma
Definition: testGaussianBayesNet.cpp:170
FactorGraph-inst.h
Factor Graph Base Class.
gtsam::ScalarExpressionInequalityConstraint::dims_
FastVector< int > dims_
Definition: NonlinearInequalityConstraint.h:86
gtsam::Expression< double >
gtsam::ScalarExpressionInequalityConstraint::penaltyFactorEquality
virtual NoiseModelFactor::shared_ptr penaltyFactorEquality(const double mu=1.0) const override
Definition: NonlinearInequalityConstraint.cpp:128
gtsam::NoiseModelFactor::noiseModel
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition: NonlinearFactor.h:246
gtsam::NonlinearFactorGraph
Definition: NonlinearFactorGraph.h:55
gtsam::NonlinearConstraint::penaltyFactor
virtual NoiseModelFactor::shared_ptr penaltyFactor(const double mu=1.0) const
Definition: NonlinearConstraint.h:49
gtsam::NonlinearInequalityConstraint::whitenedExpr
virtual Vector whitenedExpr(const Values &x) const
Definition: NonlinearInequalityConstraint.cpp:25
gtsam::InequalityPenaltyFunction::shared_ptr
std::shared_ptr< InequalityPenaltyFunction > shared_ptr
Definition: InequalityPenaltyFunction.h:29
gtsam::ScalarExpressionInequalityConstraint::penaltyFactor
NoiseModelFactor::shared_ptr penaltyFactor(const double mu=1.0) const override
Definition: NonlinearInequalityConstraint.cpp:110
m
Matrix3f m
Definition: AngleAxis_mimic_euler.cpp:1
gtsam::OptionalMatrixVecType
std::vector< Matrix > * OptionalMatrixVecType
Definition: NonlinearFactor.h:62
gtsam::NonlinearConstraint::penaltyNoise
SharedDiagonal penaltyNoise(const double mu) const
Definition: NonlinearConstraint.h:70
gtsam::NonlinearInequalityConstraint::unwhitenedExpr
virtual Vector unwhitenedExpr(const Values &x, OptionalMatrixVecType H=nullptr) const =0
gtsam::NonlinearInequalityConstraint::penaltyFactorEquality
virtual NoiseModelFactor::shared_ptr penaltyFactorEquality(const double mu=1.0) const
Definition: NonlinearInequalityConstraint.cpp:66
gtsam::NonlinearInequalityConstraints::penaltyGraphCustom
NonlinearFactorGraph penaltyGraphCustom(InequalityPenaltyFunction::shared_ptr func, const double mu=1.0) const
Definition: NonlinearInequalityConstraint.cpp:170
gtsam
traits
Definition: SFMdata.h:40
gtsam::Factor::keys_
KeyVector keys_
The keys involved in this factor.
Definition: Factor.h:88
gtsam::NonlinearInequalityConstraint::createEqualityConstraint
virtual NonlinearEqualityConstraint::shared_ptr createEqualityConstraint() const
Definition: NonlinearInequalityConstraint.cpp:59
gtsam::NoiseModelFactor
Definition: NonlinearFactor.h:198
gtsam::Values
Definition: Values.h:65
gtsam::RampFunction::Ramp
static double Ramp(const double x, OptionalJacobian< 1, 1 > H={})
Definition: InequalityPenaltyFunction.cpp:32
gtsam::ScalarExpressionInequalityConstraint::GeqZero
static ScalarExpressionInequalityConstraint::shared_ptr GeqZero(const Double_ &expression, const double &sigma)
Definition: NonlinearInequalityConstraint.cpp:79
gtsam::NonlinearInequalityConstraints::violationVector
Vector violationVector(const Values &values, bool whiten=true) const
Definition: NonlinearInequalityConstraint.cpp:143
gtsam::ScalarExpressionInequalityConstraint::createEqualityConstraint
NonlinearEqualityConstraint::shared_ptr createEqualityConstraint() const override
Definition: NonlinearInequalityConstraint.cpp:104
gtsam::NonlinearInequalityConstraint::penaltyFactorCustom
virtual NoiseModelFactor::shared_ptr penaltyFactorCustom(InequalityPenaltyFunction::shared_ptr func, const double mu=1.0) const
Definition: NonlinearInequalityConstraint.cpp:52
Eigen::Matrix
The matrix class, also used for vectors and row-vectors.
Definition: 3rdparty/Eigen/Eigen/src/Core/Matrix.h:178
NonlinearInequalityConstraint.h
Nonlinear inequality constraints in constrained optimization.
func
Definition: benchGeometry.cpp:23
graph
NonlinearFactorGraph graph
Definition: doc/Code/OdometryExample.cpp:2
gtsam::ScalarExpressionInequalityConstraint::unwhitenedExpr
virtual Vector unwhitenedExpr(const Values &x, OptionalMatrixVecType H=nullptr) const override
Definition: NonlinearInequalityConstraint.cpp:92
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
gtsam::NonlinearEqualityConstraint::shared_ptr
std::shared_ptr< This > shared_ptr
Definition: NonlinearEqualityConstraint.h:33
gtsam::ScalarExpressionInequalityConstraint::ScalarExpressionInequalityConstraint
ScalarExpressionInequalityConstraint(const Double_ &expression, const double &sigma)
Constructor.
Definition: NonlinearInequalityConstraint.cpp:72


gtsam
Author(s):
autogenerated on Wed Mar 19 2025 03:02:33