2016-04-21 14 views
-1

私はちょうどCPLEXパイソンのAPIを使い始めると、私はそのような何かをしたい、私のモデルのCPLEX Pythonの和制約

をlinear_constraintsを作成すると問題だ:

dvar float+ x[] 

Minimize: Sum(i in I) C[i] * x[i] 

subject to: 
sum(i in I) x[i] <= constantValue 

をし、私の問題は、その私でありますPythonのAPIに制約を作成する方法を知っていけない

cpx.linear_constraints.add(
      lin_expr= 1, 
      senses=["L"], 
      rhs=constantValue, 
      range_values= 2, 

は何私はuのを聞いてみたいことは、私は中1入力する必要はありません)とx [i]は表の2)取得するSUM何もする必要があります決定変数。ここ

+0

、例えば、もののすべての変数とベクトルを示す

合計を定義するには、私は、あなたがCPLEX(例えば、lpex1.pyに同梱されているサンプルスクリプトを見てみることをお勧めします等。)。 – rkersh

答えて

2

は一例であり:

>>> import cplex 
>>> c = cplex.Cplex() 
>>> c.variables.add(names = ["x1", "x2", "x3"]) 
>>> c.linear_constraints.add(lin_expr = [cplex.SparsePair(ind = ["x1", "x3"], val = [1.0, -1.0]), 
           cplex.SparsePair(ind = ["x1", "x2"], val = [1.0, 1.0]), 
           cplex.SparsePair(ind = ["x1", "x2", "x3"], val = [-1.0] * 3), 
           cplex.SparsePair(ind = ["x2", "x3"], val = [10.0, -2.0])], 
         senses = ["E", "L", "G", "R"], 
         rhs = [0.0, 1.0, -1.0, 2.0], 
         range_values = [0.0, 0.0, 0.0, -10.0], 
         names = ["c0", "c1", "c2", "c3"],) 
>>> c.linear_constraints.get_rhs() 
[0.0, 1.0, -1.0, 2.0] 

range_valuesは左側面と各線形制約の右側面との間の差を指定し、浮動小数点数のリストです。 range_values [i]> 0(ゼロ)の場合、制約iはrhs [i] < = rhs [i] + range_values [i]として定義されます。 range_values [i] <が0(ゼロ)の場合、制約iはrhs [i] + range_value [i] < = a * x < = rhs [i]として定義されます。私はそれをデフォルト値(空白)のままにすることをお勧めします。ただ

NumCols = 10 
vars = [ 'x'+str(n) for n in xrange(1,NumCols+1) ] 
coef = [1]*NumCols 
cpx.linear_constraints.add(
     lin_expr= [cplex.SparsePair(ind = vars, val = coef)] , 
     senses=["L"], 
     rhs=[constantValue]) 
+0

2番目の例を答えの先頭に置き、オプションのrange_values引数を省略することができます(質問に直接答えます)。一番上の例は圧倒的かもしれません。また、これを行うには複数の方法があることに注意する価値があります。 SparsePairを使う代わりに、名前の代わりにインデックス、リストのリストを使うことができます。 – rkersh