从 R 中的单纯形优化中获取目标向量
get target vector from simplex optimisation in R
我开始使用 R 使用库中的单纯形函数来解决 LP 问题 ("boot")。当我尝试以下代码时,我只将目标向量作为字符串而不是作为向量。
library("boot")
# This example is taken from Exercise 7.5 of Gill, Murray and Wright (1991).
enj <- c(200, 6000, 3000, -200)
fat <- c(800, 6000, 1000, 400)
vitx <- c(50, 3, 150, 100)
vity <- c(10, 10, 75, 100)
vitz <- c(150, 35, 75, 5)
j<-simplex(a = enj, A1 = fat, b1 = 13800, A2 = rbind(vitx, vity, vitz),
b2 = c(600, 300, 550), maxi = TRUE)
xx<-(j["soln"])
print(xx)
由此得到以下输出
$soln
x1 x2 x3 x4
0.0 0.0 13.8 0.0
但是,这不是矢量对象,所以我无法使用 x[1]
获取第一个维度的元素。你能帮我把结果作为向量吗?
您的变量 xx
是一个列表,因此很容易 return 其中的特定值。
例如,如果你想要x1,你可以这样做:
xx[["soln"]]["x1"]
或 xx[[1]][1]
但是如果你想把xx
转换成一个向量,你可以这样做:
xx2 <- unlist(xx)
然后你有一个向量:
> xx2
soln.x1 soln.x2 soln.x3 soln.x4
0.0 0.0 13.8 0.0
> is.vector(xx2)
[1] TRUE
如果您不想保留向量中每个元素的名称,请将参数 use.names
设为 FALSE
:
> xx2 <- unlist(xx, use.names = FALSE)
> xx2
[1] 0.0 0.0 13.8 0.0
> is.vector(xx2)
[1] TRUE
我开始使用 R 使用库中的单纯形函数来解决 LP 问题 ("boot")。当我尝试以下代码时,我只将目标向量作为字符串而不是作为向量。
library("boot")
# This example is taken from Exercise 7.5 of Gill, Murray and Wright (1991).
enj <- c(200, 6000, 3000, -200)
fat <- c(800, 6000, 1000, 400)
vitx <- c(50, 3, 150, 100)
vity <- c(10, 10, 75, 100)
vitz <- c(150, 35, 75, 5)
j<-simplex(a = enj, A1 = fat, b1 = 13800, A2 = rbind(vitx, vity, vitz),
b2 = c(600, 300, 550), maxi = TRUE)
xx<-(j["soln"])
print(xx)
由此得到以下输出
$soln
x1 x2 x3 x4
0.0 0.0 13.8 0.0
但是,这不是矢量对象,所以我无法使用 x[1]
获取第一个维度的元素。你能帮我把结果作为向量吗?
您的变量 xx
是一个列表,因此很容易 return 其中的特定值。
例如,如果你想要x1,你可以这样做:
xx[["soln"]]["x1"]
或 xx[[1]][1]
但是如果你想把xx
转换成一个向量,你可以这样做:
xx2 <- unlist(xx)
然后你有一个向量:
> xx2
soln.x1 soln.x2 soln.x3 soln.x4
0.0 0.0 13.8 0.0
> is.vector(xx2)
[1] TRUE
如果您不想保留向量中每个元素的名称,请将参数 use.names
设为 FALSE
:
> xx2 <- unlist(xx, use.names = FALSE)
> xx2
[1] 0.0 0.0 13.8 0.0
> is.vector(xx2)
[1] TRUE