2

我有一个线性规划问题。所有变量都是二进制的,我想得到所有可能的解决方案。我知道我可以设置参数 num.bin.solns 来提供多种解决方案。但是有没有简单的方法来询问所有可能的解决方案?

例如,在下面的情况下,我知道答案的最大数量是 6。但是如果我不知道最大可能的解决方案,那么如何设置 num.bin.solns 参数以使其返回所有可能的解决方案?

library("lpSolve")
A=matrix (c(1,1,1,1), nrow=1, byrow=TRUE)
b=(2)
signs='=='
c_=rep(0,4)
res = lpSolve::lp('max', c_, A, signs, b,  all.bin = TRUE, num.bin.solns=6)
4

1 回答 1

1

这是一种方法。lpSove实际上为您提供了它找到的num.bin.solns,您可以使用 $ 表示法访问它。

您最初可以将 num.bin.solns 设置为某个较大的数字(例如 1000)。然后访问mylp$num.bin.solns以获取确切值。

mylp <- lp('max', c_, A, signs, b,  all.bin = TRUE, num.bin.solns=1000)
numcols <- 4
numsols <- mylp$num.bin.solns

solutions <- matrix(head(mylp$solution, numcols*numsols), nrow=numsols, byrow=TRUE)

> numsols
[1] 6

您可以打印出单独的解决方案:

> solutions
     [,1] [,2] [,3] [,4]
[1,]    0    0    1    1
[2,]    0    1    0    1
[3,]    1    0    0    1
[4,]    1    0    1    0
[5,]    1    1    0    0
[6,]    0    1    1    0
于 2015-02-24T23:26:32.070 回答