【问题标题】:Pyomo scip solver Error FileNotFoundErrorPyomo scip 求解器错误 FileNotFoundError
【发布时间】: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)

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

【问题讨论】:

    标签: ubuntu pyomo scip


    【解决方案1】:

    我遇到了同样的问题。出现问题是因为您将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

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多