Gab*_*ant 4 r linear-programming
我在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
Run Code Online (Sandbox Code Playgroud)
但是当我创建一个包含9个以上决策变量的模型时,它不再提供完整的摘要,而是我看到:
> lprec
Model name:
a linear program with 13 decision variables and 258 constraints
Run Code Online (Sandbox Code Playgroud)
当有大量决策变量时,有谁知道我怎么能看到模型的相同详细摘要?
奖金问题:RStudio是使用R的最佳控制台吗?
这是一个例子:
>lprec <- make.lp(0,5)
Run Code Online (Sandbox Code Playgroud)
这使得一个名为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
Run Code Online (Sandbox Code Playgroud)
C列对应于5个变量.现在没有约束,目标函数是0.
您可以添加约束
>add.constraint(lprec, c(1,3,4,2,-8), "<=", 0)
Run Code Online (Sandbox Code Playgroud)
这是约束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
Run Code Online (Sandbox Code Playgroud)
无论如何,关键在于,无论有多少约束,如果有超过9个变量,那么我就不会得到完整的打印输出.
>lprec <- make.lp(0,15)
>lprec
Model name:
a linear program with 15 decision variables and 0 constraints
Run Code Online (Sandbox Code Playgroud)
由于它是类的S3对象lpExtPtr,因此调用它来显示它的函数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))
# }
# (...)
Run Code Online (Sandbox Code Playgroud)
您可以使用各种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
Run Code Online (Sandbox Code Playgroud)
将其写入文件进行检查
当我使用LP时lpSolveAPI,我更喜欢将它们写到文件中.该lp格式对我的需要的罚款.然后我使用任何文本编辑器检查LP模型.如果单击RStudio中"文件"面板中的输出文件,它也会打开它,您可以检查它.
write.lp(lprec, "lpfilename.lp", "lp") #write it to a file in LP format
Run Code Online (Sandbox Code Playgroud)
MPS如果您愿意,也可以将其写为格式.
这是帮助文件write.lp().
希望有所帮助.