【发布时间】:2020-09-18 11:35:13
【问题描述】:
我正在尝试在 ubuntu 20.04 上的 pyomo 中使用 scip 求解器,但在调用求解器时收到一条奇怪的错误消息:
FileNotFoundError: [Errno 2] 没有这样的文件或目录:'/tmp/tmpxsrkdky5.pyomo.sol'
pyomo 是通过 pip 安装的,scip 是通过其download page 上的安装程序脚本安装的。由于依赖性问题,我无法安装 .deb 文件——在 Ubuntu 20.04 而不是 18.04 上。安装程序脚本将 scip 安装在我的主目录的文件夹中,但我确实在我的 python 脚本中提供了求解器的路径。
最小的工作示例:
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 直接建模和解决问题。他们文档中的Examples 帮助很大。
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)
编辑编辑: 昨天它仍然有效,但今天再次尝试运行它,它返回一个微不足道的解决方案,而不是最佳解决方案。
【问题讨论】: