R:如何解决以下线性规划问题
R: How to solve the following linear programming problem
我有兴趣解决以下线性规划问题。
在这个玩具示例中,第二个约束告诉我 x1 <= -1
,即 x1
必须为负数,因此 x1
的最小值应该为负数。使用 lpSolveAPI
,我编写了这个玩具示例。
library(lpSolveAPI)
my.lp <- make.lp(nrow = 2, ncol = 2)
set.column(my.lp, 1, c(1, 2))
set.column(my.lp, 2, c(3, 0))
set.objfn(my.lp, c(1, 0))
set.constr.type(my.lp, rep("<=", 2))
set.rhs(my.lp, c(-4, -2))
set.bounds(my.lp, lower = c(-Inf, -Inf), upper = c(Inf, Inf))
> my.lp
Model name:
C1 C2
Minimize 1 0
R1 1 3 <= -4
R2 2 0 <= -2
Kind Std Std
Type Real Real
Upper Inf Inf
Lower -Inf -Inf
然而,在 R 中解决这个线性规划问题给了我
> solve(my.lp)
[1] 3
> get.variables(my.lp)
[1] 3.694738e-57 -2.681562e+154
> get.objective(my.lp)
[1] 1e+30
get.objective(my.lp)
returns为x1
取1e+30
的值,显然不满足第二个约束条件。我特意用了set.bounds
,让x1, x2
在实线上可以取任意值,但是还是没有取到负数。哪里出了问题?
library(CVXR)
x1 <- Variable(1)
x2 <- Variable(1)
# Problem definition
objective <- Minimize(x1)
constraints <- list(x1 + 3*x2 <= -4, 2*x1 + 0*x2 <= -2)
prob <- Problem(objective, constraints)
# Problem solution
sol <- solve(prob)
sol$value
# [1] -Inf
sol$status
# [1] "unbounded"
我有兴趣解决以下线性规划问题。
在这个玩具示例中,第二个约束告诉我 x1 <= -1
,即 x1
必须为负数,因此 x1
的最小值应该为负数。使用 lpSolveAPI
,我编写了这个玩具示例。
library(lpSolveAPI)
my.lp <- make.lp(nrow = 2, ncol = 2)
set.column(my.lp, 1, c(1, 2))
set.column(my.lp, 2, c(3, 0))
set.objfn(my.lp, c(1, 0))
set.constr.type(my.lp, rep("<=", 2))
set.rhs(my.lp, c(-4, -2))
set.bounds(my.lp, lower = c(-Inf, -Inf), upper = c(Inf, Inf))
> my.lp
Model name:
C1 C2
Minimize 1 0
R1 1 3 <= -4
R2 2 0 <= -2
Kind Std Std
Type Real Real
Upper Inf Inf
Lower -Inf -Inf
然而,在 R 中解决这个线性规划问题给了我
> solve(my.lp)
[1] 3
> get.variables(my.lp)
[1] 3.694738e-57 -2.681562e+154
> get.objective(my.lp)
[1] 1e+30
get.objective(my.lp)
returns为x1
取1e+30
的值,显然不满足第二个约束条件。我特意用了set.bounds
,让x1, x2
在实线上可以取任意值,但是还是没有取到负数。哪里出了问题?
library(CVXR)
x1 <- Variable(1)
x2 <- Variable(1)
# Problem definition
objective <- Minimize(x1)
constraints <- list(x1 + 3*x2 <= -4, 2*x1 + 0*x2 <= -2)
prob <- Problem(objective, constraints)
# Problem solution
sol <- solve(prob)
sol$value
# [1] -Inf
sol$status
# [1] "unbounded"