2017-01-25 23 views
0

Я не уверен, как вставлять здесь математические символы. В любом случае, я попытаюсь изо всех сил объяснить, чего я хочу достичь, используя простой пример. Таким образом, у меня есть следующие ограничения:Матричные ограничения 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?

+0

Вы спрашиваете, как использовать [квадратичные ограничения] (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

+0

Не совсем. Это должны быть линейные ограничения. В моем примере, он может быть переведен на: 'p_11 + p_21 = 0.1' ' p_11 = 0.1' 'p_21 = 0' Ну, этот пример слишком trivial..but это в основном выражается в приведенных выше уравнений , –

+0

Хорошо, вы должны, вероятно, изменить свой вопрос, чтобы включить этот переведенный пример. Если вы просто создаете линейные ограничения, вам нужно будет сделать перевод самостоятельно и использовать для них метод 'Cplex.linear_constraints.add'. Класс 'SparseTriple' используется только для квадратичных ограничений. – rkersh

ответ

0

Я думаю, что индекс Q должен быть k вместо i, потому что у вас есть другой Q в каждом k праве?