整数程序 - 如何强制解为整数倍?

时间:2015-07-30 16:05:40

标签: r constraints mathematical-optimization integer-programming

所以我正在尝试创建这个具有最佳解决方案的IP,其中所有变量都是整数,并且都是数字的倍数,如3.(因此解决方案中的变量必须为0, 3,6,9,12等)

我在R中编码,并且很容易设置解决方案必须在整数中的约束(all.int = TRUE),但我不确定如何将它放在一个数字的倍数中。我必须在Ax< = b公式中做出哪些改变?非常感谢您的帮助!截至目前,我对如何实际做到这一点相当失落

2 个答案:

答案 0 :(得分:1)

为此,您可以定义一些整数变量x,然后定义y = 3*x。现在y是整数,是3的倍数。

例如,考虑一个简单的IP,它找到小于或等于10的3的最大倍数(当然,这里的主要动机是将其嵌入到更复杂的整数程序中)。你可以这样做:

library(lpSolve)
mod <- lp(direction = "max",
          objective.in = c(0, 1),  # (x, y)
          const.mat = rbind(c(3, -1),  # 3x - y = 0
                            c(0, 1)),  # y <= 10
          const.dir = c("=", "<="),
          const.rhs = c(0, 10),
          all.int = TRUE)
mod$solution[2]
# [1] 9

答案 1 :(得分:-2)

据我了解,你的标准是答案的mod 3是0.如果是这样, 那么mod(intResult,3)== 0?

由于我不会用你的语言写,以上可能不是有效的R,但我认为你会得到这个想法,因为上面是有效的C,假设mod是一个返回的函数的名称intResult modulo 3。