问题描述
R 中的 lpSolveAPI
包可让您指定和求解线性程序。然而,在已经求解的 LP 上调用 solve()
比开始求解 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,3,rep(-1,m))
set.rhs(lps.model,rnorm(m) + rep(5,m))
set.objfn(lps.model,c(1,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()
/ add.constraint()
编辑 LP,这使得“高效”解决方案比解决每个 LP 冷的幼稚方法要慢得多。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)