可重现的例子:
我用R中的lpSolveAPI描述了一个简单的0/1- Knapsack问题,它应该返回 2 个解决方案:
library(lpSolveAPI)
lp_model= make.lp(0, 3)
set.objfn(lp_model, c(100, 100, 200))
add.constraint(lp_model, c(100,100,200), "<=", 350)
lp.control(lp_model, sense= "max")
set.type(lp_model, 1:3, "binary")
lp_model
solve(lp_model)
get.variables(lp_model)
get.objective(lp_model)
get.constr.value((lp_model))
get.total.iter(lp_model)
get.solutioncount(lp_model)
问题:
但get.solutioncount(lp_model)
表明只1
找到了解决方案:
> lp_model
Model name:
C1 C2 C3
Maximize 100 100 200
R1 100 100 200 <= 350
Kind Std Std Std
Type Int Int Int
Upper 1 1 1
Lower 0 0 0
> solve(lp_model)
[1] 0
> get.variables(lp_model)
[1] 1 0 1
> get.objective(lp_model)
[1] 300
> get.constr.value((lp_model))
[1] 350
> get.total.iter(lp_model)
[1] 6
> get.solutioncount(lp_model)
[1] 1
我希望有 2 个解决方案:1 0 1
和0 1 1
.
我试图通过lpSolve的num.bin.solns
参数,但解决方案的数量仍然存在。solve(lp_model, num.bin.solns=2)
1
问题:
我怎样才能得到两个正确的解决方案?我更喜欢使用lpSolveAPI,因为 API 非常好。如果可能的话,我想避免直接使用lpSolve。