From 05d76f6def6d1cbe49c7523ea52c4706299e09a9 Mon Sep 17 00:00:00 2001
From: Steve Tonneau <stonneau@axle.laas.fr>
Date: Tue, 9 Aug 2016 16:14:26 +0200
Subject: [PATCH] adding option to canonicalize polytope generators in api

---
 include/robust-equilibrium-lib/static_equilibrium.hh | 6 +++++-
 src/static_equilibrium.cpp                           | 5 +++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/include/robust-equilibrium-lib/static_equilibrium.hh b/include/robust-equilibrium-lib/static_equilibrium.hh
index 04c7629..a30dea6 100644
--- a/include/robust-equilibrium-lib/static_equilibrium.hh
+++ b/include/robust-equilibrium-lib/static_equilibrium.hh
@@ -50,6 +50,8 @@ private:
     * indicate the max number of attempts to compute the cone by introducing
     * a small pertubation of the system */
   const unsigned max_num_cdd_trials;
+  /** whether to remove redundant inequalities when computing double description matrices*/
+  const bool canonicalize_cdd_matrix;
 
   /** Inequality matrix and vector defining the CoM support polygon HD com + Hd <= h */
   MatrixX3 m_HD;
@@ -88,10 +90,12 @@ public:
    * @param solver_type Type of LP solver to use.
    * @param useWarmStart Whether the LP solver can warm start the resolution.
    * @param max_num_cdd_trials indicate the max number of attempts to compute the cone by introducing
+   * @param canonicalize_cdd_matrix whether to remove redundant inequalities when computing double description matrices
    * a small pertubation of the system
    */
   StaticEquilibrium(std::string name, double mass, unsigned int generatorsPerContact,
-                    SolverLP solver_type, bool useWarmStart=true, const unsigned int max_num_cdd_trials=0);
+                    SolverLP solver_type, bool useWarmStart=true, const unsigned int max_num_cdd_trials=0,
+                    const bool canonicalize_cdd_matrix=false);
 
   /**
    * @brief Returns the useWarmStart flag.
diff --git a/src/static_equilibrium.cpp b/src/static_equilibrium.cpp
index 635593b..3337f40 100644
--- a/src/static_equilibrium.cpp
+++ b/src/static_equilibrium.cpp
@@ -19,9 +19,10 @@ bool StaticEquilibrium::m_is_cdd_initialized = false;
 
 StaticEquilibrium::StaticEquilibrium(string name, double mass, unsigned int generatorsPerContact,
                                      SolverLP solver_type, bool useWarmStart,
-                                     const unsigned int max_num_cdd_trials)
+                                     const unsigned int max_num_cdd_trials, const bool canonicalize_cdd_matrix)
     : m_is_cdd_stable(true)
     , max_num_cdd_trials(max_num_cdd_trials)
+    , canonicalize_cdd_matrix(canonicalize_cdd_matrix)
 {
   if(!m_is_cdd_initialized)
   {
@@ -495,7 +496,7 @@ LP_status StaticEquilibrium::findExtremumInDirection(Cref_vector3 direction, Ref
 bool StaticEquilibrium::computePolytopeProjection(Cref_matrix6X v)
 {
 //  getProfiler().start("eigen_to_cdd");
-  dd_MatrixPtr V = cone_span_eigen_to_cdd(v.transpose());
+  dd_MatrixPtr V = cone_span_eigen_to_cdd(v.transpose(),canonicalize_cdd_matrix);
 //  getProfiler().stop("eigen_to_cdd");
 
   dd_ErrorType error = dd_NoError;
-- 
GitLab