使用 lpSolve 在 R 中进行线性规划消除约束

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

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

看下面的简化问题

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

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

以下是我的代码:

> library(lpSolve)
> f.obj <- c(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

谁能理解为什么会这样?

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

非常感谢!

wan_XM 回答:使用 lpSolve 在 R 中进行线性规划消除约束

尝试转置约束向量:

> library(lpSolve)
> f.obj <- c(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
本文链接:https://www.f2er.com/994636.html

大家都在问