21#include <gtsam/config.h>
23#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V43
41template <
class LinearGraph>
42KeyDimMap collectKeyDim(
const LinearGraph& linearGraph) {
44 for (
const typename LinearGraph::sharedFactor& factor : linearGraph) {
45 if (!factor)
continue;
46 for (
Key key : factor->keys())
47 keyDimMap[key] = factor->getDim(factor->find(key));
56 using shared_ptr = std::shared_ptr<LP>;
59 EqualityFactorGraph equalities;
60 InequalityFactorGraph inequalities;
62 mutable KeyDimMap cachedConstrainedKeyDimMap_;
66 bool isFeasible(
const VectorValues& x)
const {
67 return (equalities.error(x) == 0 && inequalities.error(x) == 0);
71 void print(
const string& s =
"")
const {
72 std::cout << s << std::endl;
73 cost.print(
"Linear cost: ");
74 equalities.print(
"Linear equality factors: ");
75 inequalities.print(
"Linear inequality factors: ");
79 bool equals(
const LP& other,
double tol = 1e-9)
const {
80 return cost.equals(other.cost) && equalities.equals(other.equalities)
81 && inequalities.equals(other.inequalities);
84 const KeyDimMap& constrainedKeyDimMap()
const {
85 if (!cachedConstrainedKeyDimMap_.empty())
86 return cachedConstrainedKeyDimMap_;
88 cachedConstrainedKeyDimMap_ = collectKeyDim(equalities);
89 KeyDimMap keysDim2 = collectKeyDim(inequalities);
90 cachedConstrainedKeyDimMap_.insert(keysDim2.begin(), keysDim2.end());
91 return cachedConstrainedKeyDimMap_;
94 Vector costGradient(Key key,
const VectorValues& delta)
const {
95 Vector g = Vector::Zero(delta.at(key).size());
96 Factor::const_iterator it = cost.find(key);
97 if (it != cost.end()) g = cost.getA(it).transpose();
Factor graph of all LinearInequality factors.
Factor graph of all LinearEquality factors.
LinearCost derived from JacobianFactor to support linear cost functions c'x.
Global functions in a separate testing namespace.
Definition chartTesting.h:28
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
std::map< Key, size_t > KeyDimMap
Map from variable key to dimension.
Definition MultifrontalClique.h:51
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:152