2017-01-08 4 views
0

で制約を宣言します。Gurobiは - 私はPythonで、以下の制約を宣言しようとしているが、それは動作しませんパイソン

これは私のコードです:

m.addConstrs((tsk*Xkt[i]).sum(k, '*') + (tbk*Qkt[i]).sum(k, "*") <= bt[i]+Ot[i] for i in range(0, t)) 

+1

これは_not_あなたのコードです。これはあなたのコードの_line_です。 [mcve]と正確なエラーを入力してください。 –

+0

申し訳ありません。エラーが長すぎるため、ここに貼り付けたくありませんでした。そして最後には「KeyError:0」としか書かれていません –

答えて

2

tupledict.sum()方法はtupledictオブジェクトではなく、そのようtsk*Xkt[i]などLinExprに適用されます。

  1. のような式を作成、sum()またはquicksum()機能を使用します:次の2つの選択肢を持っている

    m.addConstrs(quicksum(ts[k]*X[k,t] + tb[k]*Q[k,t] for k in Krange) <= b[t]+O[t] for t in Trange) 
    
  2. tupledict.prod()メソッドを使用します

    m.addConstrs(X.prod(ts, '*', t) + Q.prod(tb, '*', t) <= b[t]+O[t] for t in Trange) 
    

いくつかのコメントを:

  1. 私はあなたの添え字表記法を数式に合わせて変更しました。式がtsとtbかt ˙ sかt ˙ bかどうかはわかりません。それに応じてコードを調整してください。
  2. tupledict.prod()の構文でのドキュメントのバグは現在あり。上記のコードは、このメソッドの正しい使い方を反映しています。
+0

ありがとうございました!私はquiksumを選んだ - 仕事をうまくやった! –

関連する問題