引数は、obj
引数のサイズと同じサイズのシーケンスである必要があります。だから、むしろub=list(np.ones((1, mylist.shape[0]))))
よりも、あなたはub=[1.0]*len(mylist)
やub=np.ones(len(mylist))
を、使用したいと思いなど
columns
引数は、列単位ではなく、行方向(後には正常になり、制約行列に非ゼロを追加することができますCplex.linear_constraints.add
メソッドを介して行われます)。 columns
引数で何が起こっているのかを理解する1つの方法は、ドキュメントからexampleを見ることです。例えば
:
import cplex
c = cplex.Cplex()
c.linear_constraints.add(names = ["c0", "c1", "c2"])
c.variables.add(obj = [1.0, 2.0, 3.0],
types = [c.variables.type.integer] * 3)
c.variables.add(obj = [1.0, 2.0, 3.0],
lb = [-1.0, 1.0, 0.0],
ub = [100.0, cplex.infinity, cplex.infinity],
types = [c.variables.type.integer] * 3,
names = ["var0", "var1", "var2"],
columns = [cplex.SparsePair(ind = ['c0', 2], val = [1.0, -1.0]),
[['c2'],[2.0]],
cplex.SparsePair(ind = [0, 1], val = [3.0, 4.0])])
c.write("example.lp")
ことを実行した後、LPファイルは次のようになります。
Minimize
obj: x1 + 2 x2 + 3 x3 + var0 + 2 var1 + 3 var3
Subject To
c0: var0 + 3 var3 = 0
c1: 4 var3 = 0
c2: - var0 + 2 var1 = 0
Bounds
x1 >= 0
x2 >= 0
x3 >= 0
-1 <= var0 <= 100
var1 >= 1
var3 >= 0
Generals
x1 x2 x3 var0 var1 var3
End
あなたは(制約 "C0")を制約行列の最初の行を見れば、最初の列(変数 "var0")の係数は1.0です。 3行目(インデックス2の制約「c2」)では、最初の列(変数「var0」)の係数は-1.0です。これは、columns
リストの最初の項目に相当します(つまり、cplex.SparsePair(ind = ['c0', 2], val = [1.0, -1.0])
)。
説明をいただきありがとうございます!私はゆっくりとAPIに慣れています。 –