が、私はセットのリストとpyomoにセット()初期化することができます設定しますか?言い換えれば、私はこのような何かをしたいと思います:Pyomo - (パイソン)のリストとのセット()の初期化は
from pyomo.environ import *
model = AbstractModel()
a = set([1,2,3])
b = set([4,5,6])
model.c = Set(initialize = [a,b])
instance = model.create_instance()
は残念ながら、これは私にエラーを与える:
ERROR: Constructing component 'a' from data=None failed:
TypeError: Problem inserting set([1, 2, 3]) into set c
は、私が行方不明です同じ効果を達成するための別の方法はありますか?
TL; DR:私は、ネットワークの禁止モデルに取り組んでいます。私のモデルセットは、ネットワーク内の一連のパスを表します。私はモデルの制約が実行可能なパスに限られているので、パスを格納するために(python)セットを使いたいです。したがって、パスのエッジが妨害されていないかどうかを確認する必要があり、ハッシュ関数によって、妨げられたエッジがパスに入っているかどうかを効率的にチェックできます。
def is_feasible(model, path):
return any([edge in path and model.Interdicts[edge].value] for edge in model.edges)
パスは私のセットの要素である
、およびmodel.Interdictsは(内=バイナリ、model.edges)ヴァールある
私のフォールバックがあります。言い換えれば、私は後に機能を持っています私のSetを外部リストのパスを参照するインデックスで初期化していましたが、モデルの制約を評価するためにpyomoモデルと非モデル要素を混在させる必要がありました。これは本当の頭痛です(しかし、モデリング...)
パーフェクト!上記のコードで 'a = set([1,2,3])'と 'b = set([4,5,6])'を 'a = frozenset([1,2,3])'に置き換えました。と 'b = frozenset([4,5,6])'と呼ばれ、動作します。ありがとうございました! – Tim