首页 文章

使用pyomo解决的简单示例中目标函数的值不正确

提问于
浏览
0

我最近开始使用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 在终端上运行它 .

我的问题是我得到的目标 Value 不正确 . 它的目标是-60.5025857388(变量Thout1 = 493.271206691)这是不正确的 . 为了实现问题所在,我用目标函数493.271206691替换了model.Thout1,重新运行模型并获得了正确的目标值191.630949982 . 这很奇怪,因为即使目标函数值错误,所有来自pyomo的变量值都是正确的 . 简而言之,如果我采用那些似乎给出错误结果的值并从那些手动计算函数,我得到了正确的结果 .

What is the cause of this difference? How can I resolve this problem?

为了记录,我在运行CentOS 6.5的计算机上通过Enthought Canopy运行Python2.7 . 我还要承认我对python和使用linux系统都有点新意 . 我在互联网上搜索了pyomo的答案,但这个似乎太具体了,我发现没有什么真正有用的 .

非常感谢

1 回答

  • 2

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

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

    from __future__ import division
    

相关问题