1

forPython Pyomo でループを使用して複数の制約を作成するのに苦労しています。

うまく機能するはずの私のコードの概念は以下のとおりです (これは機能していません)。

bay_Alphabet={'A', 'B', 'C', 'D'}
for n in bay_Alphabet:
    def minUsePre_rule(m,u,v):
        return sum( m.X[u,v] for (u,v) in bay_setPre[n] ) == 1.0
    m.minUsePre+'n'=pe.Constraint(m.arc_set, rule=minUsePre_rule)

forこの 4 つの制約をloop 、m.minUsePreAm.minUsePreBm.minUsePreC、を使用して作成したいと思いm.minUsePreDます。

4

1 に答える 1

2

これを行う最も簡単な方法は、bay_Alphabet でインデックス付けされた単一の Constraint コンポーネントを作成することです。

bay_Alphabet=['A', 'B', 'C', 'D']

def minUsePre_rule(m,u,v,n):
    return sum( m.X[u,v] for (u,v) in bay_setPre[n] ) == 1.0
m.minUsePre = pe.Constraint(m.arc_set, bay_Alphabet, rule=minUsePre_rule)

個別の Constraint コンポーネントが本当に必要な場合は、 setattr() 関数を使用して明示的にコンポーネントを追加することもできます。例えば:

bay_Alphabet=['A', 'B', 'C', 'D']
for n in bay_Alphabet:
    def minUsePre_rule(m,u,v):
        return sum( m.X[u,v] for (u,v) in bay_setPre[n] ) == 1.0
    setattr(m, "minUsePre"+n, pe.Constraint(m.arc_set, rule=minUsePre_rule) )

後者のアプローチは、コーディングがより複雑になりますが、使用できるさまざまなグループに制約を分割します。

于 2016-11-30T05:18:02.803 に答える