因此,我正在尝试创建具有最佳解决方案的 IP,其中所有变量都是整数,并且都是数字的倍数,例如 3。(因此解决方案中的变量必须是 0、3、6 ,9,12 等)
我在 R 中编码,并且很容易设置解决方案必须为整数的约束(all.int = TRUE),但我不确定如何将其设置为数字的倍数。我必须在 Ax <= b 公式中进行哪些更改?您的帮助将不胜感激!截至目前,我对如何实际做到这一点相当迷茫
因此,我正在尝试创建具有最佳解决方案的 IP,其中所有变量都是整数,并且都是数字的倍数,例如 3。(因此解决方案中的变量必须是 0、3、6 ,9,12 等)
我在 R 中编码,并且很容易设置解决方案必须为整数的约束(all.int = TRUE),但我不确定如何将其设置为数字的倍数。我必须在 Ax <= b 公式中进行哪些更改?您的帮助将不胜感激!截至目前,我对如何实际做到这一点相当迷茫
为此,您可以定义一些整数变量 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
据我了解,您的标准是答案的 mod 3 为 0。如果是这样,那么 mod(intResult,3) == 0 呢?
因为我不是用你的语言写的,上面可能不是有效的 R,但我想你会明白的,因为上面是有效的 C,假设 mod 是返回 intResult 模 3 的函数的名称。