私はむしろシンプルである目的関数を最小化したいと思いますが、私は何とか私はどのように見リニアおよびCPLEX目的関数における二次項
をCPLEXするためのPython APIからの正しい呼び出しを行う問題を抱えていますset_quadratic
とset_quadratic_coefficients
hereを使用しても、私の問題の解決には至りませんでした。
私の目的関数は、線形変数のセットと
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))]
)
すべてが二次項を追加する最後の呼び出しまでの作品次の変数のセットがあります。どの時点でCPLEXは次のエラーCPLEX Error 1226: Array entry 13919 not ascending.
を2回スローし、コマンドを無視するとPythonコードが続行されます。
私はerrorを検索しましたが、それはどちらも役に立ちませんでした。
私は変数を名前と下限で最初に書き直してから、set_linear
とset_quadratic
を呼び出してみましたが、それでもどちらも役に立ちません。
私はここで何が欠けていますか?
私はこの文書が 'set_quadratic'のために書いているように、問題の変数の数と同じ長さのリストを持っていなければならないので、これがうまくいくと思います。 – rkersh
ああ、私はそれを逃した。もう一度ありがとうございます。 – Constantine