[Lemon-commits] Alpar Juttner: Enable/disable options for LP/MIP...

Lemon HG hg at lemon.cs.elte.hu
Wed Jul 24 11:11:12 CEST 2013


details:   http://lemon.cs.elte.hu/hg/lemon/rev/fc3854d936f7
changeset: 1232:fc3854d936f7
user:      Alpar Juttner <alpar [at] cs.elte.hu>
date:      Sat May 25 06:59:31 2013 +0200
description:
	Enable/disable options for LP/MIP backends (#465)

diffstat:

 CMakeLists.txt       |  61 +++++++++++++++++++++++++++++++++++++++++++++++++--
 INSTALL              |  48 ++++++++++++++++++++++++++++++++++++++++-
 cmake/FindCOIN.cmake |   7 -----
 cmake/FindGLPK.cmake |   7 -----
 cmake/FindILOG.cmake |   6 -----
 lemon/cbc.h          |   1 -
 lemon/config.h.in    |   2 +
 lemon/lp.h           |  29 +++++++++++------------
 test/lp_test.cc      |   3 +-
 9 files changed, 122 insertions(+), 42 deletions(-)

diffs (259 lines):

diff -r 1782aa72495a -r fc3854d936f7 CMakeLists.txt
--- a/CMakeLists.txt	Fri Jul 20 17:09:01 2012 +0200
+++ b/CMakeLists.txt	Sat May 25 06:59:31 2013 +0200
@@ -61,9 +61,64 @@
 
 FIND_PACKAGE(Doxygen)
 FIND_PACKAGE(Ghostscript)
-FIND_PACKAGE(GLPK 4.33)
-FIND_PACKAGE(ILOG)
-FIND_PACKAGE(COIN)
+
+SET(LEMON_ENABLE_GLPK YES CACHE STRING "Enable GLPK solver backend.")
+SET(LEMON_ENABLE_ILOG YES CACHE STRING "Enable ILOG (CPLEX) solver backend.")
+SET(LEMON_ENABLE_COIN YES CACHE STRING "Enable COIN solver backend.")
+
+IF(LEMON_ENABLE_GLPK) 
+  FIND_PACKAGE(GLPK 4.33)
+ENDIF(LEMON_ENABLE_GLPK)
+IF(LEMON_ENABLE_ILOG)
+  FIND_PACKAGE(ILOG)
+ENDIF(LEMON_ENABLE_ILOG)
+IF(LEMON_ENABLE_COIN)
+  FIND_PACKAGE(COIN)
+ENDIF(LEMON_ENABLE_COIN)
+
+IF(GLPK_FOUND)
+  SET(LEMON_HAVE_LP TRUE)
+  SET(LEMON_HAVE_MIP TRUE)
+  SET(LEMON_HAVE_GLPK TRUE)
+ENDIF(GLPK_FOUND)
+IF(ILOG_FOUND)
+  SET(LEMON_HAVE_LP TRUE)
+  SET(LEMON_HAVE_MIP TRUE)
+  SET(LEMON_HAVE_ILOG TRUE)
+ENDIF(ILOG_FOUND)
+IF(COIN_FOUND)
+  SET(LEMON_HAVE_LP TRUE)
+  SET(LEMON_HAVE_MIP TRUE)
+  SET(LEMON_HAVE_CLP TRUE)
+  SET(LEMON_HAVE_CBC TRUE)
+ENDIF(COIN_FOUND)
+
+IF(ILOG_FOUND)
+  SET(DEFAULT_LP "CPLEX")
+  SET(DEFAULT_MIP "CPLEX")
+ELSEIF(COIN_FOUND)
+  SET(DEFAULT_LP "CLP")
+  SET(DEFAULT_MIP "CBC")
+ELSEIF(GLPK_FOUND)
+  SET(DEFAULT_LP "GLPK")
+  SET(DEFAULT_MIP "GLPK")
+ENDIF()
+
+IF(NOT LEMON_DEFAULT_LP OR
+    (NOT ILOG_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CPLEX")) OR
+    (NOT COIN_FOUND AND (LEMON_DEFAULT_LP STREQUAL "CLP")) OR
+    (NOT GLPK_FOUND AND (LEMON_DEFAULT_LP STREQUAL "GLPK")))
+  SET(LEMON_DEFAULT_LP ${DEFAULT_LP} CACHE STRING
+    "Default LP solver backend (GLPK, CPLEX or CLP)" FORCE)
+ENDIF()
+IF(NOT LEMON_DEFAULT_MIP OR
+    (NOT ILOG_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CPLEX")) OR
+    (NOT COIN_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "CBC")) OR
+    (NOT GLPK_FOUND AND (LEMON_DEFAULT_MIP STREQUAL "GLPK")))
+  SET(LEMON_DEFAULT_MIP ${DEFAULT_MIP} CACHE STRING
+    "Default MIP solver backend (GLPK, CPLEX or CBC)" FORCE)
+ENDIF()
+
 
 IF(DEFINED ENV{LEMON_CXX_WARNING})
   SET(CXX_WARNING $ENV{LEMON_CXX_WARNING})
diff -r 1782aa72495a -r fc3854d936f7 INSTALL
--- a/INSTALL	Fri Jul 20 17:09:01 2012 +0200
+++ b/INSTALL	Sat May 25 06:59:31 2013 +0200
@@ -106,11 +106,57 @@
   Build shared library instead of static one. Think twice if you
   really want to use this option.
 
+-DLEMON_DOC_SOURCE_BROWSER=YES
+
+  Include the browsable cross referenced LEMON source code into the
+  doc. It makes the doc quite bloated, but may be useful for
+  developing LEMON itself.
+
+-DLEMON_DOC_USE_MATHJAX=YES
+
+  Use MathJax (http://mathjax.org) for rendering the math formulae in
+  the doc.  It of much higher quality compared to the default LaTeX
+  generated static images and it allows copy&paste of the formulae to
+  LaTeX, Open Office, MS Word etc. documents.
+
+  On the other hand, it needs either Internet access or a locally
+  installed version of MathJax to properly render the doc.
+
+-DLEMON_DOC_MATHJAX_RELPATH=DIRECTORY
+  
+  The location of the MathJax library. It defaults to
+  http://www.mathjax.org/mathjax, which necessitates Internet access
+  for proper rendering. The easiest way to make it usable offline is
+  to set this parameter to 'mathjax' and copy all files of the MathJax
+  library into the 'doc/html/mathjax' subdirectory of the build
+  location.
+
+  See http://docs.mathjax.org/en/latest/installation.html for more details.
+
+  
+-DLEMON_ENABLE_GLPK=NO
+-DLEMON_ENABLE_COIN=NO
+-DLEMON_ENABLE_ILOG=NO
+
+  Enable optional third party libraries. They are all enabled by default. 
+
+-DLEMON_DEFAULT_LP=GLPK
+
+  Sets the default LP solver backend. The supported values are
+  CPLEX, CLP and GLPK. By default, it is set to the first one which
+  is enabled and succesfully discovered.
+
+-DLEMON_DEFAULT_MIP=GLPK
+
+  Sets the default MIP solver backend. The supported values are
+  CPLEX, CBC and GLPK. By default, it is set to the first one which
+  is enabled and succesfully discovered.
+
 -DGLPK_ROOT_DIR=DIRECTORY
 -DCOIN_ROOT_DIR=DIRECTORY
 -DILOG_ROOT_DIR=DIRECTORY
 
-  Install root directory prefixes of optional third party libraries.
+  Root directory prefixes of optional third party libraries.
 
 Makefile Variables
 ==================
diff -r 1782aa72495a -r fc3854d936f7 cmake/FindCOIN.cmake
--- a/cmake/FindCOIN.cmake	Fri Jul 20 17:09:01 2012 +0200
+++ b/cmake/FindCOIN.cmake	Sat May 25 06:59:31 2013 +0200
@@ -108,10 +108,3 @@
   COIN_ZLIB_LIBRARY
   COIN_BZ2_LIBRARY
 )
-
-IF(COIN_FOUND)
-  SET(LEMON_HAVE_LP TRUE)
-  SET(LEMON_HAVE_MIP TRUE)
-  SET(LEMON_HAVE_CLP TRUE)
-  SET(LEMON_HAVE_CBC TRUE)
-ENDIF(COIN_FOUND)
diff -r 1782aa72495a -r fc3854d936f7 cmake/FindGLPK.cmake
--- a/cmake/FindGLPK.cmake	Fri Jul 20 17:09:01 2012 +0200
+++ b/cmake/FindGLPK.cmake	Sat May 25 06:59:31 2013 +0200
@@ -53,10 +53,3 @@
 ENDIF(GLPK_FOUND)
 
 MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR)
-
-IF(GLPK_FOUND)
-  SET(LEMON_HAVE_LP TRUE)
-  SET(LEMON_HAVE_MIP TRUE)
-  SET(LEMON_HAVE_GLPK TRUE)
-ENDIF(GLPK_FOUND)
-
diff -r 1782aa72495a -r fc3854d936f7 cmake/FindILOG.cmake
--- a/cmake/FindILOG.cmake	Fri Jul 20 17:09:01 2012 +0200
+++ b/cmake/FindILOG.cmake	Sat May 25 06:59:31 2013 +0200
@@ -100,9 +100,3 @@
   ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR ILOG_CPLEX_DLL
   ILOG_CONCERT_LIBRARY ILOG_CONCERT_INCLUDE_DIR ILOG_CONCERT_DLL
   )
-
-IF(ILOG_FOUND)
-  SET(LEMON_HAVE_LP TRUE)
-  SET(LEMON_HAVE_MIP TRUE)
-  SET(LEMON_HAVE_CPLEX TRUE)
-ENDIF(ILOG_FOUND)
diff -r 1782aa72495a -r fc3854d936f7 lemon/cbc.h
--- a/lemon/cbc.h	Fri Jul 20 17:09:01 2012 +0200
+++ b/lemon/cbc.h	Sat May 25 06:59:31 2013 +0200
@@ -16,7 +16,6 @@
  *
  */
 
-// -*- C++ -*-
 #ifndef LEMON_CBC_H
 #define LEMON_CBC_H
 
diff -r 1782aa72495a -r fc3854d936f7 lemon/config.h.in
--- a/lemon/config.h.in	Fri Jul 20 17:09:01 2012 +0200
+++ b/lemon/config.h.in	Sat May 25 06:59:31 2013 +0200
@@ -6,5 +6,7 @@
 #cmakedefine LEMON_HAVE_CPLEX 1
 #cmakedefine LEMON_HAVE_CLP 1
 #cmakedefine LEMON_HAVE_CBC 1
+#cmakedefine LEMON_DEFAULT_LP @LEMON_DEFAULT_LP@
+#cmakedefine LEMON_DEFAULT_MIP @LEMON_DEFAULT_MIP@
 #cmakedefine LEMON_USE_PTHREAD 1
 #cmakedefine LEMON_USE_WIN32_THREADS 1
diff -r 1782aa72495a -r fc3854d936f7 lemon/lp.h
--- a/lemon/lp.h	Fri Jul 20 17:09:01 2012 +0200
+++ b/lemon/lp.h	Sat May 25 06:59:31 2013 +0200
@@ -59,32 +59,31 @@
   ///The default MIP solver identifier.
   ///\ingroup lp_group
   ///
-  ///Currently, the possible values are \c GLPK or \c CPLEX
+  ///Currently, the possible values are \c GLPK, \c CPLEX or \c CBC
 #define LEMON_DEFAULT_MIP SOLVER
   ///The default MIP solver.
 
   ///The default MIP solver.
   ///\ingroup lp_group
   ///
-  ///Currently, it is either \c GlpkMip or \c CplexMip
+  ///Currently, it is either \c GlpkMip, \c CplexMip , \c CbcMip
   typedef GlpkMip Mip;
 #else
-#ifdef LEMON_HAVE_GLPK
-# define LEMON_DEFAULT_LP GLPK
+#if LEMON_DEFAULT_LP == GLPK
   typedef GlpkLp Lp;
-# define LEMON_DEFAULT_MIP GLPK
-  typedef GlpkMip Mip;
-#elif LEMON_HAVE_CPLEX
-# define LEMON_DEFAULT_LP CPLEX
+#elif LEMON_DEFAULT_LP == CPLEX
   typedef CplexLp Lp;
-# define LEMON_DEFAULT_MIP CPLEX
+#elif LEMON_DEFAULT_LP == SOPLEX
+  typedef SoplexLp Lp;
+#elif LEMON_DEFAULT_LP == CLP
+  typedef ClpLp Lp;
+#endif
+#if LEMON_DEFAULT_MIP == GLPK
+  typedef GlpkLp Mip;
+#elif LEMON_DEFAULT_MIP == CPLEX
   typedef CplexMip Mip;
-#elif LEMON_HAVE_SOPLEX
-# define DEFAULT_LP SOPLEX
-  typedef SoplexLp Lp;
-#elif LEMON_HAVE_CLP
-# define DEFAULT_LP CLP
-  typedef ClpLp Lp;
+#elif LEMON_DEFAULT_MIP == CBC
+  typedef CbcMip Mip;
 #endif
 #endif
 
diff -r 1782aa72495a -r fc3854d936f7 test/lp_test.cc
--- a/test/lp_test.cc	Fri Jul 20 17:09:01 2012 +0200
+++ b/test/lp_test.cc	Sat May 25 06:59:31 2013 +0200
@@ -240,8 +240,7 @@
 
   {
     LP::DualExpr e,f,g;
-    LP::Row p1 = INVALID, p2 = INVALID, p3 = INVALID,
-      p4 = INVALID, p5 = INVALID;
+    LP::Row p1 = INVALID, p2 = INVALID;
 
     e[p1]=2;
     e[p1]+=2;


More information about the Lemon-commits mailing list