0

我最近开始使用 pyomo 进行研究,我正在通过《Python 中的 Pyomo 优化建模》一书研究它的使用。由于我的研究与热交换器网络有关,因此我目前正在尝试构建和解决一个非常简单的问题,然后再扩展到更复杂和更有意义的问题。这是我输入 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 的答案,但是这个似乎太具体了,我没有发现任何真正有用的东西。

非常感谢

4

1 回答 1

2

在 Python 2.7 中,默认的 '/' 行为是整数除法。

我假设您希望在目标函数中使用浮点除法,如果是这样,请在脚本开头添加以下行

from __future__ import division
于 2015-05-13T11:21:00.463 回答