R 中使用 lpSolve 的线性规划消除了约束

Linear Programming in R using lpSolve dismisses constrains

我目前正在撰写一篇涉及解决与此类似问题的论文。

给定的是一组 100 个数字,我想检查给定数字是否可以通过将它们与 0 或 1 相乘来达到某个值。

请参阅以下简化问题

A + 2B + 3C + 4D = 10, with A, B, C, D from {0,1}.

我试图通过使用包 lpSolve 和求解二进制 LP 来用 R 解决这个问题。我选择 objective 函数作为常量,因为如果一切计算正确,仍然必须满足约束条件。

在下面我的代码中:

> library(lpSolve)
> f.obj <- c(1,1,1,1)
> f.con <- c(1,2,3,4)
> f.dir <- c("=")
> f.rhs <- c(10)
> lp("max", f.obj, f.con, f.dir, f.rhs, binary.vec = 1:4, all.bin=TRUE)

结果我现在预计 A=B=C=D=1。但是,我将 R 作为解决方案 A=1, B=1, C=0, D=1.

谁能理解为什么会这样?

也许你们知道更好的算法来解决我的问题。我很感谢任何能帮助我的人

非常感谢!

尝试转置约束向量:

> library(lpSolve)
> f.obj <- c(1,1,1,1)
> f.con <- t(c(1,2,3,4))
> f.dir <- c("=")
> f.rhs <- c(10)
> result <- lp("max", f.obj, f.con, f.dir, f.rhs, binary.vec = 1:4, all.bin=TRUE)
> result
Success: the objective function is 4 
> result$solution
[1] 1 1 1 1