8

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

警告:找不到求解器“glpk”所需的“glpsol”可执行文件

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

下面的线程说它应该可以工作,但可惜不是。

如何在 Winpython 中安装 glpk-solver 和 pyomo

有任何想法吗?

4

9 回答 9

5

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

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

于 2018-10-02T10:57:13.353 回答
1

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

brew install glpk

于 2017-06-01T21:18:38.177 回答
0

阅读此处的源代码建议您尝试:

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

也许它会提供线索

于 2015-08-31T17:48:05.147 回答
0

所以看起来你的 Python 安装没有处理设置的路径变量。

为单独的“PYTHONPATH”环境变量设置了正常的 Python 安装,以查找其他模块。还可以选择在 Windows 注册表中创建一个条目,或者(如您已经提到的)将文件移动到 Python 主目录,如果未设置“PYTHONHOME”,则相对于您的安装目录可以识别该主目录。

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

于 2015-09-04T07:09:04.513 回答
0

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

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

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

注意:这是为了Python 3.4.3.4, Windows 8.1 64 bit

于 2015-09-16T01:00:26.210 回答
0

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

conda install -c conda-forge glpk

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

于 2019-05-23T09:45:04.913 回答
0

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

通过运行https://pyomo.readthedocs.io/en/latest/working_models.html中的“重复求解”示例来测试安装

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

conda create --name myenv

conda 激活 myenv

conda install -c conda-forge pyomo

conda install -c conda-forge pyomo.extras

conda install -c conda-forge glpk

从 myenv 运行 spyder 以便找到所有内容

spyder 激活 myenv

于 2020-05-24T13:40:59.727 回答
0

这是pyomo6.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文件中。因为PATH当从虚拟环境调用 Python 时,该文件夹会自动添加到系统中,所以类似的库Pyomo可以找到它。而且我不必记住在运行时将文件夹添加到 PATH ,只要我想使用Pyomo.

于 2021-12-14T16:43:00.237 回答
-1

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

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

于 2015-09-01T18:28:49.147 回答