かなり単純な目的関数を最小化したいのですが、Python API から CPLEX への正しい呼び出しを行う際に問題が発生しています。
私は使用方法set_quadratic
とset_quadratic_coefficients
ここを見ましたが、それは私の問題の解決にはなりませんでした。
目的関数には一連の線形変数と一連の二次変数があります
varCoefs = [1]*(numB + numQ)
varLower = [0]*(numB + numQ)
varNames = [(x,"b%s"%x) for x in range( numB )]
varNames += [(len(varNames) + x,"q%s"%x) for x in range( numQ )]
varCoefs += [10]*len(deltas)
varLower += [1]*len(deltas)
varNames += [(len(varNames) + x,"delta%s"%x) for x in range( len(deltas) )]
varCoefs += [0]*len(target.v)
varLower += [0]*len(target.v)
sContent = [(len(varNames) + x,"s%s"%x) for x in range( len(target.v) )]
varNames += sContent
varCoefs += [-1]
varLower += [0]
varNames += [(len(varNames),'mu')]
problem.variables.add(obj = varCoefs, lb = varLower)
problem.variables.set_names(varNames)
# problem.objective.set_quadratic_coefficients([[['s%s' % x], [1]] for x in range( len(target.v) )])
problem.objective.set_quadratic(
[cplex.SparsePair(ind=[sContent[x][0]], val=[1]) for x in range( len(target.v) )]
)
最後の呼び出しまですべてが機能し、二次項が追加されます。その時点で、CPLEXCPLEX Error 1226: Array entry 13919 not ascending.
はコマンドを無視して次のエラーを 2 回スローし、Python コードは続行します。
エラーを調べましたが、それも役に立たなかったようです。
上記を書き直して、最初に名前と下限で変数を追加してみました...そして呼び出しset_linear
てからですset_quadratic
が、それも役に立ちません。
ここで何が欠けていますか?