2017-07-13 4 views
-2

私はGurobiを使って整数プログラムを解決するためにPythonを使用しています。すべての変数と制約を定義した後、私は整数変数x[i,j]に対して以下の答えを得ています。Python - 結果をリストに渡す

x(0,0) 0.0 
x(0,1) 0.0 
x(0,2) 1.0 
x(0,3) 1.0 
x(1,0) 0.0 
x(1,1) 0.0 
x(1,2) 0.0 
x(1,3) 0.0 
x(2,0) 0.0 
x(2,1) 0.0 
x(2,2) 0.0 
x(2,3) 0.0 
x(3,0) 0.0 
x(3,1) 0.0 
x(3,2) 0.0 
x(3,3) 0.0 

ので、次のステップでは、私がSと呼ばれるセットにためx[i,j]=1すべてi,j Sを渡す必要があります。私はこれに次のコードを使用しています。

S=[] 
if x[i,j]== 1: 
    S.append(i) 
    S.append(j) 
    print(S) 

これはS=[0,3]を印刷します。しかし、正しいものはS=[0,2,3]でなければなりません。誰かがここで間違いを特定するのを助けてくれますか?

+0

を与える必要がありますが、それはforloopにありますか? – Eliethesaiyan

+0

とセットのために...そのs.add(i)またはupdate(i)を使用する方がはるかに良い – Eliethesaiyan

+0

Sはセットではありません...そのリストS = [] .. S =セット()に変更 – Eliethesaiyan

答えて

1

最初のものは、提供されたコードが完全ではないため、私はあなたができたことを推測し、それに基づいて提案をすることができます。

私はあなたがforループを書いて、S = []が常に初期化されていると思います。

このように、ほぼ正しいコードでも、最後に一致するソリューションしか得られません。私が行っているだろうことは、以下のことになる

S = [] 

<here goes code for some for loop to consider all the x[i,j] values> 
    if x[i,j] == 1: 
     if not S.index[i]>-1: 
      S.append[i] 
     if not S.index[j]>-1: 
      S.append[j] 
return S 

この擬似コードベースのプログラムはあなたに正しい解決策:)

+2

これは 'S = set()'と 's.update((i、j))'を使うほうが効率的ではありません。 Setは重複したエントリを自動的に処理します。注:もし私がSにいないなら、より適切な条件になります。 – AChampion

+0

@AChampionのご提案ありがとうございます! – anugrah

関連する問題