Pyomo 找不到 GLPK 求解器

Pyomo can't locate GLPK solver

我正在尝试将 GLPK 求解器与 Pyomo 一起使用。我有一个经过测试的工作模型,但一直收到错误消息,提示找不到 GLPK。

WARNING: Could not locate the 'glpsol' executable, which is required for solver 'glpk'

我已经成功安装了glpk。我还将目录添加到我的路径变量中,以便可以全局调用执行的内容。我从我的命令行用 glpsol --help 测试了这个,并看到打印的帮助信息。

下面的帖子说它应该可以工作,但可惜的是,事实并非如此。

How do you install glpk-solver along with pyomo in Winpython

有什么想法吗?

阅读源代码here建议您尝试:

from pyutilib.services import register_executable, registered_executable
register_executable(name='glpsol')

也许会给出线索

对于遇到相同问题的任何人,我找到了解决方法(不是解决方案!)。我将所有 glpk 文件复制到我的 C:/Python27 目录中,并且(惊喜!)Python 现在可以找到它们。

在接受这个之前,我会等待一个真正的解决方案。

所以您的 Python 安装似乎没有处理设置的路径变量。

一个正常的Python安装是为一个单独的"PYTHONPATH"环境变量设置的,以查找其他模块。 还有一个选项可以在 windows 注册表中创建一个条目,或者(就像你已经提到的那样)将文件移动到 Python 主目录,如果 "PYTHONHOME" 未设置。

更多信息请参见 3.3.3 下的 Python 纪录片。 https://docs.python.org/2/using/windows.html#finding-modules

我遇到了同样的问题。我不知道这是否是 solution,但它确实让求解器工作了。

下载后Windows安装。我复制了 w64 文件夹中的所有文件并将它们直接粘贴到我的 Python 工作目录中。

之后,我的 python 代码可以找到求解器。

注意:这是针对 Python 3.4.3.4, Windows 8.1 64 bit

您可以使用此命令安装 glpk 解算器 -

brew install glpk

这个答案来晚了,但我想分享对我有用的解决方案。

solvername='glpk'

solverpath_folder='C:\glpk\w64' #does not need to be directly on c drive

solverpath_exe='C:\glpk\w64\glpsol' #does not need to be directly on c drive

我曾经这样做过:

sys.path.append(solverpath_folder)

solver=SolverFactory(solvername)

这适用于 coin-or 中的 cbc 求解器,但不适用于 glpk。然后我尝试了一些不同的东西:

solver=SolverFactory(solvername,executable=solverpath_exe)

这对 cbc 和 glpk 都有效。不知道为什么会这样(我真的什么也没做)。

版本:Python 2.7 或 Python 3.7(均已测试),glpk 4.65

安装 glpk 包对我有用。当我使用 Anaconda 时:

conda install -c conda-forge glpk

这是在我的 PATH 变量中包含 'glpsol' 可执行文件的文件夹路径之后。

我在 Windows 10 上遇到了同样的问题,这是因为 glpk 安装在不同的 conda 环境中。下面是安装 pyomo 和 glpk 的完整步骤。

通过来自 https://pyomo.readthedocs.io/en/latest/working_models.html

的 运行ning 'Repeated Solves' 示例测试安装

说明(运行 在 anaconda 提示符下)

conda create --name myenv

conda 激活 myenv

conda 安装-c conda-forge pyomo

conda 安装-c conda-forge pyomo.extras

conda 安装-c conda-forge glpk

运行 来自 myenv 的 spyder 以便 if 找到一切

spyder 激活 myenv

这是 pyomo 6.2 搜索 glpsol 可执行文件的相关部分 https://github.com/Pyomo/pyomo/blob/568c6595a56570c6ea69c3ae3198b73b9f473abd/pyomo/common/fileutils.py#L288

def _path():
    return (os.environ.get('PATH','') or os.defpath).split(os.pathsep)

解决PATH问题有两种选择:

  1. 将可执行文件放在 PATH 中的可用文件夹中(推荐做法)。 glpsol 可执行文件必须位于 PATH 系统环境变量中存在的文件夹之一中。在您的代码中使用 print(os.environ['PATH']) 查看可用的文件夹并将其放在那里。

  2. 在运行时将文件夹添加到 PATH。您可以将其静态添加到系统 PATH 或使用代码动态添加(仅当您的脚本为 运行 时):

     GLPK_FOLDER_PATH = "path/to/glpk"
     os.environ["PATH"] += os.pathsep + str(GLPK_FOLDER_PATH)
    

在我的例子中,我的 Python 项目有一个虚拟环境 .venv,并且我有一个安装过程,在我安装项目时粘贴 glpsol 可执行文件所必需的文件在 .venv/Scripts 文件夹中。因为当从虚拟环境调用 Python 时,该文件夹会自动添加到系统 PATH 中,所以像 Pyomo 这样的库可以找到它。而且我不必记得在运行时将文件夹添加到 PATH 每当我想使用 Pyomo.