ubuntu - Pyomo scip 求解器错误 FileNotFoundError
问题描述
我正在尝试在 ubuntu 20.04 上的pyomo中使用scip求解器,但在调用求解器时收到一条奇怪的错误消息:
FileNotFoundError:[Errno 2] 没有这样的文件或目录:'/tmp/tmpxsrkdky5.pyomo.sol'
pyomo
已通过pip
并通过其下载页面scip
上的安装程序脚本安装 。由于依赖问题,我无法安装该文件——在 Ubuntu 20.04 而不是 18.04 上。安装程序脚本安装在我的主目录中的一个文件夹中,但我确实在我的 python 脚本中提供了求解器的路径。.deb
scip
最小的工作示例:
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:昨天它仍然有效,但今天再次尝试运行它,它返回一个微不足道的解决方案,而不是最佳解决方案。
解决方案
我有同样的问题。出现问题是因为您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
推荐阅读
- html - 在移动设备或小显示器上切换悬停效果以链接
- java - 有没有办法在 jhipster 中有一个单独的微服务用于登录?
- vba - 在连接的字符串变量上使用 find 时出现 vba 错误
- r - 根据条件和列名字符串更改多个列
- javascript - Promise.all 具有不同的返回类型
- codeigniter - 如何在codeigniter中打开一个对话框?
- mysql - SQLSTATE[42000]:语法错误或访问冲突:1075 表定义不正确;只能有一个自动列,并且必须将其定义为键”
- javascript - 在 iframe 中打印 pdf url
- installshield - MSI 安装期间的随机文件夹
- three.js - 现在该怎么办 三.getWorldRotation 已经走了