我正试图最大化功能 $ a_1x_1 + \ cdots + a_nx_n $ 受约束 $ b_1x_1 + \ cdots + b_nx_n \ leq c $ 和 $ x_i \ geq 0 $ 用于所有 $ i $ 。对于下面的玩具示例,我选择了 $ a_i = b_i $ ,所以问题是最大化 $ 0x_1 + 25x_2 + 50x_3 + 75x_4 + 100x_5 $ 给定 $ 0x_1 + 25x_2 + 50x_3 + 75x_4 + 100x_5 \ leq 100 $ 。通常,目标函数的最大值应为100,但是当我运行下面的代码时,得到的解决方案为2.5e + 31。发生了什么事?
library(lpSolve)
a <- seq.int(0, 100, 25)
b <- seq.int(0, 100, 25)
c <- 100
optimal_val <- lp(direction = "max",
objective.in = a,
const.mat = b,
const.dir = "<=",
const.rhs = c,
all.int = TRUE)
optimal_val
答案 0 :(得分:1)
b
不是正确的矩阵。在lp
调用之前,您应该这样做:
b <- seq.int(0, 100, 25)
b <- matrix(b,nrow=1)
这将为您提供一个明确的1 x 5矩阵:
> b
[,1] [,2] [,3] [,4] [,5]
[1,] 0 25 50 75 100
现在您将看到:
> optimal_val
Success: the objective function is 100
背景:默认情况下,R会将矢量视为列矩阵:
> matrix(c(1,2,3))
[,1]
[1,] 1
[2,] 2
[3,] 3