0

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

我在 R 中编码,并且很容易设置解决方案必须为整数的约束(all.int = TRUE),但我不确定如何将其设置为数字的倍数。我必须在 Ax <= b 公式中进行哪些更改?您的帮助将不胜感激!截至目前,我对如何实际做到这一点相当迷茫

4

2 回答 2

2

为此,您可以定义一些整数变量 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
于 2015-07-30T16:11:41.533 回答
-2

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

因为我不是用你的语言写的,上面可能不是有效的 R,但我想你会明白的,因为上面是有效的 C,假设 mod 是返回 intResult 模 3 的函数的名称。

于 2015-07-30T16:15:10.663 回答