Ask Your Question

solver parameter not available in Mixed Integer Linear Programming

asked 2021-02-28 23:20:12 +0200

Max Alekseyev gravatar image

I'm getting the following error, while trying to set up IntegralityFocus for Gurobi backend in Sage 9.2:

sage: from sage_numerical_backends_gurobi.gurobi_backend import GurobiBackend as mysolver                                                                                                                                                               
sage: milp = MixedIntegerLinearProgram(solver=mysolver)                                                                                                                                                                                                 
sage: milp.solver_parameter("IntegralityFocus", 1)                                                                                                                                                                                                      
KeyError                                  Traceback (most recent call last)
sage_numerical_backends_gurobi/gurobi_backend.pyx in sage_numerical_backends_gurobi.gurobi_backend.GurobiBackend.solver_parameter()

KeyError: 'IntegralityFocus'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
<ipython-input-3-65373ae60dc1> in <module>
----> 1 milp.solver_parameter("IntegralityFocus", Integer(1))

/usr/local/SageMath.92/local/lib/python3.8/site-packages/sage/numerical/mip.pyx in sage.numerical.mip.MixedIntegerLinearProgram.solver_parameter (build/cythonized/sage/numerical/mip.c:16597)()
   2470             return self._backend.solver_parameter(name)
   2471         else:
-> 2472             self._backend.solver_parameter(name, value)
   2474     cpdef sum(self, L):

sage_numerical_backends_gurobi/gurobi_backend.pyx in sage_numerical_backends_gurobi.gurobi_backend.GurobiBackend.solver_parameter()

ValueError: This parameter is not available. Enabling it may not be so hard, though.

Ok, it says "Enabling it may not be so hard, though." but HOW?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2021-03-01 02:04:46 +0200

Max Alekseyev gravatar image

I've figured it out. I cannot say it was hard, but it was not that easy either. Here are the steps:

  1. Download sage_numerical_backends_gurobi-9.0.0.tar.gz frrom the project page and unpack it.

  2. Since we are going to modify the package content, it's worth to change the version number to 9.0.1 in the package directory name and files VERSION and PKG-INFO.

  3. In file gurobi_backend.pyx add "IntegralityFocus" : "int" to the content of parameters_type, which is essentially a dict with allowed parameters mapped to their types.

  4. Pack everything into sage_numerical_backends_gurobi-9.0.1.tar.gz

  5. Follow this answer on how to install a package custom version in Sage.

edit flag offensive delete link more


Would you care to open a ticket on this issue and propose your patch ?

Emmanuel Charpentier gravatar imageEmmanuel Charpentier ( 2021-03-01 10:13:58 +0200 )edit

@Max Alekseyev -- congratulations on figuring this out!

You can accept your own answer to mark the question as solved.

slelievre gravatar imageslelievre ( 2021-03-01 11:28:34 +0200 )edit

I still hope for a better "not so hard" answer, so I'll keep this my "not so easy" answer unaccepted for a while. As for the ticket, I've already sent a pull request with my patch to the sage_numerical_backends_gurobi github in hope that it will be propagated to the next release of Sage naturally. Do you think I still need to create a Sage ticket?

Max Alekseyev gravatar imageMax Alekseyev ( 2021-03-01 15:39:43 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2021-02-28 23:20:12 +0200

Seen: 49 times

Last updated: Mar 01