Pyomo Scip求解器错误FileNotFoundError

问题描述

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

FileNotFoundError:[错误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,2,4,6,1]
Weight = [1,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,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: 昨天它仍然有效,但是今天尝试再次运行它,它返回的是简单的解决方案,而不是最优的解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)