Я не уверен, как вставлять здесь математические символы. В любом случае, я попытаюсь изо всех сил объяснить, чего я хочу достичь, используя простой пример. Таким образом, у меня есть следующие ограничения:Матричные ограничения CPLEX Python API
For each k from 1 to 10
Sum_{i=1 to 5} p_ik * A_ik = Q_i
Например:
p_11 * [[1,1],[0,0]] + p_21 * [[1,0],[0,1]] = [[0.1,0.1],[0,0]]
где p_ik скалярные переменные решения и оба A_ik, q_i являются матрицами. Ограничение может быть переведено в следующих линейные ограничения:
p_11 + p_21 = 0.1, p_11 =0.1, p_21 = 0
В самом деле, A_ik представляет собой матрицу из 0 или 1, который является довольно редким. Я предварительно вычислил матрицу A_ik, и я пытаюсь добавить указанные выше ограничения. Или я могу использовать использование класса SparseTriple?
Вы спрашиваете, как использовать [квадратичные ограничения] (http://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/refpythoncplex/html/cplex._internal._subinterfaces. QuadraticConstraintInterface-class.html)? Вы, наверное, уже знаете это, но [здесь] (http://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/GettingStarted/topics/preface/kindOfProblem.html) являются типы проблем, которые может решить CPLEX (и более [здесь] (http://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/UsrMan/topics/preface/whatdoes .html)). – rkersh
Не совсем. Это должны быть линейные ограничения. В моем примере, он может быть переведен на: 'p_11 + p_21 = 0.1' ' p_11 = 0.1' 'p_21 = 0' Ну, этот пример слишком trivial..but это в основном выражается в приведенных выше уравнений , –
Хорошо, вы должны, вероятно, изменить свой вопрос, чтобы включить этот переведенный пример. Если вы просто создаете линейные ограничения, вам нужно будет сделать перевод самостоятельно и использовать для них метод 'Cplex.linear_constraints.add'. Класс 'SparseTriple' используется только для квадратичных ограничений. – rkersh