Pyomo无法找到GLPK求解器。

11
我正在尝试使用Pyomo和GLPK求解器。我有一个经过测试的工作模型,但仍然收到一个错误,说找不到GLPK。
警告:无法找到“glpsol”可执行文件,这是求解器“glpk”所必需的。
我已成功安装glpk。我还将目录添加到我的路径变量中,以便可以全局调用执行文件。我从命令行测试了glpsol --help,并看到打印的帮助信息。
下面的线程说它应该能够工作,但遗憾的是,它没有。
任何想法?
9个回答

7
这个回答有点晚,但我想分享对我有效的解决方案。
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


1
将路径文件夹添加到Python路径中并重新启动Anaconda提示符/ Spyder对我有用。 - cookesd

2
您可以使用以下命令安装glpk求解器 - brew install glpk

1

安装glpk软件包对我有用。由于我使用Anaconda:

conda install -c conda-forge glpk

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

0

下面是相关代码,其中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中,或者使用代码在运行时动态添加它(仅在脚本运行时):

     GLPK_FOLDER_PATH = "path/to/glpk"
     os.environ["PATH"] += os.pathsep + str(GLPK_FOLDER_PATH)
    
在我的情况下,我的Python项目有一个虚拟环境.venv,我有一个安装过程,将必要的文件粘贴到.venv/Scripts文件夹中的glpsol可执行文件。因为当从虚拟环境调用Python时,该文件夹会自动添加到系统PATH中,所以像Pyomo这样的库可以找到它。我不必记得在运行时将文件夹添加到PATH中,每当我想使用Pyomo时。

0

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

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

也许它会给一个线索


我尝试使用你指定的源代码和我的导入语句,但没有成功。还是出现了相同的错误。 - Dylan Cross

0

对于有相同问题的人,我发现了一个解决方法(并非真正的解决方案!)。我将所有glpk文件复制到C:/Python27目录中,然后(惊喜!)Python现在可以找到它们了。

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


0

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

正常的 Python 安装是为了查找额外模块而设置了一个分离的“PYTHONPATH”环境变量。还有一种选择是在 Windows 注册表中进行条目设置,或者(就像你已经提到的那样)将文件移动到 Python 主目录中,如果未设置“PYTHONHOME”,则相对于安装目录识别。

更多信息请参见 Python 文档 3.3.3。 https://docs.python.org/2/using/windows.html#finding-modules


0

我曾经遇到过同样的问题。我不知道这是否是一个解决方案,但它确实让求解器工作了。

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

之后,我的Python代码就能找到求解器了。

注意:这是针对Python 3.4.3.4,Windows 8.1 64位的。


这就是我现在正在做的事情。 - Dylan Cross

0

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

通过运行https://pyomo.readthedocs.io/en/latest/working_models.html中的“Repeated Solves”示例来测试安装。

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

conda create --name myenv

conda activate myenv

conda install -c conda-forge pyomo

conda install -c conda-forge pyomo.extras

conda install -c conda-forge glpk

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

spyder activate myenv


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接