r - 为什么 lpSolveAPI 求解器在第二次运行时变慢?
问题描述
R 中的lpSolveAPI
包允许您指定和求解线性程序。然而,调用solve()
一个已经解决的 LP 比一开始就解决 LP 慢得多。为什么会发生这种情况,如何避免这个问题?
这是一个显示问题的最小示例:
set.seed(42)
library(lpSolveAPI)
#------------
# Set up LP
#------------
m <- 2 ** 15
lps.model <- make.lp(nrow = m, ncol = 3)
set.column(lps.model, 1, rep(1,m))
set.column(lps.model, 2, rep(1,m))
set.column(lps.model, 3, rep(-1,m))
set.rhs(lps.model, rnorm(m) + rep(5,m))
set.objfn(lps.model,c(1,0,0))
set.constr.type(lps.model, rep(">=",m))
#-----------------
# Solve it twice
#-----------------
system.time(solve(lps.model)) # 0.02 elapsed
system.time(solve(lps.model)) # 0.14 elapsed
为什么这有关系?
我正在做一些顺序统计测试;每个测试都涉及求解一个 LP,每个 LP 与最后一个的不同之处仅在于 O(log m) 约束。理论上,通过求解第一个 LP 并保存解决方案,稍微编辑约束,然后将解决方案用作下一个 LP 的热启动,应该可以非常快速地做到这一点。
上面的问题扩展到使用delete.constraint()
/编辑 LP add.constraint()
,这使得“有效”解决方案比解决每个 LP 冷的天真的方法慢得多。
解决方案
推荐阅读
- python - 如何从列表的现有或反向顺序创建新数组 Python
- c# - C# 字典不起作用,将输入与键值对进行比较时,只有最后一对起作用
- android - Exificient exception "schema_reference.4: Failed to read schema document xxx.xsd" with import keyword
- java - java.lang.Error:未解决的编译问题:
- php - PHP 加法 (+) 功能有限制吗?
- python - Python如何划分非常大的整数?
- python - 如何在python中的函数中将未知数量的参数相乘
- parsing - Haskell Ast -> IO ()
- php - 如何按与模型的自定义附加关系排序
- bash - 如何输出按用户排序的命令列表?