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 在检测 gurobi 时遇到问题:
{}
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
没有进行适当的优化,但至少解决了求解器检测问题。
我正在尝试 运行 一个简单的问题来测试我的设置:
#! /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 在检测 gurobi 时遇到问题:
{}
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
没有进行适当的优化,但至少解决了求解器检测问题。