我在RStudio中使用lpsolveAPI。当我键入具有很少决策变量的模型的名称时,我可以读取模型中当前约束的打印输出。例如
> lprec
Model name:
COLONE COLTWO COLTHREE COLFOUR
Minimize 1 3 6.24 0.1
THISROW 0 78.26 0 2.9 >= 92.3
THATROW 0.24 0 11.31 0 <= 14.8
LASTROW 12.68 0 0.08 0.9 >= 4
Type Real Real Real Real
Upper Inf Inf Inf 48.98
Lower 28.6 0 0 18
但是当我制作一个包含9个以上决策变量的模型时,它不再提供完整的摘要,而是我看到:
> lprec
Model name:
a linear program with 13 decision variables and 258 constraints
当有大量决策变量时,有谁知道如何看到模型的相同详细摘要?
奖金问题:RStudio是使用R的最佳控制台吗?
以下是一个例子:
>lprec <- make.lp(0,5)
这使得一个名为lprec的新模型具有0个约束和5个变量。即使你现在叫这个名字,你也会得到:
>lprec
Model name:
C1 C2 C3 C4 C5
Minimize 0 0 0 0 0
Kind Std Std Std Std Std
Type Real Real Real Real Real
Upper Inf Inf Inf Inf Inf
Lower 0 0 0 0 0
C列对应于5个变量。现在没有约束,目标函数是0.
您可以使用
添加约束>add.constraint(lprec, c(1,3,4,2,-8), "<=", 0)
这是约束C1 + 3 * C2 + 4 * C3 + 2 * C4 - 8 * C5 <= 0.现在打印输出是:
Model name:
C1 C2 C3 C4 C5
Minimize 0 0 0 0 0
R1 1 3 4 2 -8 <= 0
Kind Std Std Std Std Std
Type Real Real Real Real Real
Upper Inf Inf Inf Inf Inf
Lower 0 0 0 0 0
无论如何,重点是无论有多少约束,如果有超过9个变量,那么我就不会得到完整的打印。
>lprec <- make.lp(0,15)
>lprec
Model name:
a linear program with 15 decision variables and 0 constraints
答案 0 :(得分:6)
因为它是类lpExtPtr
的S3对象,
被调用以显示它的函数是print.lpExtPtr
。
如果检查其代码,您将看到它显示该对象
根据其大小不同 -
非常大的对象的细节不是很有用。
不幸的是,门槛无法改变。
class(r)
# [1] "lpExtPtr"
print.lpExtPtr
# function (x, ...)
# {
# (...)
# if (n > 8) {
# cat(paste("Model name: ", name.lp(x), "\n", " a linear program with ",
# n, " decision variables and ", m, " constraints\n",
# sep = ""))
# return(invisible(x))
# }
# (...)
您可以使用各种get.*
函数访问对象的内容,
正如print
方法那样。
或者,您只需更改print
方法即可。
# A function to modify functions
patch <- function( f, before, after ) {
f_text <- capture.output(dput(f))
g_text <- gsub( before, after, f_text )
g <- eval( parse( text = g_text ) )
environment(g) <- environment(f)
g
}
# Sample data
library(lpSolveAPI)
r <- make.lp(0,5)
r # Shows the details
r <- make.lp(0,20)
r # Does not show the details
# Set the threshold to 800 variables instead of 8
print.lpExtPtr <- patch( print.lpExtPtr, "8", "800" )
r # Shows the details
答案 1 :(得分:5)
将其写入文件进行检查
当我使用lpSolveAPI
处理LP时,我更喜欢将它们写入文件。 lp
格式可以满足我的需求。然后我使用任何文本编辑器检查LP模型。如果你点击RStudio中“文件”面板中的输出文件,它也会打开它,你可以检查它。
write.lp(lprec, "lpfilename.lp", "lp") #write it to a file in LP format
如果您愿意,也可以将其写为MPS
格式。
以下是 write.lp()
。
希望有所帮助。