Я хотел бы, чтобы минимизировать целевую функцию, которая является довольно простой, но я как-то возникли проблемы делая правильные вызовы к от API Python для CPLEXЛинейные и квадратичные члены в CPLEX целевой функции
Я смотрел на то, как используйте 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.
, игнорируя команду, и код Python продолжается.
Я искал error, но мне это тоже не помогло.
Я попытался переписать вышеприведенное, чтобы добавить переменные по имени и нижней границе сначала ... и затем вызвать set_linear
и set_quadratic
после этого, но это тоже не помогает.
Что мне здесь не хватает?
Я считаю, что причина этого в том, что, как говорится в документации для 'set_quadratic', вы должны называть ее« списком с длиной, равной числу переменных в задаче ». – rkersh
Ahhh, я пропустил это. Еще раз, спасибо. – Constantine