0

私は最近pyomoを研究に使い始めて、「Pyomo-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 システムの両方に少し慣れていないことを告白する必要があります。私はピモの答えをインターネットで検索しましたが、これは具体的すぎるようで、本当に役立つものは何も見つかりませんでした.

どうもありがとう

4

1 に答える 1