python-mip icon indicating copy to clipboard operation
python-mip copied to clipboard

Error on using highs as solver

Open mhechthz opened this issue 1 year ago • 3 comments

I have this code with python 3.11 and python 3.12:


import sys
print(sys.version_info)

from mip import Model, xsum, BINARY

# Create a model
model = Model(solver="highs")

# Add variables
x = [model.add_var(var_type=BINARY) for i in range(5)]

# Add constraints
model += xsum(x) <= 3
model += xsum(x) >= 1

# Set the objective
model.objective = xsum(x)

# Solve the model
model.optimize()

print("Objective:",model.objective_value)

# Check which solver was used
print(f"Solver used: {model.solver_name}")

I additionally installed highspy to be sure highs is available. Highs claims to be fastest open solver ;-) so I wanted to check this. On running I get error:

Traceback (most recent call last):
  File "C:\Users\...\Python\xlsb-test\solver_check.py", line 7, in <module>
    model = Model(solver="highs")
            ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\mip\model.py", line 111, in __init__
    self.constrs = mip.ConstrList(self)
                   ^^^
UnboundLocalError: cannot access local variable 'mip' where it is not associated with a value

Using

...
model = Model(solver_name=HIGHS)
...

results in

An error occurred while loading the HiGHS library:
not enough values to unpack (expected 1, got 0)
Traceback (most recent call last):
  File "C:\Users\...\Python\xlsb-test\solver_check.py", line 13, in <module>
    model = Model(solver_name=HIGHS)
            ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\di29394\AppData\Roaming\Python\Python312\site-packages\mip\model.py", line 97, in __init__
    self.solver = mip.highs.SolverHighs(self, name, sense)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\di29394\AppData\Roaming\Python\Python312\site-packages\mip\highs.py", line 690, in __init__
    raise FileNotFoundError(
FileNotFoundError: HiGHS not found.Please install the `highspy` package, orset the `PMIP_HIGHS_LIBRARY` environment variable.
Exception ignored in: <function SolverHighs.__del__ at 0x000001E57F5DE160>
Traceback (most recent call last):
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\mip\highs.py", line 728, in __del__
    self._lib.Highs_destroy(self._model)
    ^^^^^^^^^
AttributeError: 'SolverHighs' object has no attribute '_lib'

As I said, highspy is installed. Setting PMIP_HIGHS_LIBRARY to the highs.exe path results in

Traceback (most recent call last):
  File "C:\Users\...\Python\xlsb-test\solver_check.py", line 13, in <module>
    model = Model(solver_name=HIGHS)
            ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\mip\model.py", line 97, in __init__
    self.solver = mip.highs.SolverHighs(self, name, sense)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\mip\highs.py", line 703, in __init__
    self._model = highslib.Highs_create()
                  ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\cffi\api.py", line 914, in __getattr__
    make_accessor(name)
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\cffi\api.py", line 910, in make_accessor
    accessors[name](name)
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\cffi\api.py", line 840, in accessor_function
    value = backendlib.load_function(BType, name)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: function/symbol 'Highs_create' not found in library 'C:\ProgramData\SOLVERS\highs.exe': error 0x7f. Did you mean: 'Highs_clear'?
Exception ignored in: <function SolverHighs.__del__ at 0x000001B6481C6700>
Traceback (most recent call last):
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\mip\highs.py", line 728, in __del__
    self._lib.Highs_destroy(self._model)
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\cffi\api.py", line 914, in __getattr__
    make_accessor(name)
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\cffi\api.py", line 910, in make_accessor
    accessors[name](name)
  File "C:\Users\...\AppData\Roaming\Python\Python312\site-packages\cffi\api.py", line 840, in accessor_function
    value = backendlib.load_function(BType, name)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: function/symbol 'Highs_destroy' not found in library 'C:\ProgramData\SOLVERS\highs.exe': error 0x7f

So there seems to exist no way for activating highs. Maybe the docs should be updated with a highs example.

mhechthz avatar Jan 07 '25 07:01 mhechthz

This seems to be the same issue (at least the "symbol not found" issue) as #402.

As to the first problem above, the correct string to use would be "HiGHS", not "highs".

rschwarz avatar Jan 14 '25 15:01 rschwarz

I tried all versions. The error shows that the solver was recognized.

mhechthz avatar Jan 14 '25 21:01 mhechthz

Is likely to be fixed with #418

rschwarz avatar Sep 18 '25 09:09 rschwarz