2014-12-09 19:13:57 +08:00
|
|
|
/* ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
|
|
|
* Atlanta, Georgia 30332-0415
|
|
|
|
* All Rights Reserved
|
|
|
|
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
|
|
|
|
|
|
|
* See LICENSE for the license information
|
|
|
|
|
|
|
|
* -------------------------------------------------------------------------- */
|
|
|
|
|
2015-02-25 11:15:41 +08:00
|
|
|
/**
|
2015-02-25 22:09:33 +08:00
|
|
|
* @file InequalityFactorGraph.h
|
|
|
|
* @brief Factor graph of all LinearInequality factors
|
|
|
|
* @date Dec 8, 2014
|
|
|
|
* @author Duy-Nguyen Ta
|
2014-12-09 19:13:57 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <gtsam_unstable/linear/LinearInequality.h>
|
2016-02-22 12:36:39 +08:00
|
|
|
#include <gtsam/inference/FactorGraph-inst.h>
|
2016-01-30 01:07:14 +08:00
|
|
|
#include <gtsam/linear/VectorValues.h>
|
|
|
|
#include <gtsam/inference/FactorGraph.h>
|
2014-12-09 19:13:57 +08:00
|
|
|
|
|
|
|
namespace gtsam {
|
|
|
|
|
2016-06-18 12:28:49 +08:00
|
|
|
/**
|
|
|
|
* Collection of all Linear Inequality constraints Ax-b <= 0 of
|
|
|
|
* a Programming problem as a Factor Graph
|
|
|
|
*/
|
2015-02-25 11:25:26 +08:00
|
|
|
class InequalityFactorGraph: public FactorGraph<LinearInequality> {
|
2014-12-09 19:13:57 +08:00
|
|
|
private:
|
|
|
|
typedef FactorGraph<LinearInequality> Base;
|
|
|
|
|
|
|
|
public:
|
2023-01-18 06:05:12 +08:00
|
|
|
typedef std::shared_ptr<InequalityFactorGraph> shared_ptr;
|
2014-12-09 19:13:57 +08:00
|
|
|
|
|
|
|
/** print */
|
2021-04-30 07:43:27 +08:00
|
|
|
void print(
|
|
|
|
const std::string& str = "",
|
|
|
|
const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
|
2014-12-09 19:13:57 +08:00
|
|
|
Base::print(str, keyFormatter);
|
|
|
|
}
|
|
|
|
|
|
|
|
/** equals */
|
2016-02-22 12:36:39 +08:00
|
|
|
bool equals(const InequalityFactorGraph& other, double tol = 1e-9) const {
|
2014-12-09 19:13:57 +08:00
|
|
|
return Base::equals(other, tol);
|
|
|
|
}
|
2015-05-15 20:45:47 +08:00
|
|
|
|
2020-10-01 03:38:25 +08:00
|
|
|
/// Add a linear inequality, forwards arguments to LinearInequality.
|
|
|
|
template <class... Args> void add(Args &&... args) {
|
|
|
|
emplace_shared<LinearInequality>(std::forward<Args>(args)...);
|
|
|
|
}
|
|
|
|
|
2015-05-15 20:45:47 +08:00
|
|
|
/**
|
|
|
|
* Compute error of a guess.
|
|
|
|
* Infinity error if it violates an inequality; zero otherwise. */
|
|
|
|
double error(const VectorValues& x) const {
|
2016-06-14 10:58:36 +08:00
|
|
|
for (const sharedFactor& factor : *this) {
|
|
|
|
if (factor)
|
2016-06-18 22:39:59 +08:00
|
|
|
if (factor->error(x) > 1e-7)
|
2016-06-14 10:58:36 +08:00
|
|
|
return std::numeric_limits<double>::infinity();
|
2015-05-15 20:45:47 +08:00
|
|
|
}
|
|
|
|
return 0.0;
|
|
|
|
}
|
2014-12-09 19:13:57 +08:00
|
|
|
};
|
|
|
|
|
2014-12-22 05:02:06 +08:00
|
|
|
/// traits
|
2016-02-22 12:36:39 +08:00
|
|
|
template<>
|
|
|
|
struct traits<InequalityFactorGraph> : public Testable<InequalityFactorGraph> {
|
2014-12-22 05:02:06 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
} // \ namespace gtsam
|
2014-12-09 19:13:57 +08:00
|
|
|
|