如何在线性优化中使用二进制约束?

时间:2016-09-14 17:31:27

标签: r optimization

我有两个输入矩阵,dt(10,3)& wt(3,3),我需要用来找到最优决策矩阵(相同维度),Par(10,3),以便最大化目标函数。 R代码下面会给出问题的一些方向(在这里使用Sample输入) -

#Input Matrices
dt <- matrix(runif(300),100,3) 
wt <- matrix(c(1,0,0,0,2,0,0,0,1),3,3) #weights

#objective function    
Obj <- function(Par) {
   P = matrix(Par, nrow = 10, byrow=F) # Reshape
   X = t((dt%*%wt)[,1])%*%P[,1]
   Y = t((dt%*%wt)[,2])%*%P[,2]
   Z = t((dt%*%wt)[,3])%*%P[,3]
   as.numeric(X+Y+Z) #maximize
   }

现在我正在努力将以下约束应用于该问题:

1) Matrix, Par can only have binary values (0 or 1)
2) rowSums(Par) = 1 (Basically a row can only have 1 in one of the three columns) 
3) colSums(Par[,1]) <= 5, colSums(Par[,2]) <= 6, & colSums(Par[,3]) <= 4
4) X/(X+Y+Z) < 0.35, & Y/(X+Y+Z) < 0.4 (X,Y,Z are defined in the objective function)

我尝试在constrOptim中编码约束,但不确定如何输入二进制和&amp;整数约束。我正在阅读lpSolve,但无法弄清楚。任何帮助非常感谢。谢谢!

2 个答案:

答案 0 :(得分:0)

我相信这确实是一个MIP所以没有凸性的问题。如果我是正确的,模型可能看起来像:

enter image description here

此模型可以轻松转录为R.请注意,LP / MIP求解器不使用函数作为目标和约束(与NLP求解器相对)。在R中,通常使用LP系数建立矩阵。

注意:我必须对列总和进行更大的限制(我使用了50,60,40)。

答案 1 :(得分:0)

基于Erwin的响应,我能够在R中使用lpSolve来制定模型。但是仍然在努力将最终约束添加到模型中(上面我的问题中的第4个约束)。这是我到目前为止能够编码的内容:

lpp_code;lpp_libelle
953082;IMP RES SEPRAFILM 13X15CM 430103 (A56D)
3115092;ENDOPROT CORONAIRE, STENT LIB. ZOTAROLIMUS, MEDTRONIC,RESOLUTE INTEGRITY,3MM.

非常感谢任何帮助我到达终点线的帮助:)

由于