【问题标题】:Linear Programming in R using lpSolve dismisses constrains使用 lpSolve 在 R 中进行线性规划消除了约束
【发布时间】:2021-05-07 00:03:54
【问题描述】:

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

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

看下面的简化问题

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

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

下面是我的代码:

> 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

谁能理解为什么会这样?

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

非常感谢!

【问题讨论】:

    标签: r optimization linear-programming lpsolve


    【解决方案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
    

    【讨论】:

    • 太棒了。它完美地工作!你知道我为什么要转置吗?
    • 它希望它明确地作为矩阵行。您可以使用result$constraints 查看约束是否正确到达(但请注意,它将每个约束显示为一列......确实令人困惑)。
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多