lpsolveAPI在RStudio中

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)

Vin*_*ynd 6

由于它是类的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)


Ram*_*han 5

将其写入文件进行检查

当我使用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().

希望有所帮助.