簡體   English   中英

Pyomo找不到Gurobi求解器

[英]Pyomo can't find gurobi solver

我正在嘗試運行一個簡單的問題來測試我的設置:

#! /usr/bin/env python3

import pyomo.core as pyomo
from pyomo.opt import SolverFactory, IOptSolver

model = pyomo.ConcreteModel()
model.d = pyomo.Var(initialize=1, bounds=(0,2,))
model.g = pyomo.Var(initialize=1, bounds=(0,2,))
model.s = pyomo.Var(initialize=1, bounds=(0,2,))
model.b = pyomo.Var(initialize=1, bounds=(0,2,))

objective_rule = model.d - model.b*model.g + model.s*model.b
model.objective = pyomo.Objective(rule=objective_rule, sense=pyomo.minimize)

# After digging in pyomo source I figured out this
# should print all solvers available in my system
print(IOptSolver._factory_cls)

# This fails
opt = SolverFactory("gurobi", solver_io="python")
# opt = SolverFactory("neos") This also fails

# Create a model instance and optimize
instance = model
results = opt.solve(instance)
instance.display()

但是pyomo在檢測古羅比方面有問題:

{}
Traceback (most recent call last):
  File "./__test__2.py", line 21, in <module>
    results = opt.solve(instance)
  File "/usr/local/lib/python3.5/dist-packages/pyomo/opt/base/solvers.py", line 125, in solve
    self._solver_error('solve')
  File "/usr/local/lib/python3.5/dist-packages/pyomo/opt/base/solvers.py", line 153, in _solver_error
    + "\n\toptions: %s" % ( self.options, ) )
RuntimeError: Attempting to use an unavailable solver.

The SolverFactory was unable to create the solver "gurobi"
and returned an UnknownSolver object.  This error is raised at the point
where the UnknownSolver object was used as if it were valid (by calling
method "solve").

The original solver was created with the following parameters:
    executable: gurobi
    solver_io: python
    type: gurobi
    _args: ()
    options: {}

我已經使用pip安裝了pyomo:

pip3 install pyomo

我已經使用以下命令下載並安裝了gurobi(解壓縮后):

mv gurobi801 /opt/gurobi/gurobi801
cd /opt/gurobi/gurobi801/linux64/
python3 setup.py build
python3 setup.py install

並添加到我的.bash_profile中:

export GUROBI_HOME="/opt/gurobi/gurobi801/linux64"
export PATH="${PATH}:${GUROBI_HOME}/bin"

如果我從命令行調用Gurobi,它將運行正常:

gurobi.sh 
Python 2.7.13 (default, Sep  4 2017, 15:40:17) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Academic license - for non-commercial use only

Gurobi Interactive Shell (linux64), Version 8.0.1
Copyright (c) 2018, Gurobi Optimization, LLC
Type "help()" for help

gurobi>

但是pyomo無法顯示整個幫助:

pyomo help -s

Pyomo Solvers and Solver Managers
---------------------------------
Pyomo uses 'solver managers' to execute 'solvers' that perform
optimization and other forms of model analysis.  A solver directly
executes an optimizer, typically using an executable found on the
user's PATH environment.  Solver managers support a flexible mechanism
for asyncronously executing solvers either locally or remotely.  The
following solver managers are available in Pyomo:

    neos       Asynchronously execute solvers on the NEOS server
    serial     Synchronously execute solvers locally

If no solver manager is specified, Pyomo uses the serial solver
manager to execute solvers locally.  The pyro and phpyro solver
managers require the installation and configuration of the pyro
software.  The neos solver manager is used to execute solvers on the
NEOS optimization server.


Serial Solver Interfaces
------------------------
The serial, pyro and phpyro solver managers support the following
solver interfaces:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/pyomo/scripting/driver_help.py", line 338, in help_solvers
    logger.disable(logging.WARNING)
AttributeError: 'Logger' object has no attribute 'disable'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/pyomo", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/dist-packages/pyomo/scripting/pyomo_main.py", line 82, in main
    retval = _options.func(_options)
  File "/usr/local/lib/python3.5/dist-packages/pyomo/scripting/driver_help.py", line 452, in help_exec
    help_solvers()
  File "/usr/local/lib/python3.5/dist-packages/pyomo/scripting/driver_help.py", line 351, in help_solvers
    logger.disable(logging.NOTSET)
AttributeError: 'Logger' object has no attribute 'disable'

我在設置中會錯過什么? 我正在運行Ubuntu 16.04 x64

事實證明, importing pyomo.environ對檢測可用的求解器至關重要。 將腳本更新為:

#! /usr/bin/env python3

import pyomo.environ # <---  HAD MISSING #
from pyomo.opt import SolverFactory, IOptSolver

import pyomo.core as pyomo

model = pyomo.ConcreteModel()
model.d = pyomo.Var(initialize=0, bounds=(0,2,))
model.g = pyomo.Var(initialize=0, bounds=(0,2,))
model.s = pyomo.Var(initialize=0, bounds=(0,2,))
model.b = pyomo.Var(initialize=0, bounds=(0,2,))

objective_rule = model.d - model.b*model.g + model.s*model.b
model.objective = pyomo.Objective(rule=objective_rule, sense=pyomo.minimize)

# Should print all available solvers
print(sorted(IOptSolver._factory_cls.keys()))
opt = SolverFactory("gurobi", solver_io="python")

# Create a model instance and optimize
instance = model
results = opt.solve(instance)
instance.display()

產量:

['_cbc_shell', '_cplex_shell', '_gams_direct', '_gams_shell', '_glpk_direct', '_glpk_shell', '_glpk_shell_4_42', '_glpk_shell_old', '_gurobi_shell', '_mock_asl', '_mock_cbc', '_mock_cplex', '_mock_glpk', '_mock_pico', '_mock_xpress', '_neos', '_pico_shell', '_xpress_shell', 'asl', 'baron', 'bilevel_blp_global', 'bilevel_blp_local', 'bilevel_ld', 'cbc', 'conopt', 'cplex', 'cplex_direct', 'cplex_persistent', 'gams', 'gdpopt', 'glpk', 'gurobi', 'gurobi_direct', 'gurobi_persistent', 'ipopt', 'mpec_minlp', 'mpec_nlp', 'path', 'pico', 'ps', 'py', 'scip', 'trustregion', 'xpress']
Academic license - for non-commercial use only
Model unknown

  Variables:
    d : Size=1, Index=None
        Key  : Lower : Value : Upper : Fixed : Stale : Domain
        None :     0 :     0 :     2 : False :  True :  Reals
    g : Size=1, Index=None
        Key  : Lower : Value : Upper : Fixed : Stale : Domain
        None :     0 :     0 :     2 : False :  True :  Reals
    s : Size=1, Index=None
        Key  : Lower : Value : Upper : Fixed : Stale : Domain
        None :     0 :     0 :     2 : False :  True :  Reals
    b : Size=1, Index=None
        Key  : Lower : Value : Upper : Fixed : Stale : Domain
        None :     0 :     0 :     2 : False :  True :  Reals

  Objectives:
    objective : Size=1, Index=None, Active=True
        Key  : Active : Value
        None :   True :   0.0

  Constraints:
    None

沒有進行適當的優化,但至少解決了求解器檢測問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM