pyomo求解简单示例时目标函数值不正确
我最近开始使用pyomo进行我的研究,并且正在学习《Pyomo-Optimization modelling in Python》这本书。因为我的研究与热交换网络有关,所以我现在尝试先建立并解决一个非常简单的问题,然后再扩展到更复杂和有意义的内容。以下是我输入到pyomo中的模型。
from coopr.pyomo import*
model=AbstractModel()
Tcin1=300
Thin1=500
mc= 135
mh=128
Cpc=3.1
Cph=2.2
model.Thout1=Var(initialize=480, within=PositiveReals)
model.Tcout1=Var(initialize=310, within=PositiveReals)
model.Q=Var(initialize=2000, within=PositiveReals)
import math
def HeatEx(model):
return ((Thin1-model.Tcout1)-(model.Thout1-Tcin1))/(math.log(Thin1-model.Tcout1)-math.log(model.Thout1-Tcin1))
model.obj=Objective(rule=HeatEx, sense=minimize)
model.con1 = Constraint(expr=(mc*Cpc*(Thin1-model.Thout1) ==
mh*Cph*(model.Tcout1 - Tcin1)))
model.con2=Constraint(expr=(model.Q==mc*Cpc*(Thin1-model.Thout1)))
model.con3=Constraint(expr=(model.Tcout1==310))
我通过终端运行这个模型,使用的求解器是ipopt
,命令是pyomo --solver=ipopt --summary NoFouling.py
。
我的问题是,我得到的目标值不正确。它显示目标值是-60.5025857388(此时变量Thout1 = 493.271206691),这个结果是错误的。为了弄清楚问题出在哪里,我在目标函数中把model.Thout1替换成了值493.271206691,重新运行模型后得到了正确的目标值191.630949982。这很奇怪,因为从pyomo出来的所有变量值都是正确的,即使目标函数的值是错的。简单来说,如果我用那些看似给出错误结果的值手动计算这个函数,我能得到正确的结果。
这种差异的原因是什么?我该如何解决这个问题?
顺便提一下,我是在CentOS 6.5的电脑上通过Enthought Canopy运行Python2.7的。我还得承认我对python和使用linux系统都还比较陌生。我在网上搜索了很多关于pyomo的答案,但这个问题似乎太具体了,我没有找到什么有用的信息。
非常感谢!
1 个回答
2
在Python 2.7中,默认的'/'操作是整数除法。
我猜你在你的目标函数中想要的是浮点数除法,如果是这样的话,在你的脚本开头加上以下这一行:
from __future__ import division