私はpyomo(pythonライブラリ)というプログラムで数学的プログラムを書こうとしています。以下、モデルは既に私が宣言したオブジェクトですBRANCH
がセットです。 model.branch_scpt
、model.M
、model.branch_tbus
、およびmodel.branch_fbus
は、コード実行時に入力としてロードされるすべてのパラメータリストです(これらのパラメータはすべてdimension = BRANCHです)。さらに、model.bus_angle
,model.line_flow
およびmodel.z_line
は、決定変数のリストです(すべてがディメンションブランチです)。制約Line_FlowA[j]
で参照される要素model.bus_angle[j]
はmodel.branch_tbus[j]
(同様に、要素model.branch_fbus[j]
戻っている)に戻り、その要素に依存していることPython - 入力値に依存する配列インデックスを使用する
def Line_FlowA_rule(model,j):
return (model.branch_scpt[j]*(model.bus_angle[model.branch_tbus[j]]
- model.bus_angle[model.branch_fbus[j]])
- model.line_flow[j] + (1 - model.z_line[j]) * model.M[j] >= 0)
model.Line_FlowA = Constraint(model.BRANCH, rule=LineFlowA_rule)
注意:これはj
はBRANCH
である私の制約タイプの一つの定義です。しかし、model.branch_tbus[j]
は、データの入力値であり、私は、これは次のエラーの原因となっているものであると信じて次のように関数すっきりとするために
"Unexpected exception while running model arpatest_nbp_constraint.py
Unable to index variable bus_angle using supplied index with unhashable type: '_ParamValue'"
が、私は機能を再定義しようとした:
def Line_FlowA_rule(model,j):
t = model.branch_tbus[j]
f = model.branch_fbus[j]
return (model.branch_scpt[j]*(model.bus_angle[f]
- model.bus_angle[t])
- model.line_flow[j] + (1 - model.z_line[j]) * model.M[j] >= 0)
model.Line_FlowA = Constraint(model.BRANCH, rule=Line_FlowA_rule)
でも同じエラーが発生しました。
最後に、私が試した不変の種類に値tとFを変換する:
def Line_FlowA_rule(model,j):
t = tuple(model.branch_tbus[j])
f = tuple(model.branch_fbus[j])
return (model.branch_scpt[j]*(model.bus_angle[f]
- model.bus_angle[t])
- model.line_flow[j] + (1 - model.z_line[j]) * model.M[j] >= 0)
model.Line_FlowA = Constraint(model.BRANCH, rule=Line_FlowA_rule)
これはエラーにつながった:
ERROR: Unexpected exception while running model arpatest_nbp_constraint.py
'_ParamValue' object is not iterable
誰も私が間違ってここにやっているものを私に教えてくださいすることができ?私はPythonには新しいので、おそらく何か基本的なものです。おかげでたくさんの
エラーの原因となる行を教えてください。 'model.branch_tbus'や' model.branch_tbus [j] '(あるいは' 'fbus'の等価物)は、繰り返し可能な型(list、tupleなど)ではないようです。 –