我有线性编程问题。所有变量都是二进制的,我想得到所有可能的解决方案。我知道我可以设置参数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)
答案 0 :(得分:1)
这是一种方法。 lpSove
实际上为您提供了找到的 num.bin.solns ,您可以使用$ notation访问它。
您最初可以将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