使用pyomo(任何解算器)时,Getting KeyError:1822253855912



我正在使用Pyomo和Spyder IDE,并运行一个简单的线性编程示例,虽然我安装了Pyomo、gurabi、CPLEX、GLPK和其他解算器,但无论我使用哪一个,我都会收到类似于(KeyError:18222253855912(的错误:

Traceback (most recent call last):
File "<ipython-input-2-3550848663cc>", line 18, in <module>
opt.solve(model)
File "C:ProgramDataAnaconda3libsite-packagespyomooptbasesolvers.py", line 569, in solve
self._presolve(*args, **kwds)
File "C:ProgramDataAnaconda3libsite-packagespyomosolverspluginssolversCBCplugin.py", line 289, in _presolve
super(CBCSHELL, self)._presolve(*args, **kwds)
File "C:ProgramDataAnaconda3libsite-packagespyomooptsolvershellcmd.py", line 205, in _presolve
OptSolver._presolve(self, *args, **kwds)
File "C:ProgramDataAnaconda3libsite-packagespyomooptbasesolvers.py", line 669, in _presolve
**kwds)
File "C:ProgramDataAnaconda3libsite-packagespyomooptbasesolvers.py", line 721, in _convert_problem
**kwds)
File "C:ProgramDataAnaconda3libsite-packagespyomooptbaseconvert.py", line 100, in convert_problem
problem_files, symbol_map = converter.apply(*tmp, **tmpkw)
File "C:ProgramDataAnaconda3libsite-packagespyomosolverspluginsconvertermodel.py", line 81, in apply
io_options=io_options)
File "C:ProgramDataAnaconda3libsite-packagespyomocorebaseblock.py", line 1825, in write
io_options)
File "pyomorepnpluginscpxlp.pyx", line 157, in pyomo.repn.plugins.cpxlp.ProblemWriter_cpxlp.__call__
File "pyomorepnpluginscpxlp.pyx", line 158, in pyomo.repn.plugins.cpxlp.ProblemWriter_cpxlp.__call__
File "pyomorepnpluginscpxlp.pyx", line 159, in pyomo.repn.plugins.cpxlp.ProblemWriter_cpxlp.__call__
File "pyomorepnpluginscpxlp.pyx", line 539, in pyomo.repn.plugins.cpxlp.ProblemWriter_cpxlp._print_model_LP
File "pyomorepnpluginscpxlp.pyx", line 212, in pyomo.repn.plugins.cpxlp.ProblemWriter_cpxlp._print_expr_canonical
KeyError: 1822253855912

我真的不明白这个错误意味着什么,我看到其他人也在问类似的问题,但没有答案。这是我正在使用的代码:

import pyomo.environ as pyo
from pyomo.environ import *
from pyomo.opt import SolverFactory
model = pyo.ConcreteModel()
x = pyo.Var(bounds=(0,10))
y = pyo.Var(bounds=(0,10))

model.C1 = pyo.Constraint(expr = -x+2*y<=8)
model.C2 = pyo.Constraint(expr = 2*x+y<=14)
model.C3 = pyo.Constraint(expr = 2*x-y<=10)
model.obj = pyo.Objective(expr= x+y, sense=maximize)
opt = SolverFactory('glpk')
opt.solve(model)
x_value = pyo.value(x)
y_value = pyo.value(y)
print("X: ", x_value)
print("y: ", y_value)

代码运行良好,直到";opt=SolverFactory('lpk'(";,当它到达线"0"时,误差就产生了;opt.solve(模型(";。

当我检查";pyomo帮助-解决方案&;我得到一个"+"在gurabi、glpk和cplex(以及其他一些(旁边,所以想知道这是否与Spyder中的epython环境有关(它确实运行了其他代码(

问题是您没有将任何Var附加到实际问题。您正在定义模型之外的所有Var,并且需要将它们定义为类model.x = pyo.Var(bounds=(0,10))的一部分

以下模型得出以下结果:

import pyomo.environ as pyo
model = pyo.ConcreteModel()
model.x = pyo.Var(bounds=(0,10))
model.y = pyo.Var(bounds=(0,10))

model.C1 = pyo.Constraint(expr = -model.x + 2*model.y<=8)
model.C2 = pyo.Constraint(expr = 2*model.x + model.y<=14)
model.C3 = pyo.Constraint(expr = 2*model.x - model.y<=10)
model.obj = pyo.Objective(expr= model.x + model.y, sense=pyo.maximize)
opt = pyo.SolverFactory('glpk')
opt.solve(model)
x_value = pyo.value(model.x)
y_value = pyo.value(model.y)
print("X: ", x_value)
print("y: ", y_value)

此收益率:

X:  4.0
y:  6.0

最新更新