From 37c6bf1b9aa5c9926e85de6f9281db0e3553f9c5 Mon Sep 17 00:00:00 2001
From: Pierre Fernbach <pierre.fernbach@laas.fr>
Date: Thu, 2 Feb 2017 14:06:27 +0100
Subject: [PATCH] test if LP problem is unbounded, and return alpha0 = infinity

---
 src/static_equilibrium.cpp | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/static_equilibrium.cpp b/src/static_equilibrium.cpp
index 2266db7..13c6589 100644
--- a/src/static_equilibrium.cpp
+++ b/src/static_equilibrium.cpp
@@ -28,7 +28,7 @@ StaticEquilibrium::StaticEquilibrium(string name, double mass, unsigned int gene
   {
     init_cdd_library();
     m_is_cdd_initialized = true;
-    srand ( (unsigned int) (time(NULL)) );
+    //srand ( (unsigned int) (time(NULL)) );
   }
 
   if(generatorsPerContact<3)
@@ -596,6 +596,11 @@ LP_status StaticEquilibrium::findMaximumAcceleration(Cref_matrixXX A, Cref_vecto
 
 
   LP_status lpStatus = m_solver->solve(c, lb, ub, A, Alb, Aub, b_a0);
+  if(lpStatus==LP_STATUS_UNBOUNDED){
+    SEND_DEBUG_MSG("Primal LP problem is unbounded : "+toString(lpStatus));
+    alpha0 = std::numeric_limits<double>::infinity();
+    return lpStatus;
+  }
   if(lpStatus==LP_STATUS_OPTIMAL)
   {
     alpha0 = -1.0 * m_solver->getObjectiveValue();
@@ -618,7 +623,7 @@ bool StaticEquilibrium::checkAdmissibleAcceleration(Cref_matrixXX G, Cref_matrix
 
 
   LP_status lpStatus = m_solver->solve(c, lb, ub, G, Alb, Aub, b);
-  if(lpStatus==LP_STATUS_OPTIMAL)
+  if(lpStatus==LP_STATUS_OPTIMAL || lpStatus==LP_STATUS_UNBOUNDED)
   {
     return true;
   }
-- 
GitLab