2017-01-25 90 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,因为你在每个k中有不同的Q值?