From cf67e12e50f2cb6ff816133fc98ea980ba6b5c0f Mon Sep 17 00:00:00 2001 From: Haroldo Date: Wed, 31 Jul 2019 22:25:31 +0200 Subject: [PATCH] use GUROBI_HOME environment variable when available Former-commit-id: d8eef3f9d0b5e557cf94575d227eab9e6d9f0bba [formerly 0bdf9fb5b0f44d242f686d4bddd8757c6f097732] Former-commit-id: 0e40596543cf80662f274a816826d941d41a632c --- mip/cbc.py | 2 +- mip/constants.py | 2 +- mip/gurobi.py | 26 +++++++++++++++++++------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/mip/cbc.py b/mip/cbc.py index 4eebb8cc..c34896a6 100644 --- a/mip/cbc.py +++ b/mip/cbc.py @@ -681,7 +681,7 @@ def var_get_lb(self, var: "Var") -> float: return float(lb[var.idx]) def var_get_ub(self, var: "Var") -> float: - ub = cbclib.Cbc_getColLower(self._model) + ub = cbclib.Cbc_getColUpper(self._model) if ub == ffi.NULL: raise Exception('Error while getting upper bound of variables') return float(ub[var.idx]) diff --git a/mip/constants.py b/mip/constants.py index 0d6138de..47069852 100644 --- a/mip/constants.py +++ b/mip/constants.py @@ -2,7 +2,7 @@ from enum import Enum -VERSION = '1.3.4' +VERSION = '1.3.6' # epsilon number (practical zero) EPS = 10e-6 diff --git a/mip/gurobi.py b/mip/gurobi.py index 039b1da2..a5f2e15e 100644 --- a/mip/gurobi.py +++ b/mip/gurobi.py @@ -2,6 +2,9 @@ from sys import maxsize from typing import List, Tuple from os.path import isfile +import os.path +from glob import glob +from os import environ from cffi import FFI from mip.model import Model, Solver, Column, Var, LinExpr, Constr, \ VConstrList, VVarList @@ -13,18 +16,27 @@ found = False lib_path = None - for major_ver in reversed(range(6, 10)): - for minor_ver in reversed(range(0, 11)): - lib_path = find_library('gurobi{}{}'.format(major_ver, - minor_ver)) + if 'GUROBI_HOME' in environ: + libfile = glob(os.path.join(os.environ['GUROBI_HOME'], + 'lib/libgurobi*[0-9].so')) + if libfile: + lib_path = libfile[0] + + if lib_path is None: + for major_ver in reversed(range(6, 10)): + for minor_ver in reversed(range(0, 11)): + lib_path = find_library('gurobi{}{}'.format(major_ver, + minor_ver)) + if lib_path is not None: + break if lib_path is not None: break - if lib_path is not None: - break if lib_path is None: raise Exception("""Gurobi not found. Plase check if the - Gurobi dynamic loadable library if reachable + Gurobi dynamic loadable library is reachable or define + the environment variable GUROBI_HOME indicating the gurobi + installation path. """) ffi = FFI()