2016-06-11 6 views
0

私は、フォームの連続時間Pyomoモデルがあります:Pyomoでの離散化のための特定の点はどのように指定しますか?

from pyomo.environ import * 
from pyomo.dae import * 

m  = ConcreteModel() 
m.t = ContinuousSet(bounds=(0,150)) 
m.T = Param(default=150) 
m.S = Var(m.t, bounds=(0,None)) 
m.Sdot = DerivativeVar(m.S) 

discretizer = TransformationFactory('dae.collocation') 
discretizer.apply_to(m,nfe=100,ncp=3,scheme='LAGRANGE-RADAU') 

m.obj = Objective(expr=m.S[122],sense=maximize) 

をしかし、私は上記のコードを実行したときに、私は次のエラーを取得する:

KeyError: "Error accessing indexed component: Index '120' is not valid for array component 'S'" 

list(m.t)を見ると、私がいることがわかり確かに、離散化点として122は含まれていません。

..., 121.73257700000001, 122.467423, ... 

離散化に含める点を指定するにはどうすればよいですか?

答えて

1

あなたは(オンライン​​を参照)モデルを離散前ContinuousSetに追加することで、特定のポイントを含めるように離散化を強制することができます。特定のケースで最も簡単な方法は、おそらく初期化リストにポイントを含めることです:

m.t = ContinuousSet(bounds=(0,150), intialize=[122]) 
print list(m.t) 
# [0, 122, 150] 

m.S = Var(m.t, bounds=(0,None)) 
m.Sdot = DerivativeVar(m.S) 
discretizer = TransformationFactory('dae.collocation') 
discretizer.apply_to(m,nfe=100,ncp=3,scheme='LAGRANGE-RADAU') 
print list(m.t) 
# ..., 121.323184, 122, 122.271339, ... 
関連する問題