Class HPolytope

template<typename Point, typename MT_type = Eigen::Matrix<typename Point::FT, Eigen::Dynamic, Eigen::Dynamic>>
class HPolytope

This class describes a polytope in H-representation or an H-polytope i.e. a polytope defined by a set of linear inequalities

Template Parameters:

Point – Point type

Public Types

typedef Point PointType
typedef Point::FT NT
typedef std::vector<NT>::iterator viterator
typedef MT_type MT
typedef Eigen::Matrix<NT, Eigen::Dynamic, 1> VT
typedef Eigen::Matrix<NT, Eigen::Dynamic, Eigen::Dynamic> DenseMT
typedef Eigen::SparseMatrix<NT, Eigen::RowMajor> SparseRowMT

Public Functions

inline HPolytope()
inline HPolytope(unsigned d_, MT const &A_, VT const &b_)
template<typename T = DenseMT>
inline HPolytope(unsigned d_, DenseMT const &A_, VT const &b_, typename std::enable_if<!std::is_same<MT, T>::value, T>::type* = 0)
inline HPolytope(HPolytope<Point, MT> const &p)
inline HPolytope(std::vector<std::vector<NT>> const &Pin)
inline std::pair<Point, NT> InnerBall() const
inline void set_InnerBall(std::pair<Point, NT> const &innerball)
inline void set_interior_point(Point const &r)
inline std::pair<Point, NT> ComputeInnerBall()
inline unsigned int dimension() const
inline int num_of_hyperplanes() const
inline int num_of_generators() const
inline MT get_mat() const
inline MT get_AA() const
inline VT get_vec() const
inline VT get_row(int facet_index) const
inline bool is_normalized()
inline void set_mat(MT const &A2)
inline void set_vec(VT const &b2)
inline Point get_mean_of_vertices() const
inline NT get_max_vert_norm() const
inline void print()
inline int is_in(Point const &p, NT tol = NT(0)) const
inline std::pair<NT, NT> line_intersect(Point const &r, Point const &v) const
inline std::pair<NT, NT> line_intersect(Point const &r, Point const &v, VT &Ar, VT &Av, bool pos = false) const
inline std::pair<NT, NT> line_intersect(Point const &r, Point const &v, VT &Ar, VT &Av, NT const &lambda_prev, bool pos = false) const
inline std::pair<NT, int> line_positive_intersect(Point const &r, Point const &v, VT &Ar, VT &Av) const
inline std::pair<NT, int> line_positive_intersect(Point const &r, Point const &v, VT &Ar, VT &Av, NT const &lambda_prev) const
template<typename update_parameters>
inline std::pair<NT, int> line_first_positive_intersect(Point const &r, Point const &v, VT &Ar, VT &Av, update_parameters &params) const
template<typename update_parameters>
inline std::pair<NT, int> line_positive_intersect(Point const &r, Point const &v, VT &Ar, VT &Av, NT const &lambda_prev, DenseMT const &AA, update_parameters &params) const
template<typename update_parameters, typename set_type, typename AA_type>
inline std::pair<NT, int> line_positive_intersect(Point const &r, VT &Ar, VT &Av, NT const &lambda_prev, set_type &distances_set, AA_type const &AA, update_parameters &params) const
template<typename update_parameters>
inline std::pair<NT, int> line_positive_intersect(Point const &r, Point const &v, VT &Ar, VT &Av, NT const &lambda_prev, update_parameters &params) const
template<typename Params>
inline std::pair<NT, int> sparse_line_positive_intersect(Point const &r_rounded, Point const &v_rounded, VT &Ar, VT &Av, Params &params) const
template<typename Params>
inline std::pair<NT, int> sparse_line_positive_intersect(Point const &r_rounded, Point const &v_rounded, VT &Ar, VT &Av, NT lambda_prev, Params &params) const
inline std::pair<NT, NT> line_intersect_coord(Point const &r, unsigned int const &rand_coord, VT &lamdas) const
inline std::pair<NT, NT> line_intersect_coord(Point const &r, Point const &r_prev, unsigned int const &rand_coord, unsigned int const &rand_coord_prev, VT &lamdas) const
inline std::pair<NT, int> get_positive_quadratic_root(Point const &r, Point const &v, VT &Ac, NT const &T, VT &Ar, VT &Av, int &facet_prev) const
inline std::pair<NT, int> quadratic_positive_intersect(Point const &r, Point const &v, VT &Ac, NT const &T, VT &Ar, VT &Av, int &facet_prev) const
inline std::pair<NT, int> quadratic_positive_intersect(Point const &r, Point const &v, VT &Ac, NT const &T, VT &Ar, VT &Av, NT const &lambda_prev, int &facet_prev) const
inline NT pick_first_intersection_time_with_boundary(NT const &lamda1, NT const &lamda2, int const &current_facet, int const &previous_facet) const
inline std::pair<NT, int> trigonometric_positive_intersect(Point const &r, Point const &v, NT const &omega, int &facet_prev) const
template<typename T_type>
inline void linear_transformIt(T_type const &T)
inline void shift(const VT &c)
inline std::vector<NT> get_dists(NT const &radius) const
template<typename T>
inline bool get_points_for_rounding(T const&)
inline MT get_T() const
inline void normalize()
inline void compute_reflection(Point &v, Point const&, int const &facet) const
inline void resetFlags()
inline NT log_barrier(Point &x, NT t = NT(100)) const
inline Point grad_log_barrier(Point &x, NT t = NT(100))
template<typename update_parameters>
inline void compute_reflection(Point &v, Point const&, update_parameters const &params) const
template<typename Params>
inline void sparse_compute_reflection(Point &v_rounded, Params const &params) const
template<typename update_parameters>
inline auto compute_reflection_abw_sparse(Point &v, Point &p, update_parameters const &params) const
template<typename DenseSparseMT, typename update_parameters>
inline NT compute_reflection(Point &v, Point &p, NT &vEv, DenseSparseMT const &AE, VT const &AEA, update_parameters const &params) const
inline void update_position_internal(NT&)
template<class bfunc, class NonLinearOracle>
inline std::tuple<NT, Point, int> curve_intersect(NT t_prev, NT t0, NT eta, std::vector<Point> &coeffs, bfunc phi, bfunc grad_phi, NonLinearOracle &intersection_oracle, int ignore_facet = -1)