我从 pyomo 开始,我有一些问题。
我创建了一个抽象模型和相应的数据文件。我想在脚本中解决它,以便以后使用变量的解决方案。我试图用下一个代码来做到这一点:
data = DataPortal()
data.load(filename="Datos\Datos_reactor2.dat")
instance = model.create_instance(data)
opt = SolverFactory("ipopt")
results = opt.solve(instance)
它完美地解决了它,但我对数据有一些问题。在我的模型中没有设置,所以数据是简单的常量,定义为:
param qv := 2.832;
param ci := 14.46;
...
但是,如果我使用这个数据文件 python 告诉我一个错误:
ValueError: Parameter 'qv' defined with '1' dimensions, but data has '1' values: [2.832]. Are you missing a value for a 1-dimensional index?
当我更改定义参数的数据文件时,例如:
param qv := 1 2.832;
param ci := 1 14.46;
...
我得到另一个错误:
RuntimeError: Failed to set value for param=qv, index=1, value=2.832. source error message="Error setting parameter value: Cannot treat the scalar Param 'qv' as an array"
最后,为了解决这个问题,我必须将常量定义为表(见下文),但我不明白前面的错误。
table qv := 2.832;
table ci := 14.46;
...
强调一下,如果我尝试通过以下方式解决问题:
!pyomo solve Reactor2.py Datos_reactor.dat --solver=ipopt --summary
在第一种情况下定义的数据(参数 qv := 2.832; ...)我没有任何问题,我得到了相同的解决方案。
谁能告诉我区别并解释我的错误?
谢谢!!
玛丽亚