1
私はpyomo
の私のモデル内のインデックスの複数のレベルを持っている、と私はこのようなインデックス変数のことができるようにする必要があります。pyomoで複数のレベルの索引付けを使用してセットとレンジセットを使用するにはどうすればよいですか?
model.b['a',1]
しかし、これは、何らかの理由で可能ていないようです。私はこのようなマルチレベルのインデックスを使用することができます。
model = ConcreteModel()
model.W = RangeSet(0,1)
model.I = RangeSet(0,4)
model.J = RangeSet(0,4)
model.K = RangeSet(0,3)
model.B = Var(model.W, model.I, model.J, model.K)
model.B[1,2,3,0] # access the variable using the indices - THIS WORKS!!
をしかし、これはしかし、動作しません:
TypeError: Cannot index a component with an indexed set
なぜ最初のものを行います。
model = ConcreteModel()
model.W = Set(['a','b'])
model.I = RangeSet(0,4)
model.b = Var(model.W, model.I) # I can't even create this - throws exception
を...それが例外をスローします第二のものではなく、仕事ですか?
大丈夫のリストを提供する場合、同じが本当だろう値
のリストの前に「初期化」というキーワードを追加することによってこの問題を解決することができますありがとう。しかし、なぜ 'model.W = RangeSet(0,1) model.I = RangeSet(0,4)'が機能しますか?私はそれらのキーワードを "初期化"する必要はなく、それらはコンポーネントコンストラクタです。 – Candic3
RangeSetは、一連の数値を生成する特定のケースでのみ使用できる非常に特殊化されたコンポーネントです。キーワード引数を受け入れず、3つの方法でしか構築できない 'model.W = RangeSet(stop)#はセット[1,2、...、stop]を返します model.W = RangeSet(start、 (start、stop、step)#は、[start、start + step、... end]を返します。 + i *ステップと終了<=停止 ' –
大丈夫、ありがとう。これは興味深い別の関連する質問です:http://stackoverflow.com/questions/39908555/how-to-define-an-integral-as-an-objective-function-in-pyomo/39908672#39908672 – Candic3