R - 指标函数中的混合整数规划

时间:2016-11-03 05:46:48

标签: r optimization mathematical-optimization linear-programming

我希望这条消息能找到你。

我正在尝试使用lpSolveAPI R-package解决配置为混合整数程序的优化问题。但是,目标函数和某些约束中存在指标函数。更具体地说,请考虑以下优化问题:

min{        2.8 * x1 +        3.2 * x2 +        3.5 * x3 + 
     17.5 * delta(x1) + 2.3 * delta(x2) + 5.5 * delta(x3)  }

受制于:

  0.4 * x1 + 8.7 * x2 + 4.5 * x3 <=
          387 - 3 * delta(x1) - 1 * delta(x2) - 3 * delta(x3)

  x1 <= 93 * delta(x1)

  x2 <= 94 * delta(x2), 

  x3 <= 100 * delta(x3), and 

  x1, x2, and x3 are non-negative integers.

在这个问题中,对于{1,2,3}中的所有i,如果xi> 1,则delta(xi)= 1。 0,否则delta(xi)= 0。

我到目前为止的R代码是:

install.packages("lpSolveAPI")
library(lpSolveAPI)
a <- c(3, 1, 3)
b <- c(0.4, 8.7, 4.5)
q <- 387
M <- c(93, 94, 100)
A <- c(17.5, 2.3, 5.5)
h <- c(2.8, 3.2, 3.5)

Fn <- function(u1, u2, u3, u4){
lprec <- make.lp(0, 3)
lp.control(lprec, "min")
set.objfn(lprec, u1)
add.constraint(lprec, u2, "<=", u3)
set.bounds(lprec, lower = rep(0, 3), upper = u4)
set.type(lprec, columns = 1:3, type = "integer")
solve(lprec)
return(list(Soln = get.variables(lprec), MinObj = get.objective(lprec)))
}

TheTest <- Fn(u1 = h, u2 = b, u3 = q, u4 = M)

拜托,我想知道是否有人可以告诉我如何将delta函数放入此R代码中以解决上述优化问题。

罗德里戈。

1 个答案:

答案 0 :(得分:1)

x1 <= 93 * delta(x1)这样的约束对我来说很奇怪。我认为这只是x1 <= 93。对于MIP求解器,将函数delta(x)替换为二进制变量d。然后添加约束d <= x <= M*d,其中Mx的上限。明确地说,对于您的模型,我们有:

min 2.8*x1 + 3.2*x2 + 3.5*x3 + 17.5*d1 + 2.3*d2 + 5.5*d3
0.4*x1 + 8.7*x2 + 4.5*x3 <= 387 - 3*d1 - d2 - 3*d3
d1 <= x1 <= 93*d1
d2 <= x2 <= 94*d2
d3 <= x3 <= 100*d3
x1 integer in [0,93]
x2 integer in [0,94]
x3 integer in [0,100]
d1,d2,d3 binary

现在使用任何MIP求解器解决这个问题都很简单。请注意,像d1 <= x1 <= 93*d1这样的双重不等式可以写成两个不等式:d1<=x1x1<=93*d1