首页 > 解决方案 > Pyomo scip 求解器错误 FileNotFoundError

问题描述

我正在尝试在 ubuntu 20.04 上的pyomo中使用scip求解器,但在调用求解器时收到一条奇怪的错误消息:

FileNotFoundError:[Errno 2] 没有这样的文件或目录:'/tmp/tmpxsrkdky5.pyomo.sol'

pyomo已通过pip并通过其下载页面scip上的安装程序脚本安装 。由于依赖问题,我无法安装该文件——在 Ubuntu 20.04 而不是 18.04 上。安装程序脚本安装在我的主目录中的一个文件夹中,但我确实在我的 python 脚本中提供了求解器的路径。.debscip

最小的工作示例:

import pyomo.environ as pyo

# basic setup
Agents = list(range(10))
Values = [1, 3, 5, 3, 2, 4, 5, 6, 4, 1]
Weight = [1, 2, 3, 4, 5, 6, 4, 2, 3, 1]

# create pyo model and set variable
Dummy = pyo.ConcreteModel()
Dummy.x = pyo.Var(Agents, bounds=(0, 1))

# set objective
Dummy.obj = pyo.Objective(expr=(sum(Dummy.x[i]*Values[i] for i in Agents)))

# add a constraint
Dummy.constraint = pyo.ConstraintList()
Dummy.constraint.add(sum(Dummy.x[i]*Weight[i] for i in Agents) <= 10)

# select solver and solve problem
opt = pyo.SolverFactory('scip', executable='/path/to/solver/SCIPOptSuite-7.0.1-Linux/bin/scip')
opt.solve(Dummy)

编辑:我无法用 scip 解决 pyomo 模型。但是,我能够使用PySCIPOpt直接建模和解决问题。他们文档中的示例帮助很大。

from pyscipopt import Model, quicksum

# basic setup
Agents = list(range(10))
Values = [1, 3, 5, 3, 2, 4, 5, 6, 4, 1]
Weight = [1, 2, 3, 4, 5, 6, 4, 2, 3, 1]

#==================solve it straight with scip================================
Dummy = Model("dummy")
# vtype='C' means the variable is continuous
x = [Dummy.addVar(lb = 0, ub=1, name=("x" + str(i)), vtype='C') for i in Agents]

# set objective
Dummy.setObjective(quicksum(x[i]*Values[i] for i in Agents), sense="maximize")

# add a constraint
Dummy.addCons(quicksum(x[i]*Weight[i] for i in Agents) <= 10)

# solve problem
Dummy.optimize()
sol = Dummy.getBestSol()
print(sol)

EditEdit:昨天它仍然有效,但今天再次尝试运行它,它返回一个微不足道的解决方案,而不是最佳解决方案。

标签: ubuntupyomoscip

解决方案


我有同样的问题。出现问题是因为您pyomo直接指向scip可执行文件,而不是pyomo需要的 AMPL 接口。不幸的是,AMPL 接口似乎不再包含在预编译的安装程序中(我尝试了 *.deb 方法,但它不存在)。

不过幸运的是,scipampl从源代码构建非常简单。我在 7.0.3 版中完全按照这些说明操作: https ://stackoverflow.com/a/66736905/7382307

然后在只是一个问题

from pyomo import environ as po
opt = po.SolverFactory('scipampl')

或者,对于那些愿意使用旧版本(6.0)的人来说,这似乎也解决了问题,至少在 Windows 上:https ://stackoverflow.com/a/56886542/7382307


推荐阅读